Demo Traefik 2 sebagai Reverse Proxy di Docker Swarm menggunakan cloud dengan contoh IP publik 54.169.31.229
, yang dapat dipakai untuk mengakses situs dari internet. Bisa juga mengganti IP publik dengan menggunakan Domain (misal domainku.com
) sebagai Host rule
Berikut contoh dengan menggunakan Swarm untuk menjalankan Traefik 2 sebagai service reverse proxy dan 3 service lainnya, yaitu:
1.Hello World service
Docker Image : tutum/hello-world
Rule Path : /
Akses Port : 80
Akses URL : http://54.169.31.229/ (demo URL)
2.Whoami service
Docker Image : jwilder/whoami
Rule Path : /whoami
Akses Port : 80
Akses URL : http://54.169.31.229/whoami (demo URL)
3.Whoami service
Docker Image : containous/whoami
Rule Path : /whoami2
Akses Port : 80
Akses URL : http://54.169.31.229/whoami2 (demo URL)
4.Traefik 2
Api Raw Data : http://54.169.31.229:8080/api/rawdata
Dashboard : http://54.169.31.229:8080/dashboard
Berikut arsitektur reverse proxy
Prasyarat:
- Demo ini dijalankan di Ubuntu
- Docker sudah terinstall
- Docker swarm sudah terbentuk
Jika belum, maka bisa buat swarm dengan command dibawah ini:
$ docker swarm init
Cara menjalankan demo:
- Buat network overlay baru di Swarm dengan nama traefik-public
$ docker network create --driver=overlay traefik-public
- Unduh file konfigurasi yang dibutuhkan
$ curl https://raw.githubusercontent.com/luwaktech/traefik2simplepathdemo/master/traefik2.yml > traefik2.yml
$ curl https://raw.githubusercontent.com/luwaktech/traefik2simplepathdemo/master/app.yml > app.yml
- Ubah host
54.169.31.229
pada file app.yml
Ubah menggunakan IP publik server atau bisa juga diubah menggunakan hostname, misaldomainku.com
$ vi app.yml
Contoh:
- traefik.http.routers.helloworld.rule=Host(
54.169.31.229
) - traefik.http.routers.whoami.rule=Host(
54.169.31.229
) && Path(/whoami
) - traefik.http.routers.whoami2.rule=Host(
54.169.31.229
) && Path(/whoami2
)
- Deploy stack service traefik 2 memakai yml
$ docker stack deploy -c traefik2.yml demo
- Deploy stack service aplikasi memakai yml juga
$ docker stack deploy -c app.yml demo
- Cek docker service
$ docker service ls
- Buka situs di web browser menggunakan IP Public/Domain
- http://54.169.31.229/
- http://54.169.31.229/whoami
- http://54.169.31.229/whoami2
- Buka Traefik API raw data URL
http://54.169.31.229:8080/api/rawdata
- Scale service whoami2 menjadi 3 instance
$ docker service scale demo_whoami2=3
Coba akses http://54.169.31.229/whoami2
beberapa kali, terlihat bahwa IP nya akan berubah karena adanya load balancing dari Traefik 2
- Bersihkan demo dengan cara remove semua service yang ada
$ docker service rm $(docker service ls -q)
- Bersihkan network
$ docker network rm traefik-public
- Leave swarm
$ docker swarm leave --force
Penjelasan
Traefik2.yml
- Jika ingin menjalan traefik dibelakang nginx/haproxy, maka perlu mengubah port 80:80 menjadi
proxy port
pada docker, seperti dibawah ini:
ports:
# The HTTP port
#- "80:80"
# The HTTP port as proxy (jika dipakai dibelakang nginx/haproxy)
- target: 80
published: 80
mode: host
# The Web UI (enabled by --api.insecure=true)
- "8080:8080"
Dengan mode:host, hal ini akan membuat docker instance untuk listen di host port
Youtube demo (versi video)
https://bit.ly/30TAD6o
Referensi:
Traefik 2 - https://docs.traefik.io/v2.0/
Docker swarm - https://docs.docker.com/engine/swarm/
Semoga bisa membantu.
Terima kasih.
sibeeni