# Docker的網路-Application Proxy 在介紹除錯工具之前,想先將一般企業級服務架構先建立起來,再輔以除錯工具,會比較好呈現實際環境的狀況。 Application Proxy(以前稱為Reverse Proxy,相較於Client->Proxy->WAN這類的正向代理)一般會有硬體式跟軟體式,硬體式的常見就是F5 LTM這類的設備,軟體類最有名則是NGINX。 我們這邊想嘗試使用Cloud native的方案Traefik,相較之下比較輕量簡易,也有不錯的內建儀表板可以看到整個運作架構。 首先,先從官方的範例練習: https://doc.traefik.io/traefik/getting-started/quick-start/#more-instances-traefik-load-balances-them DockerCompose yaml如下: ``` version: '3' services: reverse-proxy: # The official v2 Traefik docker image image: traefik:v2.10.4 # Enables the web UI and tells Traefik to listen to docker command: --api.insecure=true --providers.docker ports: # The HTTP port - "80:80" # The Web UI (enabled by --api.insecure=true) - "8080:8080" volumes: # So that Traefik can listen to the Docker events - /var/run/docker.sock:/var/run/docker.sock whoami: # A container that exposes an API to show its IP address image: traefik/whoami labels: - "traefik.http.routers.whoami.rule=Host(`whoami.docker.localhost`)" ``` 這是嘗試用traefik當load balancing,服務則是whoami,可以呈現現在是哪個ip。 - "traefik.http.routers.whoami.rule=Host(`whoami.docker.localhost`)" 這一段的寫法我們可以理解成只要網址的路徑輸入成whoami.docker.localhost,就會導向whoami這個服務。 接著我們下指令,讓whoami這個無狀態服務出現2個,讓traefik幫我們分流 > sudo docker-compose up -d --scale whoami=2 ![](https://hackmd.io/_uploads/BkgBOCH1p.png) 我們在瀏覽器輸入網址: http://whoami.docker.localhost ![](https://hackmd.io/_uploads/B1CRO0rkT.png) ![](https://hackmd.io/_uploads/ryXLK0Bk6.png) 可以看到輸入127.0.0.1,後端會有兩種ip:172.25.0.4跟172.25.0.2。 Traefik有個Dashboard,可以輸入以下網址可以看到Dashboard: http://0.0.0.0:8080/dashboard#/ 因為我們的服務是http,點http ![](https://hackmd.io/_uploads/S1Fl50Bk6.png) 找到我們服務的route,點進去 ![](https://hackmd.io/_uploads/SJvmcCBy6.png) 依序是entrypoints->route->services,因為我們有多個services,點service看看這個route後端有幾個services ![](https://hackmd.io/_uploads/ryVq5CSk6.png) 這邊就相當清楚,我們有兩個docker services,剛好就是whoami出現的兩個ip ![](https://hackmd.io/_uploads/Hyp0qRH16.png) 後面我們會嘗試用這個範例當基礎,調整成其他服務一樣藉由traefik來作到application proxy效果。