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。
安全实施
零信任架构
- 启用严格mTLS(加密所有流量)
- 默认拒绝授权策略
- 显式允许规则(最小权限)
- 基于身份的访问控制
- 审计日志
示例(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。
渐进式交付
金丝雀部署
通过监控逐渐转移流量。
阶段:
- 部署v2,0%流量
- 路由10%到v2,监控指标
- 增加:25% → 50% → 75% → 100%
- 清理v1部署
监控: 错误率、延迟(P95/P99)、吞吐量
蓝绿部署
即时切换,快速回滚。
过程:
- 并行部署绿版和蓝版
- 使用头路由测试绿版
- 即时切换到绿版
- 如有需要,回滚到蓝版
自动化回滚(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策略和mTLSreferences/security-patterns.md- 零信任和授权references/progressive-delivery.md- 金丝雀、蓝绿、A/B测试references/multi-cluster.md- 多集群设置和联合references/troubleshooting.md- 常见问题和调试