在 Cilium 中,Envoy 作为 L7 代理的使用和部署主要通过以下几个步骤实现:
Envoy 的部署方式
-
内嵌于 Cilium Agent: 在 Cilium 的早期版本中,Envoy 作为 Cilium Agent 的一部分运行。这种方式的优点是简单易用,但缺点是 Envoy 和 Cilium Agent 共享相同的生命周期,重启或更新其中一个会影响另一个。
-
作为 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 能力,适应现代云原生应用的需求。