Cilium Service Mesh 流量管理
支持的版本: Cilium 1.16+, Kubernetes 1.28+ 最后更新: February 22, 2026
概述
Cilium Service Mesh 中的流量管理结合了基于 eBPF 的 L4 负载均衡与基于 Envoy 的 L7 路由。本章将通过 CiliumEnvoyConfig、CiliumNetworkPolicy 中的 L7 规则以及 Gateway API 集成,讲解高级流量管理功能。
流量管理架构
CiliumEnvoyConfig
基本结构
CiliumEnvoyConfig 为特定 Service 定义 Envoy 配置:
yaml
apiVersion: cilium.io/v2
kind: CiliumEnvoyConfig
metadata:
name: my-service-config
namespace: default
spec:
# Services this configuration applies to
services:
- name: my-service
namespace: default
# Backend services (optional)
backendServices:
- name: backend-v1
namespace: default
- name: backend-v2
namespace: default
# Envoy resource definitions
resources:
- "@type": type.googleapis.com/envoy.config.listener.v3.Listener
name: my-service-listener
# ... listener configurationHTTP 路由
基于路径的路由
yaml
apiVersion: cilium.io/v2
kind: CiliumEnvoyConfig
metadata:
name: path-routing
namespace: default
spec:
services:
- name: api-gateway
namespace: default
backendServices:
- name: users-service
namespace: default
- name: orders-service
namespace: default
- name: products-service
namespace: default
resources:
- "@type": type.googleapis.com/envoy.config.listener.v3.Listener
name: api-gateway-listener
filter_chains:
- filters:
- name: envoy.filters.network.http_connection_manager
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
stat_prefix: api-gateway
codec_type: AUTO
route_config:
name: api_routes
virtual_hosts:
- name: api
domains: ["*"]
routes:
# /users/* -> users-service
- match:
prefix: "/users"
route:
cluster: default/users-service
# /orders/* -> orders-service
- match:
prefix: "/orders"
route:
cluster: default/orders-service
# /products/* -> products-service
- match:
prefix: "/products"
route:
cluster: default/products-service
# Default route
- match:
prefix: "/"
direct_response:
status: 404
body:
inline_string: "Not Found"
http_filters:
- name: envoy.filters.http.router
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.Router基于 Header 的路由
yaml
apiVersion: cilium.io/v2
kind: CiliumEnvoyConfig
metadata:
name: header-routing
namespace: default
spec:
services:
- name: api-service
namespace: default
backendServices:
- name: api-v1
namespace: default
- name: api-v2
namespace: default
- name: api-beta
namespace: default
resources:
- "@type": type.googleapis.com/envoy.config.listener.v3.Listener
name: header-routing-listener
filter_chains:
- filters:
- name: envoy.filters.network.http_connection_manager
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
stat_prefix: api-service
route_config:
name: header_routes
virtual_hosts:
- name: api
domains: ["*"]
routes:
# Route to v2 if X-API-Version: v2 header present
- match:
prefix: "/"
headers:
- name: "X-API-Version"
exact_match: "v2"
route:
cluster: default/api-v2
# Route to beta if X-Beta-User: true header present
- match:
prefix: "/"
headers:
- name: "X-Beta-User"
exact_match: "true"
route:
cluster: default/api-beta
# Default: route to v1
- match:
prefix: "/"
route:
cluster: default/api-v1
http_filters:
- name: envoy.filters.http.router
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.Router基于方法的路由
yaml
apiVersion: cilium.io/v2
kind: CiliumEnvoyConfig
metadata:
name: method-routing
namespace: default
spec:
services:
- name: rest-api
namespace: default
backendServices:
- name: read-service
namespace: default
- name: write-service
namespace: default
resources:
- "@type": type.googleapis.com/envoy.config.listener.v3.Listener
name: method-routing-listener
filter_chains:
- filters:
- name: envoy.filters.network.http_connection_manager
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
stat_prefix: rest-api
route_config:
name: method_routes
virtual_hosts:
- name: api
domains: ["*"]
routes:
# GET requests -> read-service
- match:
prefix: "/"
headers:
- name: ":method"
exact_match: "GET"
route:
cluster: default/read-service
# POST, PUT, DELETE -> write-service
- match:
prefix: "/"
headers:
- name: ":method"
safe_regex_match:
google_re2: {}
regex: "POST|PUT|DELETE|PATCH"
route:
cluster: default/write-service
http_filters:
- name: envoy.filters.http.router
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.RouterL7 流量策略
CiliumNetworkPolicy L7 规则
CiliumNetworkPolicy 支持在 L7 层级进行细粒度流量控制:
yaml
apiVersion: cilium.io/v2
kind: CiliumNetworkPolicy
metadata:
name: l7-http-policy
namespace: default
spec:
endpointSelector:
matchLabels:
app: backend-api
ingress:
- fromEndpoints:
- matchLabels:
app: frontend
toPorts:
- ports:
- port: "8080"
protocol: TCP
rules:
http:
# Allow GET /api/users/*
- method: GET
path: "/api/users/.*"
# Allow GET /api/products/*
- method: GET
path: "/api/products/.*"
# Allow POST /api/orders
- method: POST
path: "/api/orders"
# With header conditions
- method: GET
path: "/api/admin/.*"
headers:
- "X-Admin-Token: secret-token"多种协议支持
Kafka L7 策略
yaml
apiVersion: cilium.io/v2
kind: CiliumNetworkPolicy
metadata:
name: kafka-l7-policy
namespace: kafka
spec:
endpointSelector:
matchLabels:
app: kafka-broker
ingress:
- fromEndpoints:
- matchLabels:
app: kafka-producer
toPorts:
- ports:
- port: "9092"
protocol: TCP
rules:
kafka:
# Allow produce to specific topics
- apiKey: "produce"
topic: "orders"
- apiKey: "produce"
topic: "events"
- fromEndpoints:
- matchLabels:
app: kafka-consumer
toPorts:
- ports:
- port: "9092"
protocol: TCP
rules:
kafka:
# Allow fetch from specific topics
- apiKey: "fetch"
topic: "orders"
- apiKey: "fetch"
topic: "events"
# Allow consumer group management
- apiKey: "offsetcommit"
topic: "orders"
- apiKey: "offsetfetch"
topic: "orders"DNS L7 策略
yaml
apiVersion: cilium.io/v2
kind: CiliumNetworkPolicy
metadata:
name: dns-l7-policy
namespace: default
spec:
endpointSelector:
matchLabels:
app: web-app
egress:
- toEndpoints:
- matchLabels:
k8s:io.kubernetes.pod.namespace: kube-system
k8s-app: kube-dns
toPorts:
- ports:
- port: "53"
protocol: UDP
rules:
dns:
# Allow specific domain lookups only
- matchPattern: "*.example.com"
- matchPattern: "api.external-service.io"
- matchName: "database.internal.svc.cluster.local"gRPC L7 策略
yaml
apiVersion: cilium.io/v2
kind: CiliumNetworkPolicy
metadata:
name: grpc-l7-policy
namespace: default
spec:
endpointSelector:
matchLabels:
app: grpc-server
ingress:
- fromEndpoints:
- matchLabels:
app: grpc-client
toPorts:
- ports:
- port: "50051"
protocol: TCP
rules:
http:
# gRPC is HTTP/2 based, so use http rules
- method: POST
path: "/myapp.UserService/GetUser"
- method: POST
path: "/myapp.UserService/ListUsers"
- method: POST
path: "/myapp.OrderService/.*"负载均衡
L4 负载均衡(eBPF)
eBPF 驱动的 L4 负载均衡可替代 kube-proxy:
yaml
# Cilium configuration (values.yaml)
kubeProxyReplacement: true
loadBalancer:
# Load balancing algorithm
algorithm: maglev # maglev or random
# Mode configuration
mode: snat # snat, dsr, or hybrid
# DSR settings (optional)
dsrDispatch: opt # opt or ipip
# Session affinity
serviceTopology: true
# Health checking
healthCheckNodePort: trueMaglev 哈希
L7 负载均衡(Envoy)
L7 负载均衡由 Envoy 提供:
yaml
apiVersion: cilium.io/v2
kind: CiliumEnvoyConfig
metadata:
name: l7-load-balancing
namespace: default
spec:
services:
- name: api-service
namespace: default
backendServices:
- name: api-backend
namespace: default
resources:
# Cluster definition
- "@type": type.googleapis.com/envoy.config.cluster.v3.Cluster
name: default/api-backend
connect_timeout: 5s
type: EDS
eds_cluster_config:
eds_config:
api_config_source:
api_type: GRPC
grpc_services:
- envoy_grpc:
cluster_name: xds-grpc-cilium
# Load balancing policy
lb_policy: ROUND_ROBIN
# Outlier detection (Circuit Breaker)
outlier_detection:
consecutive_5xx: 5
interval: 10s
base_ejection_time: 30s
max_ejection_percent: 50
# Health checks
health_checks:
- timeout: 5s
interval: 10s
unhealthy_threshold: 3
healthy_threshold: 2
http_health_check:
path: "/health"
expected_statuses:
- start: 200
end: 299
# Connection pool settings
circuit_breakers:
thresholds:
- priority: DEFAULT
max_connections: 1000
max_pending_requests: 1000
max_requests: 1000
max_retries: 3负载均衡算法选项
yaml
# Round Robin
lb_policy: ROUND_ROBIN
# Least Request
lb_policy: LEAST_REQUEST
least_request_lb_config:
choice_count: 2
# Random
lb_policy: RANDOM
# Ring Hash (Consistent Hashing)
lb_policy: RING_HASH
ring_hash_lb_config:
hash_function: XX_HASH
minimum_ring_size: 1024
maximum_ring_size: 8388608
# Maglev
lb_policy: MAGLEV
maglev_lb_config:
table_size: 65537流量拆分(Canary Deployment)
基于权重的流量拆分
yaml
apiVersion: cilium.io/v2
kind: CiliumEnvoyConfig
metadata:
name: canary-deployment
namespace: default
spec:
services:
- name: frontend
namespace: default
backendServices:
- name: frontend-stable
namespace: default
- name: frontend-canary
namespace: default
resources:
- "@type": type.googleapis.com/envoy.config.listener.v3.Listener
name: canary-listener
filter_chains:
- filters:
- name: envoy.filters.network.http_connection_manager
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
stat_prefix: frontend
route_config:
name: canary_routes
virtual_hosts:
- name: frontend
domains: ["*"]
routes:
- match:
prefix: "/"
route:
weighted_clusters:
clusters:
# 90% -> stable
- name: default/frontend-stable
weight: 90
# 10% -> canary
- name: default/frontend-canary
weight: 10
total_weight: 100
http_filters:
- name: envoy.filters.http.router
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.Router基于 Header 的 Canary
yaml
apiVersion: cilium.io/v2
kind: CiliumEnvoyConfig
metadata:
name: header-canary
namespace: default
spec:
services:
- name: api
namespace: default
backendServices:
- name: api-stable
namespace: default
- name: api-canary
namespace: default
resources:
- "@type": type.googleapis.com/envoy.config.listener.v3.Listener
name: header-canary-listener
filter_chains:
- filters:
- name: envoy.filters.network.http_connection_manager
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
stat_prefix: api
route_config:
name: header_canary_routes
virtual_hosts:
- name: api
domains: ["*"]
routes:
# Route to canary if X-Canary: true header present
- match:
prefix: "/"
headers:
- name: "X-Canary"
exact_match: "true"
route:
cluster: default/api-canary
# Default: route to stable
- match:
prefix: "/"
route:
cluster: default/api-stable
http_filters:
- name: envoy.filters.http.router
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.Router重试和超时
重试配置
yaml
apiVersion: cilium.io/v2
kind: CiliumEnvoyConfig
metadata:
name: retry-config
namespace: default
spec:
services:
- name: api-service
namespace: default
backendServices:
- name: api-backend
namespace: default
resources:
- "@type": type.googleapis.com/envoy.config.listener.v3.Listener
name: retry-listener
filter_chains:
- filters:
- name: envoy.filters.network.http_connection_manager
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
stat_prefix: api-service
route_config:
name: retry_routes
virtual_hosts:
- name: api
domains: ["*"]
routes:
- match:
prefix: "/"
route:
cluster: default/api-backend
timeout: 30s
# Retry policy
retry_policy:
# Status codes to retry
retry_on: "5xx,reset,connect-failure,retriable-4xx"
# Maximum retry attempts
num_retries: 3
# Retry interval
per_try_timeout: 10s
# Retry backoff
retry_back_off:
base_interval: 0.5s
max_interval: 10s
# Retriable headers
retriable_headers:
- name: "x-envoy-retriable-on"
exact_match: "true"
# Retry priority
retry_priority:
name: envoy.retry_priorities.previous_priorities
typed_config:
"@type": type.googleapis.com/envoy.extensions.retry.priority.previous_priorities.v3.PreviousPrioritiesConfig
update_frequency: 2
http_filters:
- name: envoy.filters.http.router
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.Router超时配置
yaml
apiVersion: cilium.io/v2
kind: CiliumEnvoyConfig
metadata:
name: timeout-config
namespace: default
spec:
services:
- name: slow-service
namespace: default
resources:
- "@type": type.googleapis.com/envoy.config.listener.v3.Listener
name: timeout-listener
filter_chains:
- filters:
- name: envoy.filters.network.http_connection_manager
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
stat_prefix: slow-service
# Connection timeout
common_http_protocol_options:
idle_timeout: 300s
headers_with_underscores_action: REJECT_REQUEST
# Stream timeouts
stream_idle_timeout: 60s
request_timeout: 120s
route_config:
name: timeout_routes
virtual_hosts:
- name: slow-service
domains: ["*"]
routes:
# Default route
- match:
prefix: "/"
route:
cluster: default/slow-service
timeout: 60s
# Endpoint requiring long processing time
- match:
prefix: "/long-running"
route:
cluster: default/slow-service
timeout: 300s
# Streaming endpoint (unlimited)
- match:
prefix: "/stream"
route:
cluster: default/slow-service
timeout: 0s # Unlimited
http_filters:
- name: envoy.filters.http.router
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.Router限流
本地限流
yaml
apiVersion: cilium.io/v2
kind: CiliumEnvoyConfig
metadata:
name: local-ratelimit
namespace: default
spec:
services:
- name: api-service
namespace: default
resources:
- "@type": type.googleapis.com/envoy.config.listener.v3.Listener
name: ratelimit-listener
filter_chains:
- filters:
- name: envoy.filters.network.http_connection_manager
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
stat_prefix: api-service
route_config:
name: ratelimit_routes
virtual_hosts:
- name: api
domains: ["*"]
routes:
- match:
prefix: "/"
route:
cluster: default/api-service
http_filters:
# Local Rate Limiter
- name: envoy.filters.http.local_ratelimit
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.http.local_ratelimit.v3.LocalRateLimit
stat_prefix: http_local_rate_limiter
# Global token bucket
token_bucket:
max_tokens: 1000
tokens_per_fill: 100
fill_interval: 1s
# Response headers
response_headers_to_add:
- append_action: OVERWRITE_IF_EXISTS_OR_ADD
header:
key: x-ratelimit-limit
value: "1000"
- append_action: OVERWRITE_IF_EXISTS_OR_ADD
header:
key: x-ratelimit-remaining
value: "%DYNAMIC_METADATA(envoy.http.local_rate_limit:remaining)%"
# Response when rate limit exceeded
status:
code: TooManyRequests
filter_enabled:
runtime_key: local_rate_limit_enabled
default_value:
numerator: 100
denominator: HUNDRED
filter_enforced:
runtime_key: local_rate_limit_enforced
default_value:
numerator: 100
denominator: HUNDRED
- name: envoy.filters.http.router
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.Router按路由限流
yaml
apiVersion: cilium.io/v2
kind: CiliumEnvoyConfig
metadata:
name: per-route-ratelimit
namespace: default
spec:
services:
- name: api-service
namespace: default
resources:
- "@type": type.googleapis.com/envoy.config.listener.v3.Listener
name: per-route-ratelimit-listener
filter_chains:
- filters:
- name: envoy.filters.network.http_connection_manager
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
stat_prefix: api-service
route_config:
name: ratelimit_routes
virtual_hosts:
- name: api
domains: ["*"]
routes:
# Auth endpoint - low rate limit
- match:
prefix: "/auth"
route:
cluster: default/api-service
typed_per_filter_config:
envoy.filters.http.local_ratelimit:
"@type": type.googleapis.com/envoy.extensions.filters.http.local_ratelimit.v3.LocalRateLimit
stat_prefix: auth_rate_limiter
token_bucket:
max_tokens: 10
tokens_per_fill: 5
fill_interval: 60s
# Search endpoint - medium rate limit
- match:
prefix: "/search"
route:
cluster: default/api-service
typed_per_filter_config:
envoy.filters.http.local_ratelimit:
"@type": type.googleapis.com/envoy.extensions.filters.http.local_ratelimit.v3.LocalRateLimit
stat_prefix: search_rate_limiter
token_bucket:
max_tokens: 100
tokens_per_fill: 50
fill_interval: 1s
# Default - high rate limit
- match:
prefix: "/"
route:
cluster: default/api-service
typed_per_filter_config:
envoy.filters.http.local_ratelimit:
"@type": type.googleapis.com/envoy.extensions.filters.http.local_ratelimit.v3.LocalRateLimit
stat_prefix: default_rate_limiter
token_bucket:
max_tokens: 1000
tokens_per_fill: 100
fill_interval: 1s
http_filters:
- name: envoy.filters.http.local_ratelimit
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.http.local_ratelimit.v3.LocalRateLimit
stat_prefix: http_local_rate_limiter
- name: envoy.filters.http.router
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.RouterURL 重写和 Header 操作
URL 重写
yaml
apiVersion: cilium.io/v2
kind: CiliumEnvoyConfig
metadata:
name: url-rewrite
namespace: default
spec:
services:
- name: api-gateway
namespace: default
backendServices:
- name: users-service
namespace: default
resources:
- "@type": type.googleapis.com/envoy.config.listener.v3.Listener
name: rewrite-listener
filter_chains:
- filters:
- name: envoy.filters.network.http_connection_manager
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
stat_prefix: api-gateway
route_config:
name: rewrite_routes
virtual_hosts:
- name: api
domains: ["*"]
routes:
# /api/v1/users/* -> /users/*
- match:
prefix: "/api/v1/users"
route:
cluster: default/users-service
prefix_rewrite: "/users"
# Regex rewrite
- match:
safe_regex:
google_re2: {}
regex: "/v([0-9]+)/(.*)"
route:
cluster: default/users-service
regex_rewrite:
pattern:
google_re2: {}
regex: "/v([0-9]+)/(.*)"
substitution: "/api/\\2?version=\\1"
# Host rewrite
- match:
prefix: "/legacy"
route:
cluster: default/users-service
host_rewrite_literal: "legacy.internal.svc.cluster.local"
prefix_rewrite: "/"
http_filters:
- name: envoy.filters.http.router
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.RouterHeader 操作
yaml
apiVersion: cilium.io/v2
kind: CiliumEnvoyConfig
metadata:
name: header-manipulation
namespace: default
spec:
services:
- name: api-service
namespace: default
resources:
- "@type": type.googleapis.com/envoy.config.listener.v3.Listener
name: header-listener
filter_chains:
- filters:
- name: envoy.filters.network.http_connection_manager
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
stat_prefix: api-service
route_config:
name: header_routes
virtual_hosts:
- name: api
domains: ["*"]
# Virtual host level headers
request_headers_to_add:
- header:
key: "X-Forwarded-By"
value: "cilium-envoy"
append_action: OVERWRITE_IF_EXISTS_OR_ADD
response_headers_to_add:
- header:
key: "X-Served-By"
value: "cilium-service-mesh"
append_action: OVERWRITE_IF_EXISTS_OR_ADD
response_headers_to_remove:
- "server"
- "x-powered-by"
routes:
- match:
prefix: "/"
route:
cluster: default/api-service
# Route level headers
request_headers_to_add:
- header:
key: "X-Request-Start"
value: "%START_TIME(%s.%3f)%"
append_action: OVERWRITE_IF_EXISTS_OR_ADD
- header:
key: "X-Envoy-Original-Path"
value: "%REQ(:PATH)%"
append_action: OVERWRITE_IF_EXISTS_OR_ADD
response_headers_to_add:
- header:
key: "X-Response-Time"
value: "%RESPONSE_DURATION%ms"
append_action: OVERWRITE_IF_EXISTS_OR_ADD
- header:
key: "X-Upstream-Host"
value: "%UPSTREAM_HOST%"
append_action: OVERWRITE_IF_EXISTS_OR_ADD
http_filters:
- name: envoy.filters.http.router
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.RouterGateway API 集成
GatewayClass 和 Gateway
yaml
# GatewayClass definition
apiVersion: gateway.networking.k8s.io/v1
kind: GatewayClass
metadata:
name: cilium
spec:
controllerName: io.cilium/gateway-controller
---
# Gateway definition
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
name: api-gateway
namespace: default
spec:
gatewayClassName: cilium
listeners:
- name: http
protocol: HTTP
port: 80
allowedRoutes:
namespaces:
from: Same
- name: https
protocol: HTTPS
port: 443
tls:
mode: Terminate
certificateRefs:
- kind: Secret
name: api-gateway-tls
allowedRoutes:
namespaces:
from: SameHTTPRoute
yaml
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: api-routes
namespace: default
spec:
parentRefs:
- name: api-gateway
namespace: default
hostnames:
- "api.example.com"
rules:
# /users/* -> users-service
- matches:
- path:
type: PathPrefix
value: /users
backendRefs:
- name: users-service
port: 80
# /orders/* -> orders-service
- matches:
- path:
type: PathPrefix
value: /orders
backendRefs:
- name: orders-service
port: 80
# Header-based routing
- matches:
- path:
type: PathPrefix
value: /
headers:
- name: X-API-Version
value: v2
backendRefs:
- name: api-v2
port: 80
# Weight-based splitting
- matches:
- path:
type: PathPrefix
value: /
backendRefs:
- name: api-stable
port: 80
weight: 90
- name: api-canary
port: 80
weight: 10HTTPRoute 高级功能
yaml
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: advanced-routes
namespace: default
spec:
parentRefs:
- name: api-gateway
rules:
- matches:
- path:
type: PathPrefix
value: /api
# Request header modification
filters:
- type: RequestHeaderModifier
requestHeaderModifier:
add:
- name: X-Request-ID
value: "%REQ(X-REQUEST-ID)%"
set:
- name: X-Forwarded-Proto
value: https
remove:
- X-Internal-Header
# Response header modification
- type: ResponseHeaderModifier
responseHeaderModifier:
add:
- name: X-Frame-Options
value: DENY
- name: X-Content-Type-Options
value: nosniff
# URL rewrite
- type: URLRewrite
urlRewrite:
path:
type: ReplacePrefixMatch
replacePrefixMatch: /v1
backendRefs:
- name: api-service
port: 80
# Redirect
- matches:
- path:
type: Exact
value: /old-endpoint
filters:
- type: RequestRedirect
requestRedirect:
scheme: https
hostname: new.example.com
path:
type: ReplaceFullPath
replaceFullPath: /new-endpoint
statusCode: 301流量镜像
yaml
apiVersion: cilium.io/v2
kind: CiliumEnvoyConfig
metadata:
name: traffic-mirror
namespace: default
spec:
services:
- name: production-service
namespace: default
backendServices:
- name: production-backend
namespace: default
- name: shadow-backend
namespace: default
resources:
- "@type": type.googleapis.com/envoy.config.listener.v3.Listener
name: mirror-listener
filter_chains:
- filters:
- name: envoy.filters.network.http_connection_manager
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
stat_prefix: production-service
route_config:
name: mirror_routes
virtual_hosts:
- name: production
domains: ["*"]
routes:
- match:
prefix: "/"
route:
cluster: default/production-backend
# Traffic mirroring configuration
request_mirror_policies:
- cluster: default/shadow-backend
runtime_fraction:
default_value:
numerator: 100 # 100% mirroring
denominator: HUNDRED
trace_sampled: false
http_filters:
- name: envoy.filters.http.router
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.Router后续步骤
- 安全性: 设置 mTLS 和 L7 网络策略
- 可观测性: 使用 Hubble 监控流量
- Ingress 和 Gateway: 外部流量管理