与 Kubernetes
衔接 k8s-intro、helm。
30 分钟
与 Kubernetes
服务网格 不是 替代 Kubernetes,而是 叠加 在 K8s 网络与服务模型之上。Pod、Service、Deployment 仍由 kubernetes-essentials 那套资源描述;Istio 在此基础上注入 Sidecar、扩展流量与安全策略。
学习目标
- 说清 K8s Service 与 Istio 服务发现的衔接
- 理解命名空间、标签、Sidecar 注入的工作方式
- 知道 Helm 安装 Istio 与升级时的注意点
分层关系
Deployment / Pod ← 工作负载([k8s-deployments](/tracks/kubernetes-essentials/lessons/k8s-deployments))
Service / Endpoints ← 集群 DNS 与后端列表([k8s-services](/tracks/kubernetes-essentials/lessons/k8s-services))
Istio Sidecar + CRD ← 流量策略、mTLS、可观测
Ingress / Gateway ← 北向入口([k8s-ingress](/tracks/kubernetes-essentials/lessons/k8s-ingress))
应用仍通过 http://course-service:8080 调用;Sidecar 拦截后按 VirtualService 选 subset。
Sidecar 注入
两种方式:
| 方式 | 说明 |
|---|---|
| 自动注入 | 命名空间标签 istio-injection=enabled,新建 Pod 带 envoy |
| 手动注入 | istioctl kube-inject -f deploy.yaml | kubectl apply -f - |
已有 Pod 改标签 不会 retroactive 注入,需滚动重启 Deployment。与 k8s-pods 多容器模型一致。
与 Helm 协作
Istio 官方 chart 拆分 base、istiod、gateway 等子 chart:
- 安装:固定版本号,预发先验证
- 升级:控制面先于数据面;阅读 release note 中 CRD 变更
- 资源:为 Sidecar 预留 request/limit,避免节点资源耗尽
若 Spring Cloud 服务仍用 Eureka,在 K8s 上 通常迁移到 K8s Service + 网格,避免双注册中心(对照 sc-eureka)。
网络前提
- Pod 间网络可达(CNI 正常)
- 了解 NetworkPolicy 是否阻断 Sidecar 与控制面 15012/xDS 端口
- 节点防火墙、云安全组放通 Ingress Gateway LoadBalancer
与 Spring Boot 部署
典型清单:
- Deployment:单容器 app 镜像
- Service:ClusterIP 暴露 8080
- 命名空间开启注入
- VirtualService / DestinationRule 按需添加