일부 필터링을 사용하여 도커 소켓을 http 나머지와 공유

4139 단어 godockertraefik
제가 프로그래밍한 포워드 툴https://github.com/worldline-go/forward로 소켓 파일을 http로 공유하겠습니다.

이 도구는 http 요청을 수신하고 일부 메서드 필터링을 사용하여 소켓으로 전달합니다.

이제 docker에서 다운로드하거나 실행할 수 있습니다.

다운로드하려면 release page을 방문하십시오.

# scratch version
docker pull ghcr.io/worldline-go/forward:v0.1.2
# alpine version
docker pull ghcr.io/worldline-go/forward:v0.1.2-alpine


이 도구는 소켓 파일의 위치와 리디렉션 경로 및 일부 필터링 방법을 표시하기 위해 명령 매개 변수를 요청합니다.

여기서는 모든 /docker/* 요청을 docker.sock 파일로 리디렉션합니다. 그리고 일부 방법을 비활성화하므로 필터링 방법 없이 모든 방법이 작동합니다.

메서드 이름에서 시작하는 -를 사용하면 비활성화됩니다.

-s /docker.sock:/docker/:-POST,-PUT,-DELETE,-PATCH



export socket to HTTP
version: 0.1.2 commit: b8e86c7 buildDate:2022-06-29T10:46:25Z

Usage:
  forward [flags]

Flags:
  -h, --help                 help for forward
  -H, --host string          Host to listen on, default: 0.0.0.0:8080 (default "0.0.0.0:8080")
  -s, --socket stringArray   Socket to export: /var/run/docker.sock:/docker/:*,-POST,-PUT,-DELETE
  -v, --version              version for forward


뛰자

docker run --rm -p 8080:8080 -v /var/run/docker.sock:/docker.sock ghcr.io/worldline-go/forward:v0.1.2 -s /docker.sock:/docker/:-POST,-PUT,-DELETE,-PATCH


이제 http 서비스를 호출합니다(자세한 내용은 this document 확인).

curl http://localhost:8080/docker/containers/json


나는 /docker 경로에 공유했기 때문에 /docker 접두사로 호출했지만 이것은 경로를 설정할 필요가 없는 데모용입니다.


이제 이 도구를 traefik에서 사용할 수 있습니다.

Traefik은 프록시 도구이며 스웜 모드에서 서비스 정보를 찾으려면 docker.sock 통신이 필요합니다.

우리는 Traefik에 docker.sock을 마운트하고 통신을 해결할 수 있지만 한 가지 점이 있습니다. swarm의 작업자 노드docker.sock는 swarm-api(기본값)에 도달할 수 없습니다. 이 통신을 수정하여 앞으로 도구를 서비스로 실행하고 Traefik을 서비스로 설정하여 도커 소켓과 통신할 수 있습니다.

전달 서비스

forward-docker:
  image: ghcr.io/worldline-go/forward:v0.1.2
  command: "-s /var/run/docker.sock::-POST,-PUT,-PATCH,-DELETE"
  deploy:
    mode: global
    # Just works in manager nodes for swarm API
    placement:
      constraints:
        - "node.role==manager"
  volumes:
    - /var/run/docker.sock:/var/run/docker.sock
  networks:
    - proxy


traefik의 정적 구성 변경 enpoint에서

providers:
  docker:
    # endpoint: "unix///var/run/docker.sock"
    endpoint: "tcp://forward-docker:8080"


이제 Swarm의 모든 노드에서 Traefik을 복제할 수 있습니다.

좋은 웹페이지 즐겨찾기