Skip to content

Cilium Service Mesh 概述

支持版本: Cilium 1.16+, Kubernetes 1.28+ 最后更新: February 22, 2026

简介

Cilium Service Mesh 是一种基于 eBPF 的无 Sidecar 服务网格解决方案。与传统的 Sidecar 代理方法不同,Cilium Service Mesh 利用 Linux kernel 的 eBPF 技术处理网络流量,并在每个节点使用单个共享的 Envoy 代理来提供 L7 功能。

核心价值主张

Cilium Service Mesh 的核心价值在于提供一个统一的网络和服务网格平台

  1. 资源效率:无需承担 Sidecar 代理开销即可使用服务网格功能
  2. 低延迟:通过 eBPF 实现内核级数据包处理
  3. 简化运维:将 CNI 和服务网格集成到单个组件中
  4. 渐进式采用:现有 Cilium CNI 用户可以轻松扩展至服务网格
  5. 强大安全性:基于 SPIFFE 的身份和透明 mTLS 支持

Sidecar 与无 Sidecar 架构

架构对比图

服务网格对比

功能Cilium Service MeshIstioLinkerd
架构eBPF + Node EnvoySidecar EnvoySidecar linkerd2-proxy
代理每个节点 1 个(仅 L7)每个 Pod 1 个每个 Pod 1 个
内存开销低(~50-100MB/节点)高(~50MB/Pod)中(~20MB/Pod)
CPU 开销非常低
延迟~0.1-0.5ms~1-3ms~0.5-1ms
L4 处理eBPF(内核)Envoy(用户空间)linkerd2-proxy
L7 处理EnvoyEnvoylinkerd2-proxy
mTLS透明(eBPF/WireGuard)Sidecar Envoylinkerd2-proxy
CNI 集成原生需要单独的 CNI需要单独的 CNI
安装复杂度
Gateway API完全支持完全支持部分支持
网络策略CiliumNetworkPolicy(L3-L7)AuthorizationPolicyServer(L4)
可观测性Hubble(原生)Kiali、JaegerLinkerd Viz

资源使用对比

何时选择 Cilium Service Mesh

适用场景

  1. 已在使用 Cilium CNI

    • 利用现有的 Cilium 投资
    • 无需额外组件即可启用服务网格功能
    • 统一运维和监控
  2. 资源效率至关重要

    • 在大型集群中消除 Sidecar 开销
    • 需要优化节点资源
    • 成本降低很重要
  3. 低延迟必不可少

    • 高性能工作负载
    • 实时应用程序
    • 金融/交易系统
  4. 希望简化运维

    • 使用单个组件提供 CNI + 服务网格
    • 无需管理 Sidecar 注入
    • 简化升级和故障排查

不适用场景

  1. 已有大量 Istio 投资

    • 已实施复杂的 Istio 策略
    • 依赖 Istio 特定功能
  2. 需要广泛的 Envoy 扩展

    • 每个 Sidecar 的自定义过滤器
    • 精细的每 Pod 代理设置
  3. 复杂的多集群网格

    • 需要 Istio 成熟的多集群功能

前置条件

验证 Cilium CNI 安装

Cilium Service Mesh 要求先安装 Cilium CNI:

bash
# Check Cilium status
cilium status

# Expected output
    /¯¯\
 /¯¯\__/¯¯\    Cilium:             OK
 \__/¯¯\__/    Operator:           OK
 /¯¯\__/¯¯\    Envoy DaemonSet:    OK
 \__/¯¯\__/    Hubble Relay:       OK
    \__/       ClusterMesh:        disabled

# Check Cilium version
cilium version

在 EKS 上安装 Cilium

bash
# Add Helm repository
helm repo add cilium https://helm.cilium.io/
helm repo update

