云计算 / 网关GATWAY

Istio安装实践及Kiali面板部署

温馨提示:本文最后更新于2021-11-15 21:26:27,某些文章具有时效性,若有错误或已失效,请在下方留言或提交工单提交工单
浅时光 · 11月15日 · 2021年 · 本文5608个字,预计阅读15分钟 2508次已读

一、Istio介绍


云平台令使用它们的公司受益匪浅。但不可否认的是,上云会给 DevOps 团队带来压力。为了可移植性,开发人员必须使用微服务来构建应用,同时运维人员也正在管理着极端庞大的混合云和多云的部署环境。 Istio 允许您连接、保护、控制和观察服务。

从较高的层面来说,Istio 有助于降低这些部署的复杂性,并减轻开发团队的压力。它是一个完全开源的服务网格,作为透明的一层接入到现有的分布式应用程序里。它也是一个平台,拥有可以集成任何日志、遥测和策略系统的 API 接口。Istio 多样化的特性使您能够成功且高效地运行分布式微服务架构,并提供保护、连接和监控微服务的统一方法。

以上介绍转载自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、二进制包方式

#进入到istio目录下查看都有哪些文件
[[email protected] ~]# tar -zxvf istio-1.11.3-linux-amd64.tar.gz -C /usr/local/

[[email protected] ~]# cd /usr/local/istio-1.11.3/
[[email protected] istio-1.11.3]# ls -al
Istio安装实践及Kiali面板部署-浅时光博客
#将istioctl添加到用户可执行文件目录下
[[email protected] istio-1.11.3]# cp bin/istioctl /usr/local/bin/
[[email protected] istio-1.11.3]# istioctl version
no running Istio pods in "istio-system"
1.11.3

3、环境准备说明

  • 服务器规格:
    • 建议使用内存大小为 8192 MB 和拥有 CPU 数量为 4 的机器
Istio安装实践及Kiali面板部署-浅时光博客
Istio安装实践及Kiali面板部署-浅时光博客

4、开始安装部署

  • 这里我们使用demo的配置档案,它涵盖了所有的组件,方便我们进行学习
  • 注:如果出现了错误可以重新执行一次,失败的原因是Pod未准备就绪
[[email protected] ~]# istioctl install --set profile=demo -y
Istio安装实践及Kiali面板部署-浅时光博客
  • 通过以下命令检查istio资源是否都准备就绪
[[email protected] ~]# kubectl get all -n istio-system
Istio安装实践及Kiali面板部署-浅时光博客
  • 注意:如果出现STATUS为RUNNING而Pod是未就绪状态,那么有可能是你服务器内存和CPU不足导致Pod无法启动
  • 检查istio的CRD和API资源
[[email protected] ~]# kubectl get crd |grep istio
[[email protected] ~]# kubectl api-resources |grep istio
Istio安装实践及Kiali面板部署-浅时光博客

5、Istio所需端口

  • Istio边车代理(Envoy)所使用到的端口和协议
端口协议描述是否仅限Pod内部
15000TCP管理端口(命令/诊断)YES
15001TCP出站NO
15006TCP入站NO
15008TCP隧道端口(入站)NO
15020HTTPIstio代理端口,Envoy和应用程序合并的Prometheus遥测NO
15021HTTP健康检查NO
15090HTTPPrometheus遥测NO
  • Istio控制平面(istiod)使用的端口和协议
端口协议描述仅本机
15010GRPCXDS和CA服务(纯文本)NO
15012GRPCXDS和CA服务(TLS,建议生产环境使用)NO
8080HTTP调试接口(已弃用)NO
443HTTPS网络挂钩NO
15014HTTP控制平面监控NO

注意:为避免端口冲突,应用程序请勿与Enovy使用的端口冲突!

三、部署Kiali面板


  1. Istio与几种不同的遥测应用程序集成在一起。这些可以帮助您了解服务网格的结构,显示网格的拓扑结构以及分析网格的运行状况。
  2. 按照以下说明部署Kiali仪表板以及PrometheusGrafanaJaeger

1、安装Kiali

  • kiali和Jaeger的服务暴露用的是LoadBalancer,我用的是本地的环境没有公网SLB使用,所以要修改为NodePort模式
  • 注意端口范围:30000-32767
[[email protected] ~]# cd /usr/local/istio-1.11.3/samples/addons/
[[email protected] addons]# vim kiali.yaml
Istio安装实践及Kiali面板部署-浅时光博客
[[email protected] addons]# vim jaeger.yaml
Istio安装实践及Kiali面板部署-浅时光博客
[[email protected] ~]# kubectl apply -f /usr/local/istio-1.11.3/samples/addons -n istio-system
  • istio-ingressgateway改为NodePort方式
[[email protected] ~]# kubectl patch service istio-ingressgateway -n istio-system -p '{"spec":{"type":"NodePort"}}'
Istio安装实践及Kiali面板部署-浅时光博客

2、访问Kiali

Istio安装实践及Kiali面板部署-浅时光博客

3、访问Jaeger

Istio安装实践及Kiali面板部署-浅时光博客

四、部署示例程序


Bookinfo包括的独立服务如下:

  • Ratings (评分服务)
  • Details(详情服务)
  • Reviews (评论服务,依赖Ratings,同时提供评论和评分)
  • Productpage(产品页面,展示产品详情,评论和评分)

1、部署Bookinfo示例应用程序

1.1:创建名称空间

[[email protected] ~]# kubectl create namespace istio-demo

1.2:自动注入sidecar

#添加一个名称空间标签,以指示Istio在以后部署应用程序时自动注入Envoy sidecar代理
[[email protected] ~]# kubectl label namespace istio-demo istio-injection=enabled

1.3:安装应用程序

[[email protected] ~]# cd /usr/local/istio-1.11.3/
[[email protected] istio-1.11.3]# kubectl apply -n istio-demo -f samples/bookinfo/platform/kube/bookinfo.yaml

2、检查应用程序相关资源状态

  • 该应用程序启动,当每个吊舱准备就绪时,Istio边车将随之部署。
[[email protected] istio-1.11.3]# kubectl get svc,po -n istio-demo
Istio安装实践及Kiali面板部署-浅时光博客
  • 等到所有Pod均报告READY 2/2STATUS Running后,再进行下一步。这可能需要几分钟,具体取决于平台配置和网络。

3、检查所有资源都已准备就绪

  • 通过检查响应中的页面标题,运行以下命令以查看应用程序是否正在集群中运行并提供HTML页面
[[email protected] istio-1.11.3]# kubectl exec ratings-v1-b6994bb9-4cvsr -c ratings -n istio-demo -- curl -s productpage:9080/productpage | grep -o "<title>.*</title>"
Istio安装实践及Kiali面板部署-浅时光博客

五、访问应用程序


  • Bookinfo应用程序已部署,但无法从外部访问。为了使其可访问,需要创建一个 Istio Ingress Gateway,该网关将路径映射到网格边缘处的路线。

1、程序与网关进行关联

[[email protected] istio-1.11.3]# kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml

#确保网关创建完成
[[email protected] istio-1.11.3]# kubectl get gateway -n istio-demo 
NAME               AGE
bookinfo-gateway   2m13s

#检查网关资源信息
[[email protected] istio-1.11.3]# kubectl get service istio-ingressgateway -n istio-system

2、确保配置没有问题

[[email protected] istio-1.11.3]# istioctl analyze -n istio-demo

✔ No validation issues found when analyzing namespace: istio-demo.

3、通过面板查看服务关系

  • 在左侧导航菜单中,选择图形,然后在名称空间下拉列表中,选择istio-demo
  • Kiali仪表板显示了网格的概述以及Bookinfo示例应用程序中服务之间的关系。它还提供了过滤器以可视化交通流。
Istio安装实践及Kiali面板部署-浅时光博客
Istio安装实践及Kiali面板部署-浅时光博客

六、验证外部访问


  • 通过使用浏览器查看Bookinfo产品页面,确认可以从外部访问Bookinfo应用程序

1、设置Ingress端口

  • 注意:因为我的环境是本地集群,未使用外部负载均衡器,需要通过 Node Port 访问
[[email protected] istio-1.11.3]# export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].nodePort}')

[[email protected] istio-1.11.3]# export SECURE_INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="https")].nodePort}')

[[email protected] istio-1.11.3]# export TCP_INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="tcp")].nodePort}')

[[email protected] istio-1.11.3]# export INGRESS_HOST=$(kubectl get po -l istio=ingressgateway -n istio-system -o jsonpath='{.items[0].status.hostIP}')


#可以得到INGRESS端口和地址如下:
[[email protected] istio-1.11.3]# echo $INGRESS_HOST
192.168.66.65
[[email protected] istio-1.11.3]# echo $INGRESS_PORT
30670

2、配置GATWAY_URL

[[email protected] istio-1.11.3]# export GATEWAY_URL=$INGRESS_HOST:$INGRESS_PORT

3、获取程序外部地址

[[email protected] istio-1.11.3]# echo "http://$GATEWAY_URL/productpage"

http://192.168.66.65:30670/productpage

4、通过浏览器访问

Istio安装实践及Kiali面板部署-浅时光博客

七、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



本文作者:浅时光
原文链接:https://www.dqzboy.com/9166.html
版权声明:知识共享署名-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)协议进行许可
转载时请以超链接形式标明文章原始出处和作者信息

0 条回应

必须 注册 为本站用户, 登录 后才可以发表评论!

    本站已稳定运行: | 耗时 0.598 秒 | 查询 13 次 | 内存 38.26 MB