Cilium 文档写道:
“Cilium’s kube‑proxy replacement depends on the socket‑LB feature.” (docs.cilium.io)
这里的“依赖”并不严格意味着你 必须在 Helm values 中显式开启 socketLB.enabled=true。更准确的理解是:
-
kubeProxyReplacement 模式内部会自动启用 socket‑LB
- 当你设置
kubeProxyReplacement=true时,Cilium agent 会在启动时自动在内核里加载 socket‑LB 的 eBPF 程序(hook socket 层),保证服务流量的东西向(Pod→Service→Pod)能够被正确转发。 - 也就是说,你不必在 Helm values 中显式写
socketLB.enabled=true,Cilium 会自己处理这一部分。
- 当你设置
-
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‑LB | Enabled |
kubeProxyReplacement=true + 显式 socketLB.enabled=true | 可用,功能一致 | Enabled |
kubeProxyReplacement=false + socketLB.enabled=true | 可用,仅启用东西向 Pod→Service LB | Enabled |
kubeProxyReplacement=false + 默认 socketLB.enabled=false | 可用,但不取代 kube-proxy | Disabled |
所以,官方示例没有写 socketLB.enabled 是因为 在 kubeProxyReplacement 模式下,socket‑LB 会自动启用。你可以理解为 Helm values 的 socketLB.enabled 在 kubeProxyReplacement 模式下变成了“被忽略”,agent 会自行控制。