我們經常會為了 http 服務部署在 K3s 之際,在 Ingress 設好合法的憑證,讓使用者能透過 https 協定訪問。但這次遇到新版的 Elasticsearch 比較特別,在初始化的時候就會有一張自簽憑證綁進來,希望外界永遠依賴 https 協定與 Elasticsearch 通訊(即便憑證不受信任)。仔細想想,這個觀點並沒什麼不好,比起傳輸內容在網路上裸奔,待信任的自簽憑證的確幫我們加密了。但問題是,我們面臨了抉擇:
--- apiVersion: traefik.io/v1alpha1 kind: ServersTransport metadata: name: my-transport namespace: default spec: insecureSkipVerify: true --- apiVersion: v1 kind: Service metadata: name: my-service namespace: default annotations: traefik.ingress.kubernetes.io/service.serversscheme: https traefik.ingress.kubernetes.io/service.serverstransport: default-my-transport@kubernetescrd ...
網路上流傳著類似的例子,其中有些是第 18 行漏了 default- 命名空間,這招就會無效,我們可以在 kubectl logs deploy/traefik -n kube-system 看到線索:
level=error msg="servers transport not found my-transport@kubernetes" entryPointName=websecure routerName=...
又或者想要進一步確認 ServersTransport 的存在,但這個新鮮的東西還不是隨便就看得到:
kubectl get ServersTransport
No resources found in default namespace.
原來全名叫 ServersTransport.traefik.io 才對。