用於在非標準連接埠上運行的服務的 Traefik SSL

用於在非標準連接埠上運行的服務的 Traefik SSL

免責聲明:我的 Docker 和 Traefik 知識很薄弱。我曾多次嘗試遵循 Traefik 文檔,但通常會感到困惑,可能是因為我想要解決的不僅僅是最簡單的情況,而且我確信我缺少一些基礎知識。

在我目前的設定中,我可以建立一個基於 Web(連接埠 80)的 Docker 服務,Traefik v2 會選擇該服務,建立 LE 證書,從 http:80 重定向到 https:443,然後公開。下面是我的docker-compose.ymlTraefik 以及一個有效的範例服務。

但是,假設我的基於 Web 的服務確實希望在 80 之外的連接埠上執行。統計,它在連接埠 8080 上運行。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

答案1

來自traefik 文件

如果容器公開多個端口,或不公開任何端口,則必須使用標籤手動指定 Traefik 應使用哪個端口進行通信 traefik.http.services.<service_name>.loadbalancer.server.port(在路由的專用部分中閱讀有關此標籤的更多資訊)。

因此,如果 whoami 正在監聽 8080 並且沒有暴露一個端口,您應該指定標籤:

"traefik.http.services.whoami2.loadbalancer.server.port=8080"

相關內容