一、Istio介绍
云平台令使用它们的公司受益匪浅。但不可否认的是,上云会给 DevOps 团队带来压力。为了可移植性,开发人员必须使用微服务来构建应用,同时运维人员也正在管理着极端庞大的混合云和多云的部署环境。 Istio 允许您连接、保护、控制和观察服务。
从较高的层面来说,I
以上介绍转载自Istio官网文档:https://istio.io/latest/zh/docs/concepts/what-is-istio/
二、下载安装
1、官方命令下载
#下载最新版本,下载过程需要根据你的网络情况,需要一定的时间(有可能一直拒绝连接)
curl -L https://istio.io/downloadIstio | sh -
#下载指定的版本,例如:要下载用于x86_64体系结构的Istio 1.6.8
curl -L https://istio.io/downloadIstio | ISTIO_VERSION=1.6.8 TARGET_ARCH=x86_64 sh –
2、二进制包方式
- GitHub地址:https://github.com/istio/istio
#进入到istio目录下查看都有哪些文件
[root@k8s-master1 ~]# tar -zxvf istio-1.11.3-linux-amd64.tar.gz -C /usr/local/
[root@k8s-master1 ~]# cd /usr/local/istio-1.11.3/
[root@k8s-master1 istio-1.11.3]# ls -al

#将istioctl添加到用户可执行文件目录下
[root@k8s-master1 istio-1.11.3]# cp bin/istioctl /usr/local/bin/
[root@k8s-master1 istio-1.11.3]# istioctl version
no running Istio pods in "istio-system"
1.11.3
3、环境准备说明
- 服务器规格:
- 建议使用内存大小为
8192 MB
和拥有CPU
数量为 4 的机器
- 建议使用内存大小为


4、开始安装部署
- 这里我们使用demo的配置档案,它涵盖了所有的组件,方便我们进行学习
- 注:如果出现了错误可以重新执行
文章来源(Source):https://www.dqzboy.com 一次,失败的原因是Pod未准备就绪
[root@k8s-master1 ~]# istioctl install --set profile=demo -y

- 通过以下命令检查istio资源是否都准备就绪
[root@k8s-master1 ~]# kubectl get all -n istio-system

- 注意:如果出现STATUS为RUNNING而Pod是未就绪状态,那么有可能是你服务器内存和CPU不足导致Pod无法启动
- 检查istio的CRD和API资源
[root@k8s-master1 ~]# kubectl get crd |grep istio
[root@k8s-master1 ~]# kubectl api-resources |grep istio

5、Istio所需端口
- Istio边车代理(Envoy)所使用到的端口和协议
端口 | 协议 | 描述 | 是否仅限Pod内部 |
15000 | TCP | 管理 | YES |
15001 | TCP | 出站 | NO |
15006 | TCP | 入站 | NO |
15008 | TCP | 隧道端口(入站) | NO |
15020 | HTTP | Istio代理端口,Envoy和应用程序合并的Prometheus遥测 | NO |
15021 | HTTP | 健康检查 | NO |
15090 | HTTP | Prometheus遥测 | NO |
- Istio控制平面(istiod)使用的端口和协议
端口 | 协议 | 描述 | 仅本机 |
15010 | GRPC | XDS和CA服务(纯文本) | NO |
15012 | GRPC | XDS和CA服务(TLS,建议生产环境使用) | NO |
8080 | HTTP | 调试接口(已弃用) | NO |
443 | HTTPS | 网络挂钩 | NO |
15014 | HTTP | 控制平面监控 | NO |
注意:为避免端口冲突,应用程序请勿与Enovy使用的端口冲突!
三、部署Kiali面板
- Istio与几种不同的遥测应用程序集成在一起。这些可以帮助您了解服务网格的结
文章来源(Source):https://www.dqzboy.com 构,显示网格的拓扑结构以及分析网格的运行状况。 - 按照以下说明部署Kiali仪表板以及Prometheus,Grafana和Jaeger。
1、安装Kiali
- kiali和Jaeger的服务暴露用的是
LoadBalancer
,我用的是本地的环境没有公网SLB使用,所以要修改为NodePort模式 - 注意端口范围:
30000-32767
[root@k8s-master1 ~]# cd /usr/local/istio-1.11.3/samples/addons/
[root@k8s-master1 addons]# vim kiali.yaml

[root@k8s-master1 addons]# vim jaeger.yaml

[root@k8s-master1 ~]# kubectl apply -f /usr/local/istio-1.11.3/samples/addons -n istio-system
- 将
istio-ingressgateway
改为NodePort
方式
[root@k8s-master1 ~]# kubectl patch service istio-ingressgateway -n istio-system -p '{"spec":{"type":"NodePort"}}'

2、访问Kiali
- 浏览器输入K8S服务节点IP+NodePort端口号
- 例如我这里:http://192.168.66.62:32700/

3、访问Jaeger

