美文网首页
Rancher 系列文章-K3s Traefik MiddleW

Rancher 系列文章-K3s Traefik MiddleW

作者: 东风微鸣 | 来源:发表于2023-03-25 10:11 被阅读0次

    概述

    书接上回:《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 文件

    📚️ Reference:

    • 自动部署 manifests 和 Helm charts
      /var/lib/rancher/k3s/server/manifests中找到的任何 Kubernetes 清单将以类似kubectl apply的方式自动部署到 K3s。以这种方式部署的 manifests 是作为 AddOn 自定义资源来管理的,可以通过运行kubectl get addon -A来查看。你会发现打包组件的 AddOns,如 CoreDNS、Local-Storage、Traefik 等。AddOns 是由部署控制器自动创建的,并根据它们在 manifests 目录下的文件名命名。

    该文件位于:/var/lib/rancher/k3s/server/manifests/traefik.yaml, 内容如下:

    ---
    apiVersion: helm.cattle.io/v1
    kind: HelmChart
    metadata:
      name: traefik-crd
      namespace: kube-system
    spec:
      chart: https://%{KUBERNETES_API}%/static/charts/traefik-crd-10.3.001.tgz
    ---
    apiVersion: helm.cattle.io/v1
    kind: HelmChart
    metadata:
      name: traefik
      namespace: kube-system
    spec:
      chart: https://%{KUBERNETES_API}%/static/charts/traefik-10.3.001.tgz
      set:
        global.systemDefaultRegistry: ""
      valuesContent: |-
        rbac:
          enabled: true
        ports:
          websecure:
            tls:
              enabled: true
        podAnnotations:
          prometheus.io/port: "8082"
          prometheus.io/scrape: "true"
        providers:
          kubernetesIngress:
            publishedService:
              enabled: true
        priorityClassName: "system-cluster-critical"
        image:
          name: "rancher/mirrored-library-traefik"
        tolerations:
        - key: "CriticalAddonsOnly"
          operator: "Exists"
        - key: "node-role.kubernetes.io/control-plane"
          operator: "Exists"
          effect: "NoSchedule"
        - key: "node-role.kubernetes.io/master"
          operator: "Exists"
          effect: "NoSchedule"
    

    在上面的 yaml 中加入如下配置:

    ...
        providers:
          kubernetesCRD:
            allowCrossNamespace: true
    

    待其生效后, 确实可以恢复正常, 但是 K3s 会定期将 Manifests 重置为原有配置, 就会导致问题再次出现.

    所以问题并没有最终解决.

    使用 HelmChartConfig 自定义打包的组件

    不过根据官方文档后续的内容, 我们可以通过 使用 HelmChartConfig 自定义打包的组件 的方式覆盖作为 HelmCharts(如 Traefik)部署的打包组件的值.

    具体配置如下:

    apiVersion: helm.cattle.io/v1
    kind: HelmChartConfig
    metadata:
      name: traefik
      namespace: kube-system
    spec:
      valuesContent: |-
        globalArguments:
        - "--providers.kubernetescrd.allowcrossnamespace=true"
    
    

    生效后, 恢复正常, 并且没有发生回滚.

    问题解决.

    🎉🎉🎉

    📚️ 参考文档

    三人行, 必有我师; 知识共享, 天下为公. 本文由东风微鸣技术博客 EWhisper.cn 编写.

    相关文章

      网友评论

          本文标题:Rancher 系列文章-K3s Traefik MiddleW

          本文链接:https://www.haomeiwen.com/subject/kuxnrdtx.html