1 什么是 Istio?
Istio 是一个功能强大的 服务网格(Service Mesh) 框架。它通过透明代理(Sidecar 模式的 Envoy)在微服务架构中实现 流量治理、安全控制、可观测性 和 策略控制,无需改动应用代码。
2 为什么要用 Istio?
3 Istio 架构详细剖析
注:图片来源网络
Istio的架构主要由数据平面Envoy和控制平面Istiod两部分组成。
3.1 数据平面
Istio
的数据平面使用的是Envoy
,Envoy
以 Sidecar
容器 的形式部署在每个微服务 Pod 中。
Envoy
代理是唯一一个与数据平面流量交互的Istio
组件。用于调解服务网格中所有服务的所有入站和出站流量。
3.2 控制平面
Istio
的数据平面使用的是Istiod
,Istiod(集成了 Pilot、Citadel、Galley
),提供服务发现、配置、证书管理、加密通信和认证功能。对于新版本的Istio(v1.5+),部署后仅能看到Istiod一类Pod。主要有三部分组成:
Pilot:为 Envoy 分发路由规则和流量配置。 Citadel:提供密钥管理和证书签发,实现双向 mTLS。 Galley:负责配置验证和分发。
控制平面无需与业务流量直接交互。
4 Istio 安装部署
4.1 环境要求
Kubernetes ≥ 1.24,我实验环境是1.28 kubectl、istioctl 已安装 节点内存至少 4G(推荐 8G+)
4.2 安装 Istioctl 工具
下载地址:
https://github.com/istio/istio/releases
# 直接获取安装包wget https://github.com/istio/istio/releases/download/1.23.3/istio-1.23.3-linux-amd64.tar.gz# 解压tar -xvf istio-1.23.3-linux-amd64.tar.gz# 设置环境变量vi /etc/profileexport PATH=/data/istio-1.23.3/bin:$PATH# 使配置文件生效source /etc/profile

4.3 检查 Kubernetes 集群是否满足部署条件
istioctl x precheck

4.4 Istio 控制面安装
istioctl install --set profile=default -y
可用 profile 解释:

4.5 启用命名空间的自动注入 Sidecar
kubectl label namespace default istio-injection=enabled
【温馨提示】所有部署在该命名空间的 Pod 会自动注入 Envoy Sidecar。关闭:enabled改成disabled
4.6 验证 Istio 控制面和网关组件
kubectl get pods -n istio-system

5 部署示例应用
5.1 部署应用
这个安装包自带的应用
kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml

5.2. 验证应用服务状态
kubectl get pods -n defaultkubectl get svc -n default

5.3 配置 Istio 网关暴露应用
(1)创建 Gateway 和 VirtualService
kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml
(2) 查看 Gateway 和 VirtualService
kubectl get gatewaykubectl get virtualservice

kubectl get svc istio-ingressgateway -n istio-system
5.4 访问应用
如果没有外部IP,EXTERNAL-IP会显示pending状态

需要将loadBalancer改为NodePort
kubectl edit svc istio-ingressgateway -n istio-system
将 type: LoadBalancer 改为
type: NodePort
再次查看
kubectl get svc istio-ingressgateway -n istio-system

80端口映射为30702,所以访问地址为
http://10.0.0.100:30702/productpage
成功访问测试页面

本次分享结束,关注我,后期将分享更多运维干货知识。
关注李哥,添加微信,可进入技术交流群。
