科技新知

 

前幾天,我們就使用traefik做了個最簡單的http反向代理。 做完上述的使用驗證後,我們可以正式開始看官方的例子,該例子加入了SSL,這就更充份地體現反向代理的用途。

官方教學連結

官方的yaml也很長,筆者實測了一個簡化版本。

services:
  traefik:
    image: traefik:v3.4
    ports:
      - target: 443
        published: 443
        protocol: tcp
    networks:
      - traefik_proxy
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
    configs:
      - source: dynamic-tls.yaml
        target: /dynamic/tls.yaml
    secrets:
      - source: certs-local.key
        target: /certs/local.key
      - source: certs-local.crt
        target: /certs/local.crt
    command:
      - --api.dashboard=true
      - --log.level=INFO
      - --accesslog=true
      - "--providers.file.filename=/dynamic/tls.yaml"
      - --providers.swarm.exposedByDefault=false
      - --providers.swarm.network=traefik_proxy
      - --entrypoints.websecure.address=:443
      - --entrypoints.websecure.http.tls=true
deploy: replicas: 1 placement: constraints: - node.role==manager whoami: image: traefik/whoami networks: - traefik_proxy deploy: labels: - "traefik.enable=true" - "traefik.http.routers.whoami.rule=Host(`whoami.swarm.localhost`)"
- "traefik.http.routers.whoami.tls=true"
- traefik.http.services.whoami.loadbalancer.server.port=80 networks: traefik_proxy: name: traefik_proxy driver: overlay attachable: true configs: dynamic-tls.yaml: file: ./dynamic/tls.yaml secrets: certs-local.key: file: ./certs/local.key certs-local.crt: file: ./certs/local.crt

餘下的就照跟官方設定

生成cert file。(或大家有正式的證書,就可以免去這一步。)

mkdir -p certs
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \\
  -keyout certs/local.key -out certs/local.crt \\
  -subj "/CN=*.swarm.localhost"

指向cert的動態設定檔。

tls:
  certificates:
    - certFile: /certs/local.crt
      keyFile: /certs/local.key

然後我們就可以這樣測試

curl -v -k -H 'host:whoami.swarm.localhost' 

筆者在一開始時,始終無法設定 dyanmic/tls.yaml ,其實是筆者誤會了 traefik 的讀取方式。本個例子中,traefik 其實會動態讀取 swarm 及 file provider 的設置,而dyanmic/tls.yaml是經過file provider的方式生效。也就是 traefik-ssl.yaml 中的"--providers.file.filename=/dynamic/tls.yaml"

本個例子與官方例子最大的不同,是官方的cert, tls, 是直接使用bind mount的方式存取,如果你有多過一個manager,這個方式不太有效。本文就用了swarm config及swarm secret,方便多個manager自動配置。不過swarm config及swarm secret都有個缺點,若要更新它們的內容,就必需要重命名(例如dynamic-tls.yaml=> dynamic-tls.yaml2) ,否則swarm不允許發佈。

完整 yaml 請見 github

馬交野


南京照相館
4DX  神奇4俠: 英雄第一步
MX4D 名偵探柯南 獨眼的殘像
劇場版《名偵探柯南:獨眼的殘像》
末日廝殺橋 澳門韓國電影節 2025
再‧見熊貓福寶 澳門韓國電影節 2025
哈爾濱 澳門韓國電影節 2025
復國者聯盟 澳門韓國電影節 2025
MX4D 鬼滅之刃 劇場版 無限列車篇
IMAX with Laser 神奇4俠: 英雄第一步
醬園弄.懸案
劇場版 GIVEN 被贈與的未來 -To The Sea-
醬園弄·懸案
4DX  F1電影
MX4D F1電影
F1 電影
F1電影
愉快動物餅大電影
名偵探柯南 獨眼的殘像
電影多啦A夢:大雄之繪畫世界物語
人工殺姬 2.0
舊年暑假搞乜鬼
神奇4俠: 英雄第一步
藍精靈大電影
超人
外星奇遇記
侏羅紀世界:重生
史迪仔
死神來了:血脈
南京照相館