Tailscale Docker Proxy - tailscale을 이용한 컨테이너 프록시

레딧에서 새로운 프로젝트를 봐서 공유합니다.

 


 

TSDPRoxy TSDProxy is a proxy for tailscale from ALMEIDAPAULOPT.GITHUB.IO

 

image.png.jpg

 

 

TsDProxy는 태그가 지정된 각 컨테이너에 대해 Tailscale 머신을 자동으로 생성하여 Docker 컨테이너를 Tailscale 네트워크에 안전하게 노출하는 프로세스를 간소화합니다. 이를 통해 복잡한 구성이나 추가 Tailscale 컨테이너 없이도 고유하고 안전한 URL을 통해 서비스에 액세스할 수 있습니다.

 

핵심 기능

자동 Tailscale 머신 생성 : 적절한 라벨로 태그가 지정된 각 Docker 컨테이너에 대해 TsDProxy는 새로운 Tailscale 머신을 생성합니다.

  • 기본 제공 : 기본적으로 각 서비스는를 통해 액세스할 수 있으며 https://{machine-name}.funny-name.ts.net, 여기서 는 {machine-name}컨테이너 이름이나 사용자 정의 라벨에서 파생됩니다.

주요 특징

간소화된 네트워킹 : 각 서비스에 대해 별도의 Tailscale 컨테이너가 필요 없습니다.

  • 레이블 기반 구성 : Docker 컨테이너 레이블을 사용하여 쉽게 설정할 수 있습니다.
  • 자동 HTTPS : Tailscale의 기본 제공 LetsEncrypt 인증서 지원을 활용합니다.
  • 유연한 프로토콜 지원 : HTTP 및 HTTPS 트래픽을 처리합니다(기본값은 HTTPS).
  • 가벼운 아키텍처 : 최소한의 오버헤드를 위한 효율적인 Docker 기반 디자인.

작동 원리

TsDProxy는 Docker 컨테이너와 Tailscale 네트워크 간의 원활한 통합을 생성하여 작동합니다.

  1. 컨테이너 스캐닝 : TsDProxy는 레이블이 있는 컨테이너에 대해 Docker 환경을 지속적으로 모니터링합니다 tsdproxy.enable=true.
  2. Tailscale 머신 생성 : 태그가 지정된 컨테이너가 감지되면 TsDProxy는 해당 컨테이너에 대한 새로운 Tailscale 머신을 자동으로 생성합니다.
  3. 호스트 이름 할당 : Tailscale 머신에는 tsdproxy.name레이블이나 컨테이너 이름을 기반으로 호스트 이름이 할당됩니다.
  4. 포트 매핑 : TsDProxy는 컨테이너의 내부 포트를 Tailscale 머신에 매핑합니다.
  5. 트래픽 라우팅 : Tailscale 머신에 들어오는 요청은 적절한 Docker 컨테이너 및 포트로 라우팅됩니다.
  6. 동적 관리 : 컨테이너가 시작되고 중지되면 TsDProxy가 자동으로 해당 Tailscale 머신과 라우팅 구성을 생성하고 제거합니다.

 

프록시하려는 Docker 컨테이너에 다음 라벨을 추가합니다.

labels:
- "tsdproxy.enable=true"
- "tsdproxy.name=example"
- "tsdproxy.container_port=8080"
- "tsdproxy.funnel=false"

  • tsdproxy.enable필수 ): true이 컨테이너가 프록시되어야 함을 나타내려면 설정합니다.
  • tsdproxy.name(선택 사항): 컨테이너에 할당할 머신 이름(기본값은 컨테이너 이름)
  • tsdproxy.container_port(선택 사항): 노출하려는 컨테이너의 내부 포트입니다(기본값은 첫 번째 노출 포트입니다).
  • tsdproxy.funnel(선택 사항): trueTailscale 퍼널(컨테이너를 공개 인터넷에 노출)을 활성화합니다.

Docker-compose

 

services:
  tailscale-docker-proxy:
    image: almeidapaulopt/tsdproxy:latest
    container_name: tailscale-docker-proxy
    ports:
      - "80:8080"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - datadir:/data
    restart: unless-stopped
    environment:
      DOCKER_HOST: unix:///var/run/docker.sock
      TSDPROXY_AUTHKEY: tskey-auth-SecretKey
      TSDPROXY_HOSTNAME: 10.0.10.0
      # TSDPROXY_AUTHKEYFILE: /run/secrets/authkey
      # TSDPROXY_DATADIR: /data
      # TSDPROXY_LOGLEVEL: info
      # TSDPROXY_CONTAINERACCESSLOG: true

    # secrets:
    #   - authkey

# secrets:
#   authkey:
#     file: tsdproxy_authkey.txt

volumes:
  datadir:

 

환경 변수 설명

 

변하기 쉬운 필수의 설명
도커 호스트 Docker 소켓으로 가는 경로
TSDPROXY_AUTHKEY Tailscale 인증 키(Tailscale 웹 UI에서 생성)
TSDPROXY_호스트 이름 LAN IP 주소 또는 docker 호스트 머신 이름(브릿지 네트워크를 사용하는 경우 localhost 또는 127.0.0.1을 사용할 수 없음)
TSDPROXY_AUTHKEYFILE 아니요 authkey를 포함하는 파일 경로(Docker Secrets와 호환되지 않음)
TSDPROXY_DATA디렉토리 아니요 데이터에 대한 사용자 정의 내부 디렉토리(기본값은 /data)
TSDPROXY_LOGLEVEL 아니요 로그 수준(기본값은 info)
TSDPROXY_CONTAINERACCESSLOG 아니요 태그가 지정된 컨테이너에 대한 프록시 액세스 로그 활성화(기본값은 true)

 

GitHub - almeidapaulopt/tsdproxy: Tailscale Docker Proxy Tailscale Docker Proxy. Contribute to almeidapaulopt/tsdproxy development by creating an account on GitHub. from GITHUB