四、部署示例程序
Bookinfo包括的独立服务如下:
- Ratings (评分服务)
- Details(详情服务)
- Reviews (评论服务,依赖Ratings,同时提供评论和评分)
- Productpage(产品页面,展示产品详情,评论和评分)
1、部署Bookinfo示例应用程序
1.1:创建名称空间
[root@k8s-master1 ~]# kubectl create namespace istio-demo
1.2:自动注入sidecar
#添加一个名称空间标签,以指示Istio在以后部署应用程序时自动注入Envoy sidecar代理
[root@k8s-master1 ~]# kubectl label namespace istio-demo istio-injection=enabled
1.3:安装应用程序
[root@k8s-master1 ~]# cd /usr/local/istio-1.11.3/
[root@k8s-master1 istio-1.11.3]# kubectl apply -n istio-demo -f samples/bookinfo/platform/kube/bookinfo.yaml
2、检查应用程序相关资源状态
- 该应用程序启动,当每个吊舱准备就绪时,Istio边车将随之部署。
[root@k8s-master1 istio-1.11.3]# kubectl get svc,po -n istio-demo

- 等到所有Pod均报告
READY 2/2
和STATUS Running
后,再进行下一步。这可能需要几分钟,具体取决于平台配置和网络。
3、检查所有资源都已准备就绪
- 通过检查响应中的页面标题,运行以下命令以查看应用程序是否正在集群中运行并提供HTML页面
[root@k8s-master1 istio-1.11.3]# kubectl exec ratings-v1-b6994bb9-4cvsr -c ratings -n istio-demo -- curl -s productpage:9080/productpage | grep -o "<title>.*</title>"

五、访问应用程序
- Bookinfo应用程序已部署,但无法从外部
文章来源(Source):https://www.dqzboy.com 访问。为了使其可访问,需要创建一个 Istio Ingress Gateway,该网关将路径映射到网格边缘处的路线。
1、程序与网关进行关联
[root@k8s-master1 istio-1.11.3]# kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml
#确保网关创建完成
[root@k8s-master1 istio-1.11.3]# kubectl get gateway -n istio-demo
NAME AGE
bookinfo-gateway 2m13s
#检查网关资源信息
[root@k8s-master1 istio-1.11.3]# kubectl get service istio-ingressgateway -n istio-system
2、确保配置没有问题
[root@k8s-master1 istio-1.11.3]# istioctl analyze -n istio-demo
✔ No validation issues found when analyzing namespace: istio-demo.
3、通过面板查看服务关系
- 在左侧导航菜单中,选择图形,然后在名称空间下拉列表中,选择
istio-demo
。 - Kiali仪表板显示了网格的概述以及
Bookinfo
示例应用程序中服务之间的关系。它还提供了过滤器以可视化交通流。


六、验证外部访问
- 通过使用浏览器查看Bookinfo产品页面,确认可以从外部访问Bookinfo应用程序
1、设置Ingress端口
- 注意:因为我的环境是本地集群,未使用外部负载均衡器,需要通过 Node Port 访问
[root@k8s-master1 istio-1.11.3]# export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].nodePort}')
[root@k8s-master1 istio-1.11.3]# export SECURE_INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="https")].nodePort}')
[root@k8s-master1 istio-1.11.3]# export TCP_INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="tcp")].nodePort}')
[root@k8s-master1 istio-1.11.3]# export INGRESS_HOST=$(kubectl get po -l istio=ingressgateway -n istio-system -o jsonpath='{.items[0].status.hostIP}')
#可以得到INGRESS端口和地址如下:
[root@k8s-master1 istio-1.11.3]# echo $INGRESS_HOST
192.168.66.65
[root@k8s-master1 istio-1.11.3]# echo $INGRESS_PORT
30670
2、配置GATWAY_URL
[root@k8s-master1 istio-1.11.3]# export GATEWAY_URL=$INGRESS_HOST:$INGRESS_PORT
3、获取程序外部地址
[root@k8s-master1 istio-1.11.3]# echo "http://$GATEWAY_URL/productpage"
http://192.168.66.65:30670/productpage
4、通过浏览器访问

七、Istio卸载操作
- 卸载addons
$ cd /usr/local/istio-1.11.3
$ kubectl delete -f samples/addons
- 卸载Bookinfo
$ cd /usr/local/istio-1.11.3
$ kubectl delete -n istio-demo -f samples/bookinfo/platform/kube/bookinfo.yaml
$ kubectl delete -n istio-demo -f samples/bookinfo/networking/bookinfo-gateway.yaml
- 卸载Istio
$ istioctl manifest generate --set profile=demo | kubectl delete --ignore-not-found=true -f -
- 删除namespace istio-system
$ kubectl delete namespace istio-system
- 取消对istio-demo进行Istio自动注入
$ kubectl label namespace istio-demo istio-injection-
- 删除namespace istio-demo
$ kubectl delete namespace istio-demo
必须 注册 为本站用户, 登录 后才可以发表评论!