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 

参考链接

发表回复

后才能评论