書接上回:《Rancher 系列文章-K3S 叢集升級》, 我們提到:通過一鍵指令碼升級 K3S 叢集有報錯。
接下來開始進行 Traefik 報錯的分析和修復, 問題是:
IngressRoute
存取報錯 404報錯如下:
time="2022-05-05T09:51:21Z" level=error msg="Failed to create middleware keys: middleware kube-system/hsts-header is not in the IngressRoute namespace cert-manager" namespace=cert-manager providerName=kubernetescrd ingress=grafana
即無法跨 NameSpace 呼叫 Traefik MiddleWare.
首先根據官方檔案說明:Kubernetes IngressRoute & Traefik CRD - Traefik
可以設定 allowCrossNamespace
引數,該引數預設為 false
, 如果該引數設定為true
, IngressRoutes 可以參照其他 NameSpace 中的資源。
基本上斷定根因就是這個了。檢視 K3s v1.22.5+k3s2 的 Traefik 設定,確實沒有這個引數,如下:
...
containers:
- name: traefik
image: rancher/mirrored-library-traefik:2.5.0
args:
- '--entryPoints.metrics.address=:9100/tcp'
- '--entryPoints.traefik.address=:9000/tcp'
- '--entryPoints.web.address=:8000/tcp'
- '--entryPoints.websecure.address=:8443/tcp'
- '--api.dashboard=true'
- '--ping=true'
- '--metrics.prometheus=true'
- '--metrics.prometheus.entrypoint=metrics'
- '--providers.kubernetescrd'
- '--providers.kubernetesingress'
- >-
--providers.kubernetesingress.ingressendpoint.publishedservice=kube-system/traefik
- '--entrypoints.websecure.http.tls=true'
...
所以,剛開始就計劃通過編輯 Helm 的檔案把這個引數加上。