Traefik · 集群 Ingress 控制器

Traefik 是这个 K3s 集群的 Ingress 入口控制器,所有 *.yldm.tech 通配域名经 Cloudflare Tunnel 转发到它,再由它按 Ingress 规则路由到各业务 Service。

它是 k3s 的内置组件,由 k3s 自带的 Helm chart 渲染部署,本仓库不存放它的 Deployment/Service 等运行时清单。仓库里唯一一份与 Traefik 相关的文件是 applications/networking/traefik/helmchartconfig-traefik.yaml,一个 HelmChartConfighelm.cattle.io/v1),用来覆盖 k3s 内置 traefik chart 的默认值。这是文档化它的调度定制与 MetalLB 兼容修复的地方,而不是完整的工作负载定义。

部署形态

  • Name
    命名空间
    Description
    kube-system(k3s 内置组件随集群安装在此)
  • Name
    工作负载类型
    Description
    Deployment(由 k3s traefik chart 34.2.1 渲染),HPA 2-5 副本
  • Name
    调度
    Description
    通过 HelmChartConfig 强制 nodeAffinity 到 worker 节点(node-role.kubernetes.io/worker In worker),并用 topologySpreadConstraints(maxSkew 1, topologyKey kubernetes.io/hostname, ScheduleAnyway)在 worker 之间软打散,每节点一副本
  • Name
    Service 类型
    Description
    LoadBalancer,VIP 192.168.88.221(由 MetalLB L2 模式分配并 ARP 通告)

副本不再像早期那样被 live-edit 的 nodeSelector workload=infra 钉在单一节点上(那会让 Ingress 入口落在一个故障域里)。现在改为只跑在 worker 节点、跨节点软打散,对应 PR #900 的"traefik 移出单节点,worker 间打散"。

配置与依赖

本仓库对 Traefik 的全部干预都集中在 helmchartconfig-traefik.yamlspec.valuesContent 里,覆盖三类默认值:

覆盖项目的
service.ipFamilyPolicySingleStack强制单栈 IPv4,让 MetalLB 能正常分配/通告 VIP
affinity.nodeAffinityrequiredDuringScheduling,限定 node-role.kubernetes.io/worker=workerIngress 入口只跑在 worker 节点
topologySpreadConstraintsmaxSkew 1 / hostname / ScheduleAnywayworker 之间一节点一副本软打散

依赖关系:上游入口依赖 Cloudflare Tunnelcloudflare-tunnel-yldm*.yldm.tech 通配转 Traefik);对外暴露依赖 MetalLB(L2 模式给它分配并通告 LoadBalancer VIP .221)。

访问与监控

Traefik 以 LoadBalancer Service 对外暴露,外部 VIP 为 192.168.88.221(MetalLB 默认池中 IPv4-only 地址)。README 记录其 Ingress 配置为 HPA 2-5 副本自动伸缩。本仓库的 traefik 目录下没有 ServiceMonitor、PrometheusRule、HPA/VPA、PDB 等独立清单——这些(如有)由 k3s 内置 chart 自身管理,不在本仓库 GitOps 范围内。

注意事项

ipFamilyPolicy: SingleStack 这条覆盖是一次真实故障的修复,不能去掉:k3s traefik chart 34.2.1 默认把 service.ipFamilyPolicy 设为 PreferDualStack,而本集群 MetalLB 的 default-pool 是 IPv4-only,无法满足双栈请求,导致 traefik 的 LB VIP 192.168.88.221 不再被通告,所有 Ingress 报 "No route to host"。强制 SingleStack 后 MetalLB 才能正常分配/通告该 IPv4 VIP。

调度定制的来源差异要记住:traefik 的调度走本仓库 Git 管理的这份 HelmChartConfig;而同为 k3s 内置组件的 coredns / metrics-server 是在集群内直接 patch(workload: infra),k3s 重启可能回到默认值,属已知事项。

因为 VIP .221 由 MetalLB 的 speaker 通过 ARP 通告,MetalLB speaker 宕掉会直接带走外部 Ingress:没有 ARP 应答者时 .221 不可达,相当于整条对外入口断掉。排查 Ingress 不通时,MetalLB 的健康状态是必查项之一。

返回 Networking 总览

评论