istio
1.istio的概念
1.1 istio的架构
istio在逻辑上分为数据平面和控制平面
- 控制平面:管理和配置代理路由流量
- 数据平面:有一组sidecars部署的智能代理(envoy)组成。这些代理调解和控制微服务之间所有的网络通信。他们还接收集合报告所有的网络交通的遥测数据
1.2 istio的部署
1.2.1 确定kubernetes集群兼容的istio版本
https://istio.io/latest/docs/releases/supported-releases/
1.2.2 部署istioctl
部署istio的方式有很多种,我这里选择使用istioctl部署,使用istioctl部署需要服务器能从hub.docker.io拉取镜像,如果你服务器没法从docker.io拉取镜像可以参考以下链接把镜像上传至阿里云仓库
https://qiuqin.blog.csdn.net/article/details/148135144?fromshare=blogdetail&sharetype=blogdetail&sharerId=148135144&sharerefer=PC&sharesource=weixin_58519482&sharefrom=from_link
root@k8s-master-1:~# wget https://github.com/istio/istio/releases/download/1.26.3/istio-1.26.3-linux-amd64.tar.gz
root@k8s-master-1:~# tar -xvf istio-1.26.3-linux-amd64.tar.gz
root@k8s-master-1:~# cp /root/istio-1.26.3/bin/istioctl /usr/bin/istioctl
root@k8s-master-1:~# istioctl version
client version: 1.26.3
control plane version: 1.26.3
data plane version: 1.26.3 (2 proxies)
1.2.3 部署istio
root@k8s-master-1:~# istioctl x precheck
root@k8s-master-1:~# istioctl install --set profile=demo -y
root@k8s-master-1:~# istioctl verify-install
root@k8s-master-1:~# kubectl get pod -n istio-system
NAME READY STATUS RESTARTS AGE
istio-egressgateway-94675df4b-vc7wj 1/1 Running 0 14d
istio-ingressgateway-787647fc48-bvwcb 1/1 Running 0 14d
istiod-5b788b4cfc-q9gd4 1/1 Running 0 14d
1.2.4部署istio其他组件
root@k8s-master-1:~# kubectl apply -f samples/addons
root@k8s-master-1:~# kubectl delete -f samples/addons/loki.yaml #loki需要存储组件,故delete
root@k8s-master-1:~# kubectl get pods -n istio-system
#访问 Kiali 仪表板
istioctl dashboard kiali --address 0.0.0.0 --browser=false
#访问 Prometheus+Grafana
istioctl dashboard grafana --address 0.0.0.0 --browser=false
#访问 jaeger
istioctl dashboard jaeger --address 0.0.0.0 --browser=false
1.2 istio的组成
- Gateway(gw)
- VirtualService (vs)
- DestinationRule(dr)
1.2.1 Gateway
- Istio Gateway充当了服务网格中的边界和负载均衡器,被用来管理网格的入站和出站流量
- 可以配置Gateway指定接收、限制进入或者离开网格的流量
- Gateway是运行在网格边缘使用proxyv2镜像运行的独立的Envoy代理,而不是与业务容器一起运行的Envoy变成代理
- Istio提供了两种预先配置好的网关代理部署,分别管理网格入站和出站流量(istio-ingressgatway和istio-engressgateway)
istio Gateway比kubernetes ingress API具有更加强大流量路由能力和灵活性。Istio Gateway可以配置L4-L6层的负载均衡属性,如对外暴露的端口、TLS设置等。然后将应用层流量路由L7交由关联的VS来处理。这让您可以像管理网格中其他数据平面的流量一样去管理网关流量
1.2.2 Istio VirtualService
解耦客户端请求的目标地址与实际响应请求的目标工作负载,增强Istio流量管理的灵活性和有效性
通过向Pod内注入的Envoy边车代理下发策略,实现L4-L7层负载均衡
- 弥补了kubernetes内部只能通过Service做L4负载均衡的缺陷
- 弥补了kubernetes只支持通过pod数量缩放方式实现金丝雀发布
- 弥补kubernetes只能通过ingress在南北流量上实现A/B测试
- 为容器实现L7委派(Delegate)、故障注入(Fault)、重写(rewrite)、重定向转发(Redirect)、重试、超时、流量镜像、跨域资源共享(CORS)
1.2.3 Istio DestinationRule
- dr跳过svc,使用subsets.labels重新关联同名称空间中一系列标签的真实目标pods,称为一个子集
- 接收vs中特定路由规则匹配的流量分发给对应subsets,实现A/B测试和金丝雀发布
- 流量到达每个子集中真实目标的多个pods后,可使用trafficPolicy.loadBalancer.simple指定负载均衡策略,支持的策略:UNSPECIFIED、RANDOM、PASSTHROUGH、ROUND_ROBIN、LEAST_REQUEST、LEAST_CONN
- HTTP和TCP通用连接设置,可以使用trafficPolicy.connectionPool.tcp限制通用连接池以支持熔断,支持的字段:maxConnections、connectTimeout、tcpKeepalive、maxConnection、maxRetries、idleTimeout