实施服务网格Skill implementing-service-mesh

本技能用于在Kubernetes环境中配置和部署服务网格基础设施,实现安全的服务间通信、流量管理、授权控制和渐进式交付策略。关键词:服务网格、微服务、Kubernetes、Istio、Linkerd、Cilium、mTLS、流量路由、渐进交付、零信任安全。

微服务 0 次安装 0 次浏览 更新于 3/23/2026

name: 实施服务网格 description: 使用Istio、Linkerd或Cilium实现生产就绪的服务网格部署。配置mTLS、授权策略、流量路由和渐进式交付模式,以实现安全、可观察的微服务。在设置服务间通信、实施零信任安全或启用金丝雀部署时使用。

服务网格实施

目的

为Kubernetes环境配置和部署服务网格基础设施。启用带有相互TLS的安全服务间通信,实施流量管理策略,配置授权控制,并设置渐进式交付策略。抽象网络复杂性,同时为微服务提供可观察性、安全性和弹性。

何时使用

在以下情况调用此技能:

  • “设置带有mTLS的服务网格”
  • “配置Istio流量路由”
  • “实施金丝雀部署”
  • “保护微服务通信”
  • “向服务添加授权策略”
  • “版本间流量分割”
  • “多集群服务网格设置”
  • “配置环境模式与边车”
  • “设置断路器配置”
  • “启用分布式追踪”

服务网格选择

根据需求和约束选择。

Istio Ambient(推荐用于大多数):

  • 8% 延迟开销,带mTLS(对比166%边车模式)
  • 企业功能,多云,高级L7路由
  • 无边车L4(ztunnel)+ 可选L7(waypoint)

Linkerd(简单性优先):

  • 33% 延迟开销(最低边车)
  • 基于Rust的微代理,自动mTLS
  • 适合中小团队,易于采用

Cilium(eBPF原生):

  • 99% 延迟开销,内核级执行
  • 高级网络,无边车设计
  • 适合eBPF基础设施,面向未来

详细比较矩阵和架构权衡,见references/decision-tree.md

核心概念

数据平面架构

边车: 每个Pod的代理,细粒度L7控制,较高开销 无边车: 共享节点代理(Istio Ambient)或eBPF(Cilium),较低开销

Istio Ambient组件:

  • ztunnel:每节点L4代理用于mTLS
  • waypoint:可选每命名空间L7代理用于HTTP路由

流量管理

路由: 基于路径、头、权重的流量分布 弹性: 重试、超时、断路器、故障注入 负载均衡: 轮询、最少连接、一致性哈希

安全模型

mTLS: 自动加密,证书轮换,零应用更改 模式: STRICT(拒绝明文)、PERMISSIVE(接受两者) 授权: 默认拒绝,基于身份(非IP),L7策略

Istio配置

Istio使用自定义资源定义进行流量管理和安全。

VirtualService(路由)

apiVersion: networking.istio.io/v1
kind: VirtualService
metadata:
  name: backend-canary
spec:
  hosts:
  - backend
  http:
  - route:
    - destination:
        host: backend
        subset: v1
      weight: 90
    - destination:
        host: backend
        subset: v2
      weight: 10

DestinationRule(流量策略)

apiVersion: networking.istio.io/v1
kind: DestinationRule
metadata:
  name: backend-circuit-breaker
spec:
  host: backend
  trafficPolicy:
    connectionPool:
      tcp:
        maxConnections: 100
      http:
        http1MaxPendingRequests: 10
    outlierDetection:
      consecutiveErrors: 5
      interval: 30s
      baseEjectionTime: 30s

PeerAuthentication(mTLS)

apiVersion: security.istio.io/v1
kind: PeerAuthentication
metadata:
  name: default
  namespace: istio-system
spec:
  mtls:
    mode: STRICT

AuthorizationPolicy(访问控制)

apiVersion: security.istio.io/v1
kind: AuthorizationPolicy
metadata:
  name: allow-frontend
  namespace: production
spec:
  selector:
    matchLabels:
      app: backend
  action: ALLOW
  rules:
  - from:
    - source:
        principals:
        - cluster.local/ns/production/sa/frontend
    to:
    - operation:
        methods: ["GET", "POST"]
        paths: ["/api/*"]

高级模式(故障注入、镜像、网关),见references/istio-patterns.md

Linkerd配置

Linkerd强调简单性,带自动mTLS。

HTTPRoute(流量分割)

apiVersion: policy.linkerd.io/v1beta2
kind: HTTPRoute
metadata:
  name: backend-canary
spec:
  parentRefs:
  - name: backend
    kind: Service
  rules:
  - backendRefs:
    - name: backend-v1
      port: 8080
      weight: 90
    - name: backend-v2
      port: 8080
      weight: 10

ServiceProfile(重试/超时)

apiVersion: linkerd.io/v1alpha2
kind: ServiceProfile
metadata:
  name: backend.production.svc.cluster.local
spec:
  routes:
  - name: GET /api/data
    condition:
      method: GET
      pathRegex: /api/data
    timeout: 3s
    retryBudget:
      retryRatio: 0.2
      minRetriesPerSecond: 10

AuthorizationPolicy

apiVersion: policy.linkerd.io/v1alpha1
kind: AuthorizationPolicy
metadata:
  name: allow-frontend
spec:
  targetRef:
    kind: Server
    name: backend-api
  requiredAuthenticationRefs:
  - name: frontend-identity
    kind: MeshTLSAuthentication

