第 2 章:Istio 入门与核心实践
本文简要梳理了 Istio 在 Kubernetes 上的部署流程、核心组件、流量控制、弹性与可观测性等关键知识点,适合作为学习和实践 Istio 的入门笔记。
Istio 安装与环境准备
Istio 作为服务网格的代表,主要解决云原生环境下服务间通信、流量治理和可观测性等问题。推荐在本地通过 Docker Desktop 启用 Kubernetes 进行实验,分配 8GB 内存和 4 核 CPU 可获得更好体验。
- 安装 Kubernetes(如 Docker Desktop)
- 下载并解压 Istio 发行版(以 1.13.0 为例):
curl -L https://istio.io/downloadIstio | ISTIO_VERSION=1.13.0 sh -
cd istio-1.13.0
- 验证
istioctl
工具可用:
./bin/istioctl version
- 检查集群环境:
istioctl x precheck
- 安装 Istio(demo 配置):
istioctl install --set profile=demo -y
- 查看控制平面组件:
kubectl get pod -n istio-system
- 安装可观测性等支撑组件:
kubectl apply -f ./samples/addons
Istio 控制平面与核心组件
Istio 控制平面主要由 istiod
组件负责,承担配置下发、服务发现、证书颁发等职责。其核心组件包括:
istiod
:配置管理与下发,负责将用户声明式配置转为 Envoy 代理可识别的格式。- 入口/出口网关(Ingress/Egress Gateway):管理集群边界流量。
- 支撑组件(如 Prometheus、Grafana、Jaeger、Kiali):提供可观测性和可视化能力。

配置示例
以流量路由为例,Istio 通过自定义资源(CRD)实现流量控制:
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: catalog-service
spec:
hosts:
- catalog.prod.svc.cluster.local
http:
- match:
- headers:
x-dark-launch:
exact: "v2"
route:
- destination:
host: catalog.prod.svc.cluster.local
subset: v2
- route:
- destination:
host: catalog.prod.svc.cluster.local
subset: v1
应用部署与 Sidecar 注入
以 ACME 公司的在线商店为例,部署 catalog
和 webapp
服务:
- 创建命名空间并启用自动注入:
kubectl create namespace istioinaction
kubectl label namespace istioinaction istio-injection=enabled
- 部署服务:
kubectl apply -f services/catalog/kubernetes/catalog.yaml
kubectl apply -f services/webapp/kubernetes/webapp.yaml
- 验证 Pod 中已自动注入
istio-proxy
Sidecar:
kubectl get pod
- 端口转发访问 webapp:
kubectl port-forward deploy/webapp 8080:8080
浏览器访问 http://localhost:8080 可查看 UI。

流量引入与路由控制
通过 Istio 入口网关将外部流量引入集群:
kubectl apply -f ch2/ingress-gateway.yaml
- 获取入口地址并访问服务:
curl http://localhost:80/api/catalog/items/1
- 检查路由配置:
istioctl proxy-config routes deploy/istio-ingressgateway.istio-system
可观测性与分布式追踪
Istio 默认集成 Prometheus、Grafana、Jaeger 等工具,实现服务间流量的可观测性和追踪。
- 端口转发访问 Grafana:
istioctl dashboard grafana
- 端口转发访问 Jaeger:
istioctl dashboard jaeger
- 通过 Dashboard 查看服务流量、延迟、调用链等指标。
弹性与故障注入
Istio 支持通过 VirtualService 配置重试、超时等弹性策略,无需修改应用代码。
- 注入故障模拟脚本:
./bin/chaos.sh 500 50
- 配置重试策略:
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: catalog
spec:
hosts:
- catalog
http:
- route:
- destination:
host: catalog
retries:
attempts: 3
perTryTimeout: 2s
- 应用配置后,客户端可自动重试,提升服务可用性。
版本发布与流量灰度
通过 DestinationRule 和 VirtualService 实现多版本部署与灰度流量控制:
- 部署 v2 版本:
kubectl apply -f services/catalog/kubernetes/catalog-deployment-v2.yaml
- 定义 DestinationRule:
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: catalog
spec:
host: catalog
subsets:
- name: version-v1
labels:
version: v1
- name: version-v2
labels:
version: v2
- 配置 VirtualService,实现基于请求头的流量分流:
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: catalog
spec:
hosts:
- catalog
http:
- match:
- headers:
x-dark-launch:
exact: "v2"
route:
- destination:
host: catalog
subset: version-v2
- route:
- destination:
host: catalog
subset: version-v1
- 通过带特定 Header 的请求访问 v2,其余流量仍走 v1。
总结
- Istio 通过 Sidecar 代理和控制平面组件,实现服务间流量治理、弹性和可观测性。
- 支持声明式配置流量路由、重试、超时等策略,简化微服务治理。
- 集成可观测性工具,便于监控和追踪服务调用链。
- 支持多版本部署与灰度发布,提升上线安全性和灵活性。
- 适合在 Kubernetes 等云原生环境下构建高可用、可观测的微服务体系。