3、Istio安装与部署:从下载到验证的全流程实战
说实话,Istio的安装部署,是我在服务网格落地过程中踩坑最多的一环。很多同学觉得不就是跑几个yaml文件嘛,但真到了生产环境,Profile选错、资源配少、版本不兼容,哪个都能让你折腾半天。
这一章,我带你从头捋一遍。从下载安装包开始,到选Profile、部署到K8s集群,最后验证安装是否成功。每一步我都会把我踩过的坑和我习惯的做法分享给你。
3.1 下载与安装:别用最新版
先说说下载。Istio的官方发布地址是GitHub的release页面,但我个人习惯用命令行搞定:
curl -L https://istio.io/downloadIstio | sh -
这条命令会下载最新稳定版。但我要提醒你——别追最新版。我在项目中遇到过,Istio 1.12刚发布时,和K8s 1.22的API兼容性出了问题,折腾了两天才回退。
我建议你指定版本号,比如:
curl -L https://istio.io/downloadIstio | ISTIO_VERSION=1.18.2 sh -
下载完成后,你会看到这样的目录结构:
istio-1.18.2/
├── bin/
│ └── istioctl
├── manifests/
├── samples/
└── tools/
嗯,这里要注意:samples目录里有很多好用的示例,比如Bookinfo应用,后面验证安装时会用到。
3.2 Profile选择:别一上来就用default
Istio提供了几种Profile,说白了就是预配置模板。你想想看,生产环境和开发环境的需求能一样吗?
| Profile名称 | 适用场景 | 组件数量 |
|---|---|---|
| default | 生产环境(推荐) | istiod、ingressgateway、egressgateway |
| demo | 开发/测试 | 全部组件 + 更多监控 |
| minimal | 最小安装 | 仅istiod |
| remote | 多集群场景 | 仅istiod(远程控制面) |
| empty | 完全自定义 | 无组件 |
我刚开始用Istio时,图省事直接上了demo Profile。结果呢?集群里跑了一堆我用不上的组件,资源占用直接翻倍。后来学乖了,生产环境一律用default,开发环境用demo。
查看所有Profile的命令:
istioctl profile list
查看某个Profile的具体配置:
istioctl profile dump default
我个人习惯是先dump出来看看,确认组件列表和配置参数,再决定要不要微调。
3.3 在Kubernetes上部署Istio
好,到了最核心的一步。部署前,先确认你的K8s集群满足条件:
- K8s版本 ≥ 1.21(我建议用1.24以上)
- 集群有足够的资源(至少2核4G)
- 已安装kubectl并配置好kubeconfig
部署命令其实就一行:
istioctl install --set profile=default -y
这条命令会做三件事:
- 创建istio-system命名空间
- 部署istiod(控制面核心组件)
- 部署ingressgateway和egressgateway
等等,你以为这就完了?没那么简单。我在项目中遇到过,有些云厂商的K8s集群默认没有配置LoadBalancer,ingressgateway会一直Pending。这时候你需要手动指定NodePort:
istioctl install --set profile=default \
--set components.ingressGateways[0].k8s.service.type=NodePort -y
我的经验:部署完成后,别急着走。先看看Pod状态:
kubectl get pods -n istio-system
如果istiod一直CrashLoopBackOff,八成是资源不够。我遇到过好几次,把istiod的requests调低点就好了。
3.4 验证安装:别只看Pod状态
很多人验证安装,就看看Pod是不是Running。嗯,这远远不够。我一般做三步验证:
第一步:检查组件状态
kubectl get all -n istio-system
确保istiod、ingressgateway、egressgateway都处于Running状态。
第二步:用示例应用验证
Istio官方提供了Bookinfo应用,我习惯用它做冒烟测试:
kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml
kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml
然后访问productpage页面,看看能不能正常显示。如果页面加载不出来,八成是Gateway配置有问题。
第三步:检查Sidecar注入
这才是验证的核心。给命名空间打上标签:
kubectl label namespace default istio-injection=enabled
然后重新部署Bookinfo,看看每个Pod是不是都多了个istio-proxy容器:
kubectl get pods -n default
你会看到类似这样的输出:
NAME READY STATUS RESTARTS
productpage-v1-6c7468f4b8-2x8k9 2/2 Running 0
注意看READY列是2/2,说明Sidecar注入成功了。
3.5 卸载与清理
万一装错了,或者想重来,卸载也很简单:
istioctl uninstall -y --purge
kubectl delete namespace istio-system
注意--purge参数会清理所有Istio相关的CRD和资源。我建议卸载后重启一下集群里的Pod,因为Sidecar还在,不重启会报错。
好了,这一章的内容就到这里。从下载到验证,每一步我都把实际踩过的坑和我习惯的做法告诉你了。下一章我们聊聊流量管理,那才是Istio真正发力的地方。
本章核心要点:
- 下载时指定版本,别追最新版
- 生产环境用default Profile,开发用demo
- 部署后做三步验证:组件状态、示例应用、Sidecar注入
- 卸载时加--purge参数,清理干净