完整模式和mTLS验证,见references/linkerd-patterns.md

Cilium配置

Cilium使用eBPF进行内核级执行。

CiliumNetworkPolicy(L3/L4/L7)

apiVersion: cilium.io/v2
kind: CiliumNetworkPolicy
metadata:
  name: backend-access
spec:
  endpointSelector:
    matchLabels:
      app: backend
  ingress:
  - fromEndpoints:
    - matchLabels:
        app: frontend
    toPorts:
    - ports:
      - port: "8080"
      rules:
        http:
        - method: GET
          path: "/api/.*"

DNS-Based Egress

apiVersion: cilium.io/v2
kind: CiliumNetworkPolicy
metadata:
  name: external-api-access
spec:
  endpointSelector:
    matchLabels:
      app: backend
  egress:
  - toFQDNs:
    - matchName: "api.github.com"
    toPorts:
    - ports:
      - port: "443"

mTLS与SPIRE和eBPF模式,见references/cilium-patterns.md

安全实施

零信任架构

  1. 启用严格mTLS(加密所有流量)
  2. 默认拒绝授权策略
  3. 显式允许规则(最小权限)
  4. 基于身份的访问控制
  5. 审计日志

示例(Istio):

# 严格mTLS
apiVersion: security.istio.io/v1
kind: PeerAuthentication
metadata:
  name: strict-mtls
  namespace: production
spec:
  mtls:
    mode: STRICT
---
# 默认拒绝所有
apiVersion: security.istio.io/v1
kind: AuthorizationPolicy
metadata:
  name: deny-all
  namespace: production
spec: {}

证书管理

  • 自动轮换(默认24小时TTL)
  • 零停机更新
  • 外部CA集成(cert-manager)
  • SPIFFE/SPIRE用于工作负载身份

JWT认证和外部授权(OPA),见references/security-patterns.md

渐进式交付

金丝雀部署

通过监控逐渐转移流量。

阶段:

  1. 部署v2,0%流量
  2. 路由10%到v2,监控指标
  3. 增加:25% → 50% → 75% → 100%
  4. 清理v1部署

监控: 错误率、延迟(P95/P99)、吞吐量

蓝绿部署

即时切换,快速回滚。

过程:

  1. 并行部署绿版和蓝版
  2. 使用头路由测试绿版
  3. 即时切换到绿版
  4. 如有需要,回滚到蓝版

自动化回滚(Flagger)

apiVersion: flagger.app/v1beta1
kind: Canary
metadata:
  name: backend
spec:
  targetRef:
    kind: Deployment
    name: backend
  service:
    port: 8080
  analysis:
    interval: 1m
    threshold: 5
    maxWeight: 50
    stepWeight: 10
    metrics:
    - name: request-success-rate
      thresholdRange:
        min: 99

A/B测试和详细模式,见references/progressive-delivery.md

多集群网格

将网格扩展到Kubernetes集群之间。

用例: 高可用性、地理分布、合规性、灾难恢复

Istio 多主模式:

# 在集群1安装
istioctl install --set values.global.meshID=mesh1 \
  --set values.global.multiCluster.clusterName=cluster1

# 交换服务发现密钥
istioctl x create-remote-secret --context=cluster2 | \
  kubectl apply -f - --context=cluster1

Linkerd 多集群:

# 链接集群
linkerd multicluster link --cluster-name cluster2 | \
  kubectl apply -f -

# 导出服务
kubectl label svc/backend mirror.linkerd.io/exported=true

完整设置和跨集群模式,见references/multi-cluster.md

安装

Istio 环境模式

curl -L https://istio.io/downloadIstio | sh -
istioctl install --set profile=ambient -y
kubectl label namespace production istio.io/dataplane-mode=ambient

Linkerd

curl -sL https://run.linkerd.io/install-edge | sh
linkerd install --crds | kubectl apply -f -
linkerd install | kubectl apply -f -
kubectl annotate namespace production linkerd.io/inject=enabled

Cilium

helm install cilium cilium/cilium \
  --namespace kube-system \
  --set meshMode=enabled \
  --set authentication.mutual.spire.enabled=true

故障排除

mTLS问题

# Istio:检查mTLS状态
istioctl authn tls-check frontend.production.svc.cluster.local

# Linkerd:检查边
linkerd edges deployment/frontend -n production

# Cilium:检查认证
cilium bpf auth list

流量路由问题

# Istio:分析配置
istioctl analyze -n production

# Linkerd:捕获流量
linkerd tap deployment/backend -n production

# Cilium:观察流
hubble observe --namespace production

完整调试指南和解决方案,见references/troubleshooting.md

与其他技能集成

kubernetes-operations: 集群设置、命名空间、RBAC security-hardening: 容器安全、秘密管理 infrastructure-as-code: Terraform/Helm用于网格部署 building-ci-pipelines: 自动化金丝雀、集成测试 performance-engineering: 延迟基准测试、优化

参考文件

  • references/decision-tree.md - 服务网格选择和比较
  • references/istio-patterns.md - Istio配置示例
  • references/linkerd-patterns.md - Linkerd模式和最佳实践
  • references/cilium-patterns.md - Cilium eBPF策略和mTLS
  • references/security-patterns.md - 零信任和授权
  • references/progressive-delivery.md - 金丝雀、蓝绿、A/B测试
  • references/multi-cluster.md - 多集群设置和联合
  • references/troubleshooting.md - 常见问题和调试