Cilium 的 L7 感知流量管理

查看本文大纲

Cilium 提供了通过 CRDs(如 CiliumEnvoyConfigCiliumClusterwideEnvoyConfig)控制 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.Listenertype.googleapis.com/envoy.config.route.v3.RouteConfiguration,始终可用。

Cilium 节点部署了一个 Envoy 镜像以支持 Cilium 的 HTTP 策略执行和可观测性。这个 Envoy 构建针对 Cilium Agent 的需求进行了优化,并没有包含 Envoy 代码库中许多可用的 Envoy 扩展。

要查看哪些 Envoy 扩展可用,请查看 Envoy 扩展配置文件。只有没有用 # 注释掉的扩展会内置到 Cilium Envoy 镜像中。我们将根据用户反馈发展内置扩展的列表。

示例

请参考以下示例了解如何使用和利用 Cilium 的入口功能: