Traefik SSL 用於在非標準埠上執行的服務
免責聲明:我的 Docker 和 Traefik 知識很薄弱。我曾多次嘗試遵循 Traefik 文件,但我通常只是感到困惑,可能是因為我想要解決的不僅僅是最簡單的案例,而且我確信我錯過了一些基礎知識。
在我目前的設置中,我可以創建 Traefik v2 獲取的基於 Web(埠 80)的 Docker 服務,創建 LE 證書,從 http:80 重定向到 https:443,然後公開。下面是我
docker-compose.yml
的 Traefik 和一個有效的範例服務。但是,假設我的基於 Web 的服務確實想在 80 以外的埠上執行。例如,我想執行statping,它在埠 8080 上執行。考慮到我目前擁有的 SSL 設置,是否有可能,將其連接起來,以便我可以公開入口點http://statping.MYTLD並依賴 Traefik:1. 重定向到https://statping.MYTLD,2 . 獲取證書,以及 3. 公開我的 statping Docker容器?即使底層服務不在埠 80 上執行,Traefik 能否處理 Acme http 挑戰?我認為它可以,因為我的工作樣本甚至沒有暴露超過容器級別的埠。
注意:我最熟悉 Docker Compose,但也許對於像 statping 這樣的服務,我需要弄清楚如何編寫自己的 DOCKERFILE 以便我可以誘使它在埠 80 而不是埠 8080 上執行?
感謝您的任何見解!
交通
docker-compose.yml
:version: "3.3" networks: traefik: external: true services: traefik: image: "traefik:v2.3" container_name: "traefik" command: #- "--log.level=DEBUG" - "--api.insecure=true" - "--providers.docker=true" - "--providers.docker.exposedbydefault=false" - "--entrypoints.web.address=:80" - "--entrypoints.websecure.address=:443" - "--entrypoints.web.http.redirections.entryPoint.to=websecure" - "--entrypoints.web.http.redirections.entryPoint.scheme=https" - "--entrypoints.web.http.redirections.entrypoint.permanent=true" - "--certificatesresolvers.myresolver.acme.httpchallenge=true" - "--certificatesresolvers.myresolver.acme.httpchallenge.entrypoint=web" # FOR TESTING. #- "--certificatesresolvers.myresolver.acme.caserver=https://acme-staging-v02.api.letsencrypt.org/directory" - "--certificatesresolvers.myresolver.acme.email=craig@wereallconnected.ca" - "--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json" ports: - "80:80" - "443:443" - "8080:8080" volumes: - "./letsencrypt:/letsencrypt" - "/var/run/docker.sock:/var/run/docker.sock:ro"
樣品服務
docker-compose.yml
:version: "3.3" networks: traefik: external: true services: whoami2: image: "traefik/whoami" container_name: "simple-service2" labels: - "traefik.enable=true" - "traefik.http.routers.whoami2.rule=Host(`whoami2.MYTLD`)" - "traefik.http.routers.whoami2.entrypoints=websecure" - "traefik.http.routers.whoami2.tls.certresolver=myresolver" networks: - traefik restart: unless-stopped
來自traefik 文件:
如果一個容器暴露了多個埠,或者沒有暴露任何埠,那麼您必須通過使用標籤手動指定 Traefik 應該使用哪個埠進行通信
traefik.http.services.<service_name>.loadbalancer.server.port
(在路由的專用部分中閱讀有關此標籤的更多資訊)。因此,如果 whoami 正在偵聽 8080 並且沒有公開一個埠,則應指定標籤:
"traefik.http.services.whoami2.loadbalancer.server.port=8080"