kubeProxyReplacement 和 socketLB.enabled

30 阅读2分钟

Cilium 文档写道:

“Cilium’s kube‑proxy replacement depends on the socket‑LB feature.” (docs.cilium.io)

这里的“依赖”并不严格意味着你 必须在 Helm values 中显式开启 socketLB.enabled=true。更准确的理解是:

  1. kubeProxyReplacement 模式内部会自动启用 socket‑LB

    • 当你设置 kubeProxyReplacement=true 时,Cilium agent 会在启动时自动在内核里加载 socket‑LB 的 eBPF 程序(hook socket 层),保证服务流量的东西向(Pod→Service→Pod)能够被正确转发。
    • 也就是说,你不必在 Helm values 中显式写 socketLB.enabled=true,Cilium 会自己处理这一部分。
  2. socket‑LB 的默认 Helm 值只是针对独立启用

    • socketLB.enabled 默认值 false 仅表示如果你想在不启用 kubeProxyReplacement 的情况下单独启用 socket‑LB,需要显式打开。
    • 在 kubeProxyReplacement=true 的情况下,agent 内部会忽略 Helm 默认值,直接启用 socket‑LB,以满足功能依赖。

2. 为什么部署例子没有显式设置

在官方 Quick‑Start 或安装示例中,你会看到:

helm install cilium cilium/cilium \
  --namespace kube-system \
  --set kubeProxyReplacement=true \
  ...
  • 没有显式写 socketLB.enabled=true,但在部署完成后执行:
cilium status

你会看到输出中有:

KubeProxyReplacement:   True
Socket LB:              Enabled

这就说明:

  • Cilium agent 在启动时自动启用了 socket‑LB。
  • Helm chart 默认值 false 并不会阻止 kubeProxyReplacement 模式自动启用 socket‑LB。

3. kubeProxyReplacement=true 不开启 socketLB.enabled 是否可用?

  • 直接设置 socketLB.enabled=false(显式覆盖) :理论上可能导致 kubeProxyReplacement 的东西向流量转发不完整或异常,因为依赖的 socket‑LB eBPF hook 被禁止加载。官方文档没有提供明确支持这种用法。
  • 默认情况(不显式设置 socketLB.enabled) :可用,Cilium 会自动启用 socket‑LB,因此 kubeProxyReplacement 功能可以正常工作。

总结

配置情况kubeProxyReplacement 功能Socket LB 状态
kubeProxyReplacement=true + 默认 socketLB.enabled=false可用,自动启用 socket‑LBEnabled
kubeProxyReplacement=true + 显式 socketLB.enabled=true可用,功能一致Enabled
kubeProxyReplacement=false + socketLB.enabled=true可用,仅启用东西向 Pod→Service LBEnabled
kubeProxyReplacement=false + 默认 socketLB.enabled=false可用,但不取代 kube-proxyDisabled

所以,官方示例没有写 socketLB.enabled 是因为 在 kubeProxyReplacement 模式下,socket‑LB 会自动启用。你可以理解为 Helm values 的 socketLB.enabled 在 kubeProxyReplacement 模式下变成了“被忽略”,agent 会自行控制。