使用 Envoy 作为 Cilium 的 L7 代理

查看本文大纲

在 Cilium 中,Envoy 作为 L7 代理的使用和部署主要通过以下几个步骤实现:

Envoy 的部署方式

  1. 内嵌于 Cilium Agent: 在 Cilium 的早期版本中,Envoy 作为 Cilium Agent 的一部分运行。这种方式的优点是简单易用,但缺点是 Envoy 和 Cilium Agent 共享相同的生命周期,重启或更新其中一个会影响另一个。

  2. 作为 DaemonSet 部署: 从 Cilium 1.14 版本开始,Envoy 可以独立部署为 DaemonSet。这种部署方式带来了多个好处:

    • 独立生命周期:Cilium Agent 的重启不会影响 Envoy 的运行,反之亦然。
    • 资源隔离:可以为 Envoy 和 Cilium Agent 设置不同的 CPU 和内存限制,以优化性能。
    • 日志管理:Envoy 的日志与 Cilium Agent 的日志分开,便于管理和调试。

要启用 Envoy 作为 DaemonSet,用户需要在安装 Cilium 时将 Helm 值 envoy.enabled 设置为 true

注意:Cilium 中使用的 Envoy 是经过定制的,其代码见 https://github.com/cilium/proxy。若想给该代理开发 Go 扩展,请参考本文档

Envoy 的功能

  • L7 流量管理:Envoy 负责处理 L7 的流量,包括 HTTP、gRPC 等协议的可见性和网络策略 enforcement。通过 CiliumNetworkPolicy,用户可以定义基于 HTTP 路径、方法等的访问控制规则。

  • 访问日志和监控:Envoy 提供了丰富的访问日志功能,用户可以通过 UNIX 域套接字与 Cilium Agent 进行通信,以获取流量统计和监控信息。

  • 管理控制台:Envoy 提供了一个管理控制台,可以实时查看和管理 Envoy 的配置和状态,帮助用户进行故障排查和性能监控。

部署示例

在 Kubernetes 集群中,可以通过以下命令来安装 Cilium 并启用 Envoy DaemonSet:

cilium install --version v1.14.2 --config envoy.enabled=true

安装完成后,用户可以通过 cilium status 命令检查 Envoy DaemonSet 的状态,确保其正常运行。

通过这种方式,Cilium 和 Envoy 的结合为 Kubernetes 提供了强大的 L7 流量管理和安全策略 enforcement 能力,适应现代云原生应用的需求。