# Install Cilium on EKS (with service mesh features)
helm install cilium cilium/cilium --version 1.16.0 \
  --namespace kube-system \
  --set eni.enabled=true \
  --set ipam.mode=eni \
  --set egressMasqueradeInterfaces=eth0 \
  --set routingMode=native \
  --set kubeProxyReplacement=true \
  --set loadBalancer.algorithm=maglev \
  --set envoy.enabled=true \
  --set hubble.enabled=true \
  --set hubble.relay.enabled=true \
  --set hubble.ui.enabled=true

必需组件

组件角色是否必需
Cilium AgenteBPF 程序管理、策略实施必需
Cilium OperatorCRD 管理、IPAM必需
Envoy (cilium-envoy)L7 代理处理服务网格必需
Hubble可观测性推荐
Hubble RelayUI/CLI 连接推荐
Hubble UI可视化可选

启用服务网格功能

基本启用

yaml
# values.yaml
envoy:
  enabled: true

# Default configuration for L7 proxy policy enforcement
proxy:
  enabled: true

完整服务网格配置

yaml
# values.yaml - Full service mesh features
envoy:
  enabled: true
  resources:
    limits:
      cpu: 2000m
      memory: 2Gi
    requests:
      cpu: 100m
      memory: 256Mi

# Hubble observability
hubble:
  enabled: true
  relay:
    enabled: true
  ui:
    enabled: true
  metrics:
    enabled:
      - dns
      - drop
      - tcp
      - flow
      - icmp
      - http

# Mutual authentication (mTLS)
authentication:
  mutual:
    spire:
      enabled: true
      install:
        enabled: true

# Ingress Controller
ingressController:
  enabled: true
  loadbalancerMode: shared

# Gateway API
gatewayAPI:
  enabled: true

文档结构

本节的组织如下:

文档描述
架构eBPF 数据路径、Node Envoy、CRD 模型
流量管理L7 路由、负载均衡、流量拆分
安全mTLS、网络策略、加密
可观测性Hubble、指标、服务地图
Ingress 与 GatewayIngress Controller、Gateway API
最佳实践生产部署、迁移、调优

快速开始

1. 验证服务网格功能

bash
# Check Envoy DaemonSet
kubectl get daemonset -n kube-system cilium-envoy

# Check Cilium service mesh status
cilium status | grep -E "Envoy|Hubble"

2. 部署示例应用程序

yaml
# bookinfo.yaml
apiVersion: v1
kind: Namespace
metadata:
  name: bookinfo
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: productpage
  namespace: bookinfo
spec:
  replicas: 1
  selector:
    matchLabels:
      app: productpage
  template:
    metadata:
      labels:
        app: productpage
    spec:
      containers:
      - name: productpage
        image: docker.io/istio/examples-bookinfo-productpage-v1:1.18.0
        ports:
        - containerPort: 9080
---
apiVersion: v1
kind: Service
metadata:
  name: productpage
  namespace: bookinfo
spec:
  selector:
    app: productpage
  ports:
  - port: 9080
    targetPort: 9080

3. 应用 L7 策略

yaml
# l7-policy.yaml
apiVersion: cilium.io/v2
kind: CiliumNetworkPolicy
metadata:
  name: productpage-l7
  namespace: bookinfo
spec:
  endpointSelector:
    matchLabels:
      app: productpage
  ingress:
  - fromEndpoints:
    - matchLabels:
        app: frontend
    toPorts:
    - ports:
      - port: "9080"
        protocol: TCP
      rules:
        http:
        - method: GET
          path: "/productpage"
        - method: GET
          path: "/health"

4. 观察流量

bash
# Observe L7 traffic with Hubble CLI
hubble observe --namespace bookinfo -f

# Filter HTTP requests
hubble observe --namespace bookinfo --protocol http

# Check inter-service flows
hubble observe --namespace bookinfo --to-service productpage

后续步骤

  1. 架构:了解 Cilium Service Mesh 的内部工作原理。
  2. 流量管理:配置 L7 路由和流量控制。
  3. 安全:设置 mTLS 和 L7 网络策略。

参考资料