一、Istio架构及组件
Istio服务网格在逻辑上分为数据平面和控制平面。
- 控制平面:使用全新的部署模式:Istiod,这个组件负责处理Sidecar注入,证书颁发,配置管理等功能,替代原有组件,降低复杂度,提高易用性。
- Polit:策略组件,为proxy提供服务发现、智能路由、错误处理等
- Citadel:安全组件,提供证书下发、加密通信、控制访问
- Galley:配置管理、验证、分发
- 数据平面: 有一组proxy组成,这些proxy 负责所有微服务网络通信,实现高效转发和策略。使用envoy实现,envoy是一个基于C++实现的L4/L7proxy转发器,是Istio在数据平面唯一的组件。
二、Istio基本概念
istio有四个配置资源,落地所有流量管理需求:
- VirtualService(虚拟服务):实现服务请求路由规则的功能
- DestinationRule(目标规则):实现目标服务的负载均衡、服务发现、故障处理和故障注入的功能。
- Gateway(网关):让服务网格内的服务,可以被全世界看到。
- ServiceEntry(服务入口):允许管理网格外的服务流量
三、 Istioctl下载
Istio 1.23 支持以下这些 Kubernetes 版本: 1.27, 1.28, 1.29, 1.30。
1.21-1.23.2之间貌似有bug,Sidercar创建pod会失败:
官网地址:Istio
下载地址:https://github.com/istio/istio/releases
经过测试:k8s-1.28.1 匹配istio1.20.0最合适。
最新版下载:
# curl -L https://istio.io/downloadIstio | sh -
下载指定版本:
# curl -L https://istio.io/downloadIstio | ISTIO_VERSION=1.20.0 TARGET_ARCH=x86_64 sh -
# cp /opt/istio-1.20.0/bin/istioctl /usr/bin
也可以设置变量:
# export PATH="$PATH:/opt/istio-1.20.0/bin"
四、查看配置文件使用的名称
#Ambient 配置文件旨在帮助您开始使用 Ambient 模式。ambient
#根据 IstioOperator API 的默认设置来启用组件。 建议用于生产部署和多集群网格 中的主集群。default
#这一配置具有适度的资源需求,旨在展示 Istio 的功能。 它适合运行 Bookinfo 应用程序和相关任务demo
#不部署任何内容。可以作为自定义配置的基本配置文件。empty
#与默认配置文件相同,但只安装了控制平面组件。 它允许您使用单独的配置文件 配置控制平面和数据平面组件minimalopenshift
#预览文件包含的功能都属于实验性阶段。该配置文件是为了探索 Istio 的新功能。 确保稳定性、安全性和性能(使用风险需自负)。preview
#用于配置一个从集群, 这个从集群由外部控制平面管理, 或者由多集群网格的 主集群中的控制平面管理remotestable#说明
https://istio.io/latest/zh/docs/setup/additional-setup/config-profiles/#:~:text=%E6%9C%AC%E9%A1%B5%E9%9D%A2%E6%8F%8F%E8%BF%B0%E4%BA%86%E5%9C%A8%20%E5%AE%89%E8%A3%85%20Istio%20%E6%97%B6%E6%89%80%E8%83%BD%E5%A4%9F%E4%BD%BF%E7%94%A8%E7%9A%84%E5%86%85%E7%BD%AE%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E3%80%82%20%E8%BF%99%E4%BA%9B%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E6%8F%90%E4%BE%9B%E4%BA%86%E5%AF%B9%20Istio%20%E6%8E%A7%E5%88%B6%E5%B9%B3%E9%9D%A2%E5%92%8C%20Istio,%E6%95%B0%E6%8D%AE%E5%B9%B3%E9%9D%A2%20Sidecar%20%E7%9A%84%E5%AE%9A%E5%88%B6%E5%86%85%E5%AE%B9%E3%80%82%20%E6%82%A8%E5%8F%AF%E4%BB%A5%E4%BB%8E%E5%85%B6%E4%B8%AD%E4%B8%80%E4%B8%AA%20Istio%20%E5%86%85%E7%BD%AE%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E5%BC%80%E5%A7%8B%E5%85%A5%E6%89%8B%EF%BC%8C%20%E7%84%B6%E5%90%8E%E6%A0%B9%E6%8D%AE%E6%82%A8%E7%9A%84%E7%89%B9%E5%AE%9A%E9%9C%80%E6%B1%82%E8%BF%9B%E4%B8%80%E6%AD%A5%20%E8%87%AA%E5%AE%9A%E4%B9%89%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E3%80%82
五、部署
自定义参数使用--set:
此 API 中的配置参数能用命令行选项 --set
独立设置。 例如,要在 default 配置档中启动调试日志特性,使用这个命令:
$ istioctl install --set values.global.logging.level=debug
其他方法参见:
Istio / 定制安装配置
安装命令:
# /istio-1.20.0/bin/istioctl install
这里使用默认安装:
# istioctl install
这里是镜像下载不下来,可以手动下载,然后tag成需要的镜像即可:
# docker pull dhub.kubesre.xyz/istio/pilot:1.20.0
# docker tag dhub.kubesre.xyz/istio/pilot:1.20.0 docker.io/istio/pilot:1.20.0
# docker pull dhub.kubesre.xyz/istio/proxyv2:1.20.0
# docker tag dhub.kubesre.xyz/istio/proxyv2:1.20.0
# #生成部署清单:
# istioctl manifest generate > generate.yaml
## 卸载
# istioctl manifest generate | kubectl delete -f -
六、Sidercar注入
手动注入《默认命名空间》:
或者;
# istioctl kube-inject -f httpbin-nodeport.yaml |kubectl apply -f -
自动注入:
# kubectl label namespace crm istio-injection=enabled 关闭:enabled改成disabled
# kubectl apply -f httpbin-gateway.yaml
IngressGateway NodePort访问地址:http://x.x.x.x:port
示例:
# kubectl label namespace crm istio-injection=enabled
如果是现有应用的容器,要么删除重建,要么重新部署。就会生效。
# kubectl apply -f httpbin-gateway.yaml
从gateway访问:
从httpbin进行访问:
访问流程图:
用户-->NodePort-->IngressGateway-->istio-proxy<-->httpbin
查看: