Rancher 系列文章-K3s Traefik MiddleWare 報錯-Failed to create middleware keys

2023-03-26 15:02:46

概述

書接上回:《Rancher 系列文章-K3S 叢集升級》, 我們提到:通過一鍵指令碼升級 K3S 叢集有報錯。

接下來開始進行 Traefik 報錯的分析和修復, 問題是:

  • 所有 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 的檔案把這個引數加上。

編輯 K3s 的 Manifests Helm 檔案