怎么进行Istio服务网格部署实践,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
作为处理服务通讯的基础设施层,ServiceMesh 技术通过引入轻量级网络代理,实现了服务访问、流量治理、可观察性等关键功能,受到了社区的高度关注。Istio 是开源的 ServiceMesh 产品,提供了一个完整的满足微服务应用多种需求的解决方案。
项目基于最新发布的 Istio1.7.3 版本,从安装和部署出发,介绍 Istio 的安装部署过程,并结合 Bookinfo 示例应用,方便读者认识 Istio 的各个组件及其功能。
在安装之前,需要首先准备一套可用的 Kubernetes 集群,这里我们使用 Istio 1.7.3 进行安装,官方推荐的 Kubernetes 版本包括 1.16, 1.17, 1.18。
本文使用的是百度智能云提供的容器引擎服务 CCE,该服务提供了对容器的生命周期管理,能够满足 Istio 的安装部署要求。选用的 Kubernetes 版本是 1.16.8,包括两个节点,配置为 CentOS 7.3 x86_64 (64bit),4核12G。
Istio 安装文件
下载 Istio,下载内容包括安装文件、示例和 istioctl 命令行工具。
1、这里我们使用 MAC 系统,可以通过以下命令下载最新版本的 Istio:
$ curl -L https://istio.io/downloadIstio | sh -
也可以直接访问 Istio release(https://github.com/istio/istio/releases/tag/1.7.3) 页面下载与当前操作系统对应的安装文件。
注意:当前的最新版本为 1.7.3,如果需要下载安装历史版本,在命令行中指定环境变量 ISTIO_VERSION 即可,如果下载特定系统架构的安装包,则需要设置环境变量 TARGET_ARCH。
2、切换到 Istio 包所在目录。这里我们的目录名为 istio-1.7.3,该安装目录包含如下内容:
$ cd istio-1.7.3/
manifests/ 目录:安装 istio 相关的清单文件,包括 charts、profiles 等
samples/ 目录:包含一组示例应用,覆盖多种应用场景
bin/ 目录:包含 istioctl 的客户端文件。istioctl 命令行工具用于手动注入 Envoy sidecar 代理
tools/ 目录:istio 安装和使用过程相关的脚本
将 istioctl 客户端路径增加到 path 环境变量中,在 MAC 系统下执行以下命令:
$ export PATH=$PWD/bin:$PATH
Istio 主要提供了以下三种安装方式,用户可以根据自己的实际需要进行选择。
1、使用 Istioctl 安装:istioctl 是支持多种自定义选项的的命令行工具,用户可以灵活配置,实现 Istio 组件的定制化安装。Istio 官方推荐使用该方式进行安装部署,可用于生产环境。
2、使用 Helm 自定义安装:这种安装方式使用 Helm charts 定义 Istio 的安装选项,目前该安装方式已被弃用。
3、安装独立的 Operator:该方式使用独立的 Istio operator 来安装 istio,以声明式的方式管理安装配置,目前仍处于实验阶段,不推荐在生产环境使用。
下面我们以 istioctl 安装方式为主,介绍istio的安装步骤和组件信息。
1、使用 demo 配置文件进行安装
Istio 官方提供了针对不同场景的配置文件,这些内置的配置文件提供了对 Istio 控制平面和数据平面的定制内容。用户可以根据实际场景选择特定的配置文件,然后结合自定义选项完成定制化安装。当前提供以下几种内置配置文件包括:
default: 根据默认的安装选项启用组件,建议用于生产环境的部署。
demo: 用于展示 Istio 的基本功能,支持运行 Bookinfo 应用程序和相关任务。
minimal:使用 Istio 的流量管理功能所需的最少组件。
remote:用于配置多集群服务网格场景下的远程集群。
empty:不部署任何组件,可用于自定义配置的基础文件。
preview:包含实验性功能,用于探索 Istio 新功能,但无法保证稳定性。
在选定上述配置文件之后,可以在安装 Istio 时在命令行添加一个或多个 --set <key>=<value> 选项,完成 Istio 安装插件的其他选项配置。
这里为了测试方便,我们直接使用内置的 demo 配置文件进行安装,执行以下命令即可:
$ istioctl install --set profile=demoDetected that your cluster does not support third party JWT authentication. Falling back to less secure first party JWT. See https://istio.io/docs/ops/best-practices/security/#configure-third-party-service-account-tokens for details.✔ Istio core installed✔ Istiod installed✔ Egress gateways installed✔ Ingress gateways installed✔ Installation complete
该命令表示在 Kubernetes 集群上按照 default 配文件的描述安装 Istio 组件。
2、查看组件状态
然后查看 Kubernetes 服务是否已经成功创建:
$ kubectl get svc -n istio-systemNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEistio-egressgateway ClusterIP 172.18.2.116 <none> 80/TCP,443/TCP,15443/TCP 5m35sistio-ingressgateway LoadBalancer 172.18.177.126 154.85.54.75 15021:30059/TCP,80:31088/TCP,443:31806/TCP,31400:30831/TCP,15443:32665/TCP 5m35sistiod ClusterIP 172.18.167.120 <none> 15010/TCP,15012/TCP,443/TCP,15014/TCP,853/TCP 6m1s
查看 Kubernetes pod 是否已经正常部署,且处于 Running 状态:
$ kubectl get pod -n istio-systemNAME READY STATUS RESTARTS AGEistio-egressgateway-7bf76dd59-vtsj9 1/1 Running 0 5m46sistio-ingressgateway-586dbbc45d-2l6sz 1/1 Running 0 5m46sistiod-6cc5758d8c-mgdcb 1/1 Running 0 6m13s
3、开启自动注入
Istio 安装完成后,在部署应用之前,需要首先开启 sidecar 的自动注入,这里可以通过为命名空间添加标签实现,执行以下命令即可:
$ kubectl label namespace default istio-injection=enablednamespace/default labeled
在下载的 Istio 安装文件中,包括多种示例应用,这里我们以 Bookinfo 为例,介绍服务的部署使用过程。该应用由四个单独的微服务构成:
productpage
:该服务会调用 details
和 reviews
两个微服务,用来生成页面。
details
:该服务包含了书籍的信息。
reviews
:该服务包含了书籍相关的评论,会调用 ratings
微服务。
ratings
:该服务包含了由书籍评价组成的评级信息。
这些微服务使用不同的编程语言实现,实现了一个简单的在线书店平台,用于展示书籍的描述、评级等基本信息。
1、使用 kubectl 部署示例应用
进入 istio 安装目录 istio-1.7.3,执行下面的命令完成应用部署。
$ kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yamlservice/details createdserviceaccount/bookinfo-details createddeployment.apps/details-v1 createdservice/ratings createdserviceaccount/bookinfo-ratings createddeployment.apps/ratings-v1 createdservice/reviews createdserviceaccount/bookinfo-reviews createddeployment.apps/reviews-v1 createddeployment.apps/reviews-v2 createddeployment.apps/reviews-v3 createdservice/productpage createdserviceaccount/bookinfo-productpage createddeployment.apps/productpage-v1 created
2、查看服务和实例是否正常创建
$ kubectl get svcNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEdetails ClusterIP 172.18.44.247 <none> 9080/TCP 26skubernetes ClusterIP 172.18.0.1 <none> 443/TCP 35mproductpage ClusterIP 172.18.106.238 <none> 9080/TCP 26sratings ClusterIP 172.18.2.59 <none> 9080/TCP 26sreviews ClusterIP 172.18.10.251 <none> 9080/TCP 26s
$ kubectl get podNAME READY STATUS RESTARTS AGEdetails-v1-5974b67c8-cpw96 2/2 Running 0 3m31sproductpage-v1-64794f5db4-svfk2 2/2 Running 0 3m30sratings-v1-c6cdf8d98-skc4q 2/2 Running 0 3m30sreviews-v1-7f6558b974-cwsh9 2/2 Running 0 3m30sreviews-v2-6cb6ccd848-5fzgc 2/2 Running 0 3m31sreviews-v3-cc56b578-qqmn2 2/2 Running 0 3m31s
可以看到,服务和实例都已经创建成功。
3、确定 Ingress 的 IP 和端口
在 Bookinfo 服务正常启动并运行之后,需要设置 Istio 网关,这样可以在 Kubernetes 集群外部访问应用。
$ kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yamlgateway.networking.istio.io/bookinfo-gateway createdvirtualservice.networking.istio.io/bookinfo created
这里我们使用的 Kubernetes 集群支持外部负载均衡器,可以看到已经分配到 EXTERNAL-IP:
$ kubectl get svc istio-ingressgateway -n istio-systemNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEistio-ingressgateway LoadBalancer 172.18.177.126 154.85.54.75 15021:30059/TCP,80:31088/TCP,443:31806/TCP,31400:30831/TCP,15443:32665/TCP 14m
设置 ingress 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 GATEWAY_URL=$INGRESS_HOST:$INGRESS_PORT
4、应用访问
在浏览器端打开地址 http://${GATEWAY_URL}/productpage,这里我们获取到的地址是154.85.54.75:80,可以看到界面如下。
关于怎么进行Istio服务网格部署实践问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注亿速云行业资讯频道了解更多相关知识。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。