CiliumEnvoyConfig

查看本文大纲

CiliumEnvoyConfig 是 Cilium Service Mesh 提供的一个自定义资源定义(CRD),用于配置 Cilium 代理内置的 Envoy 组件。通过 CiliumEnvoyConfig,用户可以灵活地控制 Envoy 的行为,以满足特定的流量管理需求。

主要功能

  1. L7 负载均衡和 URL 重写: 可以定义 Envoy 监听器,在后端服务之间进行 L7 负载均衡,并对 URL 路径进行重写。这在需要对 HTTP 流量进行处理时非常有用。

  2. 细粒度流量控制: 结合 CiliumNetworkPolicy,可以对 HTTP、gRPC 和 Kafka 等协议的流量应用更细粒度的访问控制规则。

  3. Envoy 配置管理: 通过声明式的 CRD 定义 Envoy 配置,可以方便地管理和更新 Envoy 的行为,而无需直接修改 Envoy 配置文件。

  4. 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-1echo-service-2 之间进行 L7 负载均衡。对 /foo 路径的请求会被重写为 /,从而可以访问到 echo-service-1

CiliumEnvoyConfig 提供了一种灵活的方式来管理 Cilium 中 Envoy 代理的行为,在需要对应用层流量进行控制和处理时非常有用。