大家好,我是程序员柏风,AI 最全的 Vibecoding 学习地图 http://coderoadmap.cn 作者。
与 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 按需添加
- HPA 仍基于 CPU/自定义指标(k8s-resources)
Actuator 健康检查路径不要被 Sidecar 健康检查混淆——分别配置 livenessProbe 指向 app 端口。
练习
- 画一张 K8s + Istio 组件图:kube-apiserver、istiod、ingress gateway、业务 Pod
- 列出从 VM + Spring Cloud 迁到 K8s + Istio 的三个迁移步骤
- 阅读 ngx-k8s,对比裸机 Nginx 与 Ingress Gateway
小结
K8s 管生命周期与发现;Istio 管 Pod 间通信策略。 下一课讨论网格如何配合优雅降级。