Cilium 提供了通过 CRDs(如 CiliumEnvoyConfig
和 CiliumClusterwideEnvoyConfig
)控制 L7 流量的方式。
先决条件
- 必须配置 Cilium 以启用 NodePort,使用
nodePort.enabled=true
或通过启用 kube-proxy 替换kubeProxyReplacement=true
。有关更多信息,请参阅 kube-proxy 替换。
注意事项
CiliumEnvoyConfig
资源只进行了最小验证,并且没有定义的冲突解决行为。这意味着如果你创建了多个修改 Envoy 配置相同部分的 CECs,结果可能是不可预测的。- 除了这种最小验证之外,
CiliumEnvoyConfig
对配置的正确性也几乎没有向用户反馈。因此,如果 CEC 导致了不希望的结果,故障排查将需要检查 Envoy 配置和日志,而不是能够查看有问题的CiliumEnvoyConfig
。 CiliumEnvoyConfig
由 Cilium 的入口和网关 API 支持使用,以通过每个节点的 Envoy 代理指导流量。如果你创建了与自动生成的配置冲突或修改的 CECs,结果可能是不可预测的。在这些用例中使用 CECs 时要非常小心。通过确保 Cilium 生成的所有配置在语义上有效,管理上述风险。
安装
使用 helm 标志 ingressController.enabled=true
可启用 Cilium 入口控制器。有关新安装,请参考使用 Helm 安装。
helm upgrade cilium cilium/cilium --version 1.16.1 \
--namespace kube-system \
--reuse-values \
--set ingressController.enabled=true \
--set ingressController.loadbalancerMode=dedicated
kubectl -n kube-system rollout restart deployment/cilium-operator
kubectl -n kube-system rollout restart ds/cilium
通过设置 --set ingressController.default=true
标志,Cilium 可以成为默认的入口控制器。这将即使没有设置 ingressClass
也会创建入口条目。
如果你只想使用 Envoy 流量管理功能而不支持入口,你应该只启用 --enable-envoy-config
标志。
helm upgrade cilium cilium/cilium --version 1.16.1 \
--namespace kube-system \
--reuse-values \
--set envoyConfig.enabled=true
kubectl -n kube-system rollout restart deployment/cilium-operator
kubectl -n kube-system rollout restart ds/cilium
此外,代理负载均衡功能可以通过 loadBalancer.l7.backend=envoy
标志进行配置。
helm upgrade cilium cilium/cilium --version 1.16.1 \
--namespace kube-system \
--reuse-values \
--set loadBalancer.l7.backend=envoy
kubectl -n kube-system rollout restart deployment/cilium-operator
kubectl -n kube-system rollout restart ds/cilium
接下来你可以检查 Cilium 代理和 Operator 的状态:
cilium status
警告
确保你安装了 cilium-cli v0.15.0 或更高版本。其余的指令与较旧版本的 cilium-cli 不兼容。要确认你的系统中安装的 cilium-cli 版本,请运行:
cilium version --client
有关更多详细信息,请参阅 Cilium CLI 升级说明。
Hubble CLI 也用于后续步骤中观察流量。
支持的 Envoy API 版本
目前只支持 Envoy API v3。
支持的 Envoy 扩展资源类型
Envoy 扩展是可能内置或不内置于 Envoy 构建中的资源类型。在 Envoy 文档中提到的标准类型,如 type.googleapis.com/envoy.config.listener.v3.Listener
和 type.googleapis.com/envoy.config.route.v3.RouteConfiguration
,始终可用。
Cilium 节点部署了一个 Envoy 镜像以支持 Cilium 的 HTTP 策略执行和可观测性。这个 Envoy 构建针对 Cilium Agent 的需求进行了优化,并没有包含 Envoy 代码库中许多可用的 Envoy 扩展。
要查看哪些 Envoy 扩展可用,请查看 Envoy 扩展配置文件。只有没有用 #
注释掉的扩展会内置到 Cilium Envoy 镜像中。我们将根据用户反馈发展内置扩展的列表。
示例
请参考以下示例了解如何使用和利用 Cilium 的入口功能: