首页 > 其他分享 >Istio安装及Bookinfo环境部署

Istio安装及Bookinfo环境部署

时间:2024-03-10 13:33:05浏览次数:21  
标签:created 部署 istio Istio master241 io Bookinfo root

目录

一.Service Mesh服务网格

1.服务代理模式

身为架构师要考虑微服务的几个要点:
	- 服务注册与发现;
	- 负载均衡;
	
主流的三种服务模式:
	- 集中式代理:
		负载均衡器,典型代表为: nginx,haproxy,lvs
		
	- 嵌入式代理:
		需要借助一个中间件,然后调用其他组件,典型代表就是dubbo应用的provider和consumer。
		
	- 主机独立进程代理
		将嵌入式代理功能封装到底层组件,让开发者仅关心业务实现。

2.什么是Service Mesh

所谓的Service Mesh就是一堆主机独立进程代理相互调用,形成类似服务网格的效果。

国内蚂蚁金服的mson,网易的轻舟都是Server Mesh的实现。我们即将学习的Istio就是Service Mesh的一种实现。

有网友曾打比方:
	第一代微服务代表: Spring  Cloud,Dubbo,...
	第二代微服务代表: Service Mesh,....
	
虽然这样打比方不太准确,但足以说明Service Mesh的重要程度。

二.部署Istio

1.Istio概述

Istio是Google、IBM和Lyft联合开源的微服务Service Mesh框架,旨在解决大量微服务的发现、连接、管理、监控以及安全等问题。

Istio的主要特性包括:
	- HTTP、gRPC和TCP网络流量的自动负载均衡
	- 丰富的路由规则,细粒度的网络流量行为控制
	- 流量加密、服务间认证,以及强身份声明
	- 全范围(Fleet-wide)策略执行
	- 深度遥测和报告

2.Istio各版本支持的K8S版本

如上图所示,我们要选择合适咱们K8S集群的Istio版本进行部署。

参考地址:
	https://istio.io/latest/docs/releases/supported-releases/#support-status-of-istio-releases

3.下载指定版本的Istio

[root@master241 ~]# curl -L https://istio.io/downloadIstio | ISTIO_VERSION=1.17.8 TARGET_ARCH=x86_64 sh -


参考链接:
	https://istio.io/v1.17/zh/docs/setup/getting-started/#download

4.配置Istio的环境变量

[root@master241 ~]# echo 'export PATH="$PATH:/root/istio-1.17.8/bin"' > /etc/profile.d/istio.sh
[root@master241 ~]# 
[root@master241 ~]# source /etc/profile.d/istio.sh
[root@master241 ~]# 
[root@master241 ~]# istioctl --help
Istio configuration command line utility for service operators to
debug and diagnose their Istio mesh.

Usage:
  istioctl [command]

Available Commands:
  admin                Manage control plane (istiod) configuration
  analyze              Analyze Istio configuration and print validation messages
  authz                (authz is experimental. Use `istioctl experimental authz`)
  bug-report           Cluster information and log capture support tool.
  completion           Generate the autocompletion script for the specified shell
  create-remote-secret Create a secret with credentials to allow Istio to access remote Kubernetes apiservers
  dashboard            Access to Istio web UIs
  experimental         Experimental commands that may be modified or deprecated
  help                 Help about any command
  install              Applies an Istio manifest, installing or reconfiguring Istio on a cluster.
  kube-inject          Inject Istio sidecar into Kubernetes pod resources
  manifest             Commands related to Istio manifests
  operator             Commands related to Istio operator controller.
  profile              Commands related to Istio configuration profiles
  proxy-config         Retrieve information about proxy configuration from Envoy [kube only]
  proxy-status         Retrieves the synchronization status of each Envoy in the mesh [kube only]
  remote-clusters      Lists the remote clusters each istiod instance is connected to.
  tag                  Command group used to interact with revision tags
  uninstall            Uninstall Istio from a cluster
  upgrade              Upgrade Istio control plane in-place
  validate             Validate Istio policy and rules files
  verify-install       Verifies Istio Installation Status
  version              Prints out build version information

Flags:
      --context string          The name of the kubeconfig context to use
  -h, --help                    help for istioctl
  -i, --istioNamespace string   Istio system namespace (default "istio-system")
  -c, --kubeconfig string       Kubernetes configuration file
  -n, --namespace string        Config namespace
      --vklog Level             number for the log level verbosity. Like -v flag. ex: --vklog=9

Additional help topics:
  istioctl options                           Displays istioctl global options

Use "istioctl [command] --help" for more information about a command.
[root@master241 ~]# 

5.安装Istio

[root@master241 ~]# istioctl install --set profile=demo -y


在安装 Istio 时所能够使用的内置配置文件。这些配置文件提供了对Istio控制平面和Istio数据平面Sidecar的定制内容。
您可以从Istio内置配置文件的其中一个开始入手,然后根据您的特定需求进一步自定义配置文件。当前提供以下几种内置配置文件:
	- default:
		根据 IstioOperator API 的默认设置启动组件。 
		建议用于生产部署和 Multicluster Mesh 中的 Primary Cluster。
		您可以运行 istioctl profile dump 命令来查看默认设置。

	- demo:
		这一配置具有适度的资源需求,旨在展示 Istio 的功能。 
		它适合运行 Bookinfo 应用程序和相关任务。 这是通过快速开始指导安装的配置。
		此配置文件启用了高级别的追踪和访问日志,因此不适合进行性能测试。

	- minimal:
		与默认配置文件相同,但只安装了控制平面组件。 
		它允许您使用 Separate Profile 配置控制平面和数据平面组件(例如 Gateway)。

	- remote:
		配置 Multicluster Mesh 的 Remote Cluster。

	- empty:
		不部署任何东西。可以作为自定义配置的基本配置文件。

	- preview:
		预览文件包含的功能都是实验性。这是为了探索 Istio 的新功能。不确保稳定性、安全性和性能(使用风险需自负)。
		
参考链接:
	https://istio.io/v1.17/zh/docs/setup/additional-setup/config-profiles/
	https://istio.io/v1.17/zh/docs/setup/getting-started/#download

6.给命名空间添加标签

kubectl label namespace default istio-injection=enabled


温馨提示:
	打上标签后,以后但凡是在default名称空间部署应用时,都会同时自动部署一个sidecar容器用于代理网络相关的工作。
	换句话说,一个Pod内处理有应用容器外,还会自动注入一个"istio-proxy"的容器用户做网络的相关代理。

三.部署示例应用

1.部署Bookinfo示例应用

[root@master241 ~]# cd istio-1.17.8/
[root@master241 istio-1.17.8]# 
[root@master241 istio-1.17.8]# kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml
service/details created
serviceaccount/bookinfo-details created
deployment.apps/details-v1 created
service/ratings created
serviceaccount/bookinfo-ratings created
deployment.apps/ratings-v1 created
service/reviews created
serviceaccount/bookinfo-reviews created
deployment.apps/reviews-v1 created
deployment.apps/reviews-v2 created
deployment.apps/reviews-v3 created
service/productpage created
serviceaccount/bookinfo-productpage created
deployment.apps/productpage-v1 created
[root@master241 istio-1.17.8]# 

2.查看部署结果

[root@master241 istio-1.17.8]# kubectl get svc,po -o wide
NAME                  TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE   SELECTOR
service/details       ClusterIP   10.200.133.132   <none>        9080/TCP   16s   app=details
service/kubernetes    ClusterIP   10.200.0.1       <none>        443/TCP    19h   <none>
service/productpage   ClusterIP   10.200.92.185    <none>        9080/TCP   15s   app=productpage
service/ratings       ClusterIP   10.200.51.82     <none>        9080/TCP   16s   app=ratings
service/reviews       ClusterIP   10.200.249.45    <none>        9080/TCP   16s   app=reviews

NAME                                  READY   STATUS    RESTARTS   AGE   IP            NODE        NOMINATED NODE   READINESS GATES
pod/details-v1-7d4d9d5fcb-dqzbp       2/2     Running   0          16s   10.100.2.10   worker243   <none>           <none>
pod/productpage-v1-66756cddfd-lrv2b   2/2     Running   0          15s   10.100.1.11   worker242   <none>           <none>
pod/ratings-v1-85cc46b6d4-tlvt5       2/2     Running   0          16s   10.100.1.9    worker242   <none>           <none>
pod/reviews-v1-777df99c6d-mxhrt       2/2     Running   0          15s   10.100.2.11   worker243   <none>           <none>
pod/reviews-v2-cdd8fb88b-mkzwv        2/2     Running   0          15s   10.100.1.10   worker242   <none>           <none>
pod/reviews-v3-58b6479b-t89wd         2/2     Running   0          15s   10.100.2.12   worker243   <none>           <none>
[root@master241 istio-1.17.8]# 


温馨提示:
	当每个Pod准备就绪时,Istio边车将伴随应用一起部署。

3.验证服务是否部署成功

[root@master241 istio-1.17.8]# kubectl exec "$(kubectl get pod -l app=ratings -o jsonpath='{.items[0].metadata.name}')" -c ratings -- curl -sS productpage:9080/productpage | grep -o "<title>.*</title>"

四.对外开放应用程序

1.部署metallb以提供LoadBalancer类型

参考链接:
	https://www.cnblogs.com/yinzhengjie/p/17811466.html

2.把应用关联到 Istio 网关

此时,BookInfo应用已经部署,但还不能被外界访问。 要开放访问,您需要创建Istio入站网关(Ingress Gateway), 它会在网格边缘把一个路径映射到路由。
	1.把应用关联到Istio网关
[root@master241 istio-1.17.8]# kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml
gateway.networking.istio.io/bookinfo-gateway created
virtualservice.networking.istio.io/bookinfo created
[root@master241 istio-1.17.8]# 

	2.确保配置文件没有问题
[root@master241 istio-1.17.8]# istioctl analyze

✔ No validation issues found when analyzing namespace: default.
[root@master241 istio-1.17.8]# 


参考链接:
	https://istio.io/v1.17/zh/docs/concepts/traffic-management/#gateways

3.验证当前集群是否支持外部的负载均衡器

[root@master241 istio-1.17.8]# kubectl get svc istio-ingressgateway -n istio-system
NAME                   TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)                                                                      AGE
istio-ingressgateway   LoadBalancer   10.200.138.202   10.0.0.150    15021:30531/TCP,80:31930/TCP,443:32114/TCP,31400:31345/TCP,15443:30249/TCP   2m10s
[root@master241 istio-1.17.8]# 



设置EXTERNAL-IP的值之后, 您的环境就有了一个外部的负载均衡器,可以将其用作入站网关。 

但如果"EXTERNAL-IP"的值为"<none> (或者一直是 <pending> 状态)", 则您的环境则没有提供可作为入站流量网关的外部负载均衡器。 

在这个情况下,您还可以用服务(Service)的节点端口(也就是NodePort类型)访问网关。


推荐阅读:
	https://istio.io/v1.17/zh/docs/setup/getting-started/#determining-the-ingress-ip-and-ports
	https://kubernetes.io/zh-cn/docs/concepts/services-networking/service/#type-nodeport

4.设置入站 IP 地址和端口

export INGRESS_HOST=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].ip}')

export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].port}')

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

export GATEWAY_URL=$INGRESS_HOST:$INGRESS_PORT

echo "$GATEWAY_URL"

5.验证外部访问

http://10.0.0.150/productpage

五.查看仪表盘

1.安装Kiali和其他插件

[root@master241 istio-1.17.8]# kubectl apply -f samples/addons
serviceaccount/grafana created
configmap/grafana created
service/grafana created
deployment.apps/grafana created
configmap/istio-grafana-dashboards created
configmap/istio-services-grafana-dashboards created
deployment.apps/jaeger created
service/tracing created
service/zipkin created
service/jaeger-collector created
serviceaccount/kiali created
configmap/kiali created
clusterrole.rbac.authorization.k8s.io/kiali-viewer created
clusterrole.rbac.authorization.k8s.io/kiali created
clusterrolebinding.rbac.authorization.k8s.io/kiali created
role.rbac.authorization.k8s.io/kiali-controlplane created
rolebinding.rbac.authorization.k8s.io/kiali-controlplane created
service/kiali created
deployment.apps/kiali created
serviceaccount/prometheus created
configmap/prometheus created
clusterrole.rbac.authorization.k8s.io/prometheus created
clusterrolebinding.rbac.authorization.k8s.io/prometheus created
service/prometheus created
deployment.apps/prometheus created
[root@master241 istio-1.17.8]# 
[root@master241 istio-1.17.8]# kubectl rollout status deployment/kiali -n istio-system
Waiting for deployment "kiali" rollout to finish: 0 of 1 updated replicas are available...
deployment "kiali" successfully rolled out
[root@master241 istio-1.17.8]# 


温馨提示:
	尽管上面步骤执行成功后会提示"deployment "kiali" successfully rolled out",但我建议大家还是手动检查下Pod是否部署成功。
	如下图所示,尤其是Prometheus服务,必须是运行状态,否则在Kiali仪表盘查看数据会发现访问不到数据哟。

2.访问Kiali仪表板

[root@master241 istio-1.17.8]# istioctl dashboard kiali --address 10.0.0.241


温馨提示:
	如上图所示,我们可以访问Kiali的仪表盘,说明是成功的。

3.查看追踪数据

[root@master241 ~]# for i in `seq 1 100`; do curl -s -o /dev/null http://$GATEWAY_URL/productpage; done


温馨提示:
	1.要查看追踪数据,必须向服务发送请求。请求的数量取决于Istio的采样率。 
	2.采样率在安装Istio时设置,默认采样速率为1%。在第一个跟踪可见之前,您需要发送至少100 请求。 
	3.如上图所示,访问kiali的WebUI就可以看到追踪数据啦,而bookInfo的架构图我们也一目了然啦;

六.后续进阶步骤

如上图所示,正如官方文档所说,对于新手来说,这些任务是非常好的资源,可以借助 demo 安装更深入评估 Istio 的特性。
	- 配置请求路由:
		https://istio.io/v1.17/zh/docs/tasks/traffic-management/request-routing/
		
	- 故障注入:
		https://istio.io/v1.17/zh/docs/tasks/traffic-management/fault-injection/
		
	- 流量转移:
		https://istio.io/v1.17/zh/docs/tasks/traffic-management/traffic-shifting/
		
	- 通过Prometheus查询度量指标:
		https://istio.io/v1.17/zh/docs/tasks/observability/metrics/querying-metrics/
	
	- 使用 Grafana 可视化指标:
		https://istio.io/v1.17/zh/docs/tasks/observability/metrics/using-istio-dashboard/
	
	- 访问外部服务:
		https://istio.io/v1.17/zh/docs/tasks/traffic-management/egress/egress-control/
	
	- 网格可视化:
		https://istio.io/v1.17/zh/docs/tasks/observability/kiali/
		
	- 部署模型:
		https://istio.io/v1.17/zh/docs/ops/deployment/deployment-models/
	
	- Deployment最佳实践:
		https://istio.io/v1.17/zh/docs/ops/best-practices/deployment/
		
	- 应用程序要求:
		https://istio.io/v1.17/zh/docs/ops/deployment/requirements/
		
	- 安装说明:
		https://istio.io/v1.17/zh/docs/setup/
	
	- Istio社区:
		https://istio.io/v1.17/zh/get-involved/
	
推荐阅读:
	https://istio.io/v1.17/zh/docs/setup/getting-started/#next-steps

七.卸载Istio

1.卸载Istio

kubectl delete -f samples/addons
istioctl uninstall -y --purge


温馨提示:
	Istio卸载程序按照层次结构逐级的从"istio-system"命令空间中删除RBAC权限和所有资源。
	对于不存在的资源报错,可以安全的忽略掉,毕竟它们已经被分层地删除了。

2.移除istio-system命名空间

kubectl delete namespace istio-system

3.移除Istio自动注入Envoy边车代理的标签

kubectl label namespace default istio-injection-

标签:created,部署,istio,Istio,master241,io,Bookinfo,root
From: https://www.cnblogs.com/yinzhengjie/p/18064053

相关文章

  • 从0-1搭建一个自动化部署平台
    以Java服务为例,说明如何搭建一个自动化部署平台DevOps。第一步:准备基础设施服务器:准备至少一台用于部署的服务器,推荐使用云服务提供商的虚拟机或容器服务。操作系统:安装Linux操作系统,如Ubuntu、CentOS等。网络:确保服务器可以访问互联网,以便下载所需的软件和工具。第二步:安......
  • 使用docker搭建环境:安装tomcat、部署war包
     拉取上一步push的tomcat镜像,详见:https://www.cnblogs.com/uncleyong/p/18062439dockerpullregistry.cn-hangzhou.aliyuncs.com/qzcsbj/tomcat:v1.0  war包传到服务器(war包在网盘) 运行容器dockerrun\--nameqzcsbj_tomcat4\-p8184:8080\-v/root/my_do......
  • 多节点oceanbase 集群部署
    安装前准备硬件要求CPU最少2核磁盘最少19G文件系统EXT4戓XFS关闭透明大页echonever>/sys/kernel/mm/redhat_transparent_hugepage/enabled确认操作系统版本是否支持[root@innodb-cluster01~]#cat/etc/redhat-releaseRedHatEnterpriseLinuxServerrelease7.9......
  • 苹果AppleMacOs系统Sonoma本地部署无内容审查(NSFW)大语言量化模型Causallm
    最近Mac系统在运行大语言模型(LLMs)方面的性能已经得到了显著提升,尤其是随着苹果M系列芯片的不断迭代,本次我们在最新的MacOs系统Sonoma中本地部署无内容审查大语言量化模型Causallm。这里推荐使用koboldcpp项目,它是由c++编写的kobold项目,而MacOS又是典型的Unix操作系统,自带clang编......
  • FastGPT接入白菜GPT一键部署教程
     注册会员领取免费API_KEY,内测期间,每天限30名会员免费注册,能注册就能领取API_KEY,无需充值,无需付费,免费使用ChatGPT,支持3.5/4白菜GPT简介白菜GPT旨在提供稳定高效且免费的OpenAIAPI转发服务,帮助国内GPT应用学习相关爱好者及从业者,提供便捷、低成本、长期稳定的GPT中转服......
  • PaddleOCR 服务化部署(基于PaddleHub Serving)
    最近用到百度飞桨的PaddleOCR,研究了一下PaddleOCR的服务化部署,简单记录一些部署过程和碰到的问题。基础环境paddlepaddle2.5.2python3.7paddlehub2.1.0PaddleOCR2.6pip20#查看python版本python--version#查看pip版本pip--version#查看paddlepaddle版本......
  • AI大模型ChatGLM2-6B 第三篇 - ChatGLM2-6B部署
    clone项目下载模型https://cloud.tsinghua.edu.cn/d/674208019e314311ab5c/?p=%2Fchatglm2-6b&mode=list切换conda里面的py39环境cd/home/chq/ChatGLM2-6Bcondaactivatepy39执行pipinstall(py39)root@chq:/home/chq/ChatGLM2-6B#pipinstall-rrequirements.txtC......
  • 灰度发布、蓝绿部署、金丝雀发布和AB测试及在k8s中的实现
    灰度发布、蓝绿部署、金丝雀发布和AB测试都是软件开发和部署中常用的策略,每种策略都有其特定的用途和优势。下面是对这些策略的简要解释:灰度发布(GrayscaleRelease):灰度发布是一种逐步将新版本软件推向用户的方法。通过逐步增加新版本的使用者数量,开发者可以监控新版本的性能和......
  • 瀚高V9的快速安装部署与注意事项
    瀚高V9的快速安装部署与注意事项介质使用上传文件mkdir-p/highgo/opt/highgouseraddhighogochownhighgo/opt/highgo/highgo-Rchmod700/highgo-Rsu-highgo进行执行./bin安装选择路径/opt/highgo输入密码Testxxxxxxxx?!兼容性选择postgresql定......
  • docker 部署 django + mysql + vue 项目
    ​项目目录结构,在Vue和Django项目根目录下创建Dockerfile文件,在父级目录下创建docker-compose.yml文件Project#父级目录├─client#vue3项目目录│├─public│└─src│├─*files│├─*files│├─Dockerfile└─server#Django项......