Halo semuanya,
Pada kali ini saya mau sharing bagaimana cara melakukan routing TCP Traffic di docker.
Biasanya kita di sebuah organisasi atau perusahaan mempunyai web server, host, dan aplikasi yang hanya bisa di akses melalui Private Network (VPN) agar aman dan tidak terexpose ke public.
pada contoh dibawah ini, saya akan memberikan contoh merouting port 22 dari gitlab, karena gitlab tersebut hanya bisa di akses menggunakan VPN dan gitlab nya harus di akses melalui custom domain gitlab.luqmanul.com (domain local yang hanya berlaku di dalam vpn tersebut) , jadi gitlab.luqmanul.com itu menggunakan ip webserver yang kita gunakan sebagai proxy, lalu dari webserver tersebut yang akan berkomunikasi dengan container/host gitlab.
Berikut ini contoh nya, pertama-tama kita atur dahulu traefik.yml seperti dibawah ini
# Docker configuration backend
providers:
docker:
network: privatenet
constraints: Label(`privatenet`,`true`)
# API and dashboard configuration
api:
dashboard: false
insecure: false
# Nah kalian pertama harus definisikan dulu entrypoint nya
# misal saya mau routing traffic ssh, berarti saya harus menambahkan
# ssh.address = :22
entryPoints:
http:
address: ":80"
https:
address: ":443"
ssh:
address: ":22"
certificatesResolvers:
letsencrypt:
acme:
email: admin@luqmanul.com
storage: acme.json
tlsChallenge: {}
cloudflare:
acme:
email: admin@luqmanul.com
storage: acme.json
dnsChallenge:
provider: cloudflare
resolvers:
- "1.1.1.1:53"
- "1.0.0.1:53"
traefik.yml
Nah lalu tinggal menambahkan label di container / docker-compose.yml nya ya seperti dibawah ini
version: '3.6'
networks:
privatenet:
external: true
services:
gitlab:
logging:
driver: "fluentd"
options:
fluentd-address: localhost:24224
tag: gitlab
container_name: gitlab
image: 'gitlab/gitlab-ee:latest'
restart: always
hostname: 'gitlab.luqmanul.com'
networks:
- privatenet
volumes:
- ./_DATA/config:/etc/gitlab
- ./_DATA/logs:/var/log/gitlab
- ./_DATA/data:/var/opt/gitlab
shm_size: '3G'
labels:
- traefik.docker.network=privatenet
- traefik.http.services.gitlab.loadbalancer.server.port=80
- traefik.http.routers.gitlab.rule=Host(`gitlab.luqmanul.com`)
- traefik.http.routers.gitlab.entrypoints=https
- traefik.http.routers.gitlab.tls=true
- traefik.http.routers.gitlab.tls.certresolver=cloudflare
- privatenet=true
# label dibawah ini untuk memberitahu traefik untuk merouting
# port 22 yang masuk lewat domain gitlab.luqmanul.com
# ke container gitlab ini, jadi kita tidak perlu
# expose port 22 dari container ini ke host docker nya
- traefik.tcp.routers.gitlab-ssh.rule=HostSNI(`*`)
- traefik.tcp.routers.gitlab-ssh.entrypoints=ssh
- traefik.tcp.routers.gitlab-ssh.service=gitlab-ssh-svc
- traefik.tcp.services.gitlab-ssh-svc.loadbalancer.server.port=22
lalu teman-teman bisa langsung mencoba mengakses gitlab.luqmanul.com dengan port 22.