Istio 服务网格安装与配置完整教程
Istio 是目前最流行的服务网格(Service Mesh)解决方案,为微服务架构提供流量管理、安全性和可观测性等功能。本文将详细介绍如何在 Kubernetes 集群中安装和配置 Istio。
环境要求
- Kubernetes 集群(1.25+)
- kubectl 命令行工具
- Helm 3.x(可选)
- 集群至少 4GB 可用内存
方式一:使用 istioctl 安装(推荐)
1. 下载 Istio
# 下载最新版本
curl -L https://istio.io/downloadIstio | sh -
# 或指定版本
curl -L https://istio.io/downloadIstio | ISTIO_VERSION=1.20.0 sh -
# 进入目录
cd istio-1.20.0
# 添加 istioctl 到 PATH
export PATH=$PWD/bin:$PATH
2. 安装 Istio
# 使用 demo 配置文件安装(适合学习)
istioctl install --set profile=demo -y
# 生产环境推荐使用 default 配置
istioctl install --set profile=default -y
# 验证安装
istioctl verify-install
3. 启用 Sidecar 自动注入
# 为 default 命名空间启用自动注入
kubectl label namespace default istio-injection=enabled
# 验证标签
kubectl get namespace -L istio-injection
方式二:使用 Helm 安装
1. 添加 Helm 仓库
helm repo add istio https://istio-release.storage.googleapis.com/charts
helm repo update
2. 安装 Istio 组件
# 创建命名空间
kubectl create namespace istio-system
# 安装 Istio base(CRDs)
helm install istio-base istio/base -n istio-system --wait
# 安装 istiod(控制平面)
helm install istiod istio/istiod -n istio-system --wait
# 安装 Ingress Gateway(可选)
kubectl create namespace istio-ingress
helm install istio-ingress istio/gateway -n istio-ingress --wait
安装可观测性组件
# 安装 Kiali(服务网格可视化)
kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.20/samples/addons/kiali.yaml
# 安装 Prometheus(监控)
kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.20/samples/addons/prometheus.yaml
# 安装 Grafana(仪表盘)
kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.20/samples/addons/grafana.yaml
# 安装 Jaeger(链路追踪)
kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.20/samples/addons/jaeger.yaml
部署示例应用
# 部署 Bookinfo 示例应用
kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml
# 验证 Pod 运行状态(注意每个 Pod 有 2 个容器)
kubectl get pods
# 配置 Gateway
kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml
# 获取 Ingress IP
kubectl get svc istio-ingressgateway -n istio-system
访问 Dashboard
# 访问 Kiali
istioctl dashboard kiali
# 访问 Grafana
istioctl dashboard grafana
# 访问 Jaeger
istioctl dashboard jaeger
常用配置
流量管理示例
# VirtualService 示例 - 流量分配
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
name: reviews
spec:
hosts:
- reviews
http:
- route:
- destination:
host: reviews
subset: v1
weight: 80
- destination:
host: reviews
subset: v2
weight: 20
DestinationRule 示例
apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
name: reviews
spec:
host: reviews
subsets:
- name: v1
labels:
version: v1
- name: v2
labels:
version: v2
卸载 Istio
# 使用 istioctl 卸载
istioctl uninstall --purge
# 删除命名空间
kubectl delete namespace istio-system istio-ingress
# 移除命名空间标签
kubectl label namespace default istio-injection-
常见问题
Q: Sidecar 注入失败?
A: 检查命名空间是否有 istio-injection=enabled 标签,或手动注入:
istioctl kube-inject -f deployment.yaml | kubectl apply -f -
Q: 如何查看 Envoy 配置?
istioctl proxy-config all
参考链接
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。







