Tailscale Docker Proxy - tailscale을 이용한 컨테이너 프록시
레딧에서 새로운 프로젝트를 봐서 공유합니다.
TSDPRoxy TSDProxy is a proxy for tailscale from ALMEIDAPAULOPT.GITHUB.IO
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 네트워크 간의 원활한 통합을 생성하여 작동합니다.
- 컨테이너 스캐닝 : TsDProxy는 레이블이 있는 컨테이너에 대해 Docker 환경을 지속적으로 모니터링합니다
tsdproxy.enable=true
. - Tailscale 머신 생성 : 태그가 지정된 컨테이너가 감지되면 TsDProxy는 해당 컨테이너에 대한 새로운 Tailscale 머신을 자동으로 생성합니다.
- 호스트 이름 할당 : Tailscale 머신에는
tsdproxy.name
레이블이나 컨테이너 이름을 기반으로 호스트 이름이 할당됩니다. - 포트 매핑 : TsDProxy는 컨테이너의 내부 포트를 Tailscale 머신에 매핑합니다.
- 트래픽 라우팅 : Tailscale 머신에 들어오는 요청은 적절한 Docker 컨테이너 및 포트로 라우팅됩니다.
- 동적 관리 : 컨테이너가 시작되고 중지되면 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
(선택 사항):true
Tailscale 퍼널(컨테이너를 공개 인터넷에 노출)을 활성화합니다.
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) |