CiliumEnvoyConfig
是 Cilium Service Mesh 提供的一个自定义资源定义(CRD),用于配置 Cilium 代理内置的 Envoy 组件。通过 CiliumEnvoyConfig
,用户可以灵活地控制 Envoy 的行为,以满足特定的流量管理需求。
主要功能
-
L7 负载均衡和 URL 重写: 可以定义 Envoy 监听器,在后端服务之间进行 L7 负载均衡,并对 URL 路径进行重写。这在需要对 HTTP 流量进行处理时非常有用。
-
细粒度流量控制: 结合
CiliumNetworkPolicy
,可以对 HTTP、gRPC 和 Kafka 等协议的流量应用更细粒度的访问控制规则。 -
Envoy 配置管理: 通过声明式的 CRD 定义 Envoy 配置,可以方便地管理和更新 Envoy 的行为,而无需直接修改 Envoy 配置文件。
-
Envoy 调试和监控: Envoy 管理控制台提供了一个 Web 界面,可以查看和管理 Envoy 代理的配置和状态,包括查看统计数据、指标和进行故障排查。
使用示例
以下是一个简单的 CiliumEnvoyConfig
示例,定义了一个 Envoy 监听器,在两个后端服务之间进行 50/50 的负载均衡,并将 /foo
路径重写为 /
:
apiVersion: cilium.io/v2
kind: CiliumEnvoyConfig
metadata:
name: envoy-traffic-management-test
spec:
clusters:
- name: echo-service-1
type: STATIC
connectTimeout: 0.250s
loadAssignment:
clusterName: echo-service-1
endpoints:
- lbEndpoints:
- endpoint:
address:
socketAddress:
address: echo-service-1
portValue: 8080
- name: echo-service-2
type: STATIC
connectTimeout: 0.250s
loadAssignment:
clusterName: echo-service-2
endpoints:
- lbEndpoints:
- endpoint:
address:
socketAddress:
address: echo-service-2
portValue: 8080
listeners:
- name: listener_0
address:
socketAddress:
address: 0.0.0.0
portValue: 8080
filterChains:
- filters:
- name: envoy.filters.network.http_connection_manager
typedConfig:
"@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
stat_prefix: ingress_http
route_config:
name: local_route
virtual_hosts:
- name: local_service
domains: ["*"]
routes:
- match:
path: "/foo"
route:
cluster: echo-service-1
prefix_rewrite: "/"
- match:
path: "/"
route:
cluster: echo-service-2
http_filters:
- name: envoy.filters.http.router
typedConfig: {}
通过应用这个 CiliumEnvoyConfig
,Envoy 将在 8080 端口监听流量,并在 echo-service-1
和 echo-service-2
之间进行 L7 负载均衡。对 /foo
路径的请求会被重写为 /
,从而可以访问到 echo-service-1
。
CiliumEnvoyConfig
提供了一种灵活的方式来管理 Cilium 中 Envoy 代理的行为,在需要对应用层流量进行控制和处理时非常有用。