istio-1.6.13安装部署与使用

一、istio是什么

  • 云平台令使用它们的公司受益匪浅。但不可否认的是,上云会给 DevOps 团队带来压力。为了可移植性,开发人员必须使用微服务来构建应用,同时运维人员也正在管理着极端庞大的混合云和多云的部署环境。 Istio 允许您连接、保护、控制和观察服务。
  • 从较高的层面来说,Istio 有助于降低这些部署的复杂性,并减轻开发团队的压力。它是一个完全开源的服务网格,作为透明的一层接入到现有的分布式应用程序里。它也是一个平台,拥有可以集成任何日志、遥测和策略系统的 API 接口。Istio 多样化的特性使您能够成功且高效地运行分布式微服务架构,并提供保护、连接和监控微服务的统一方法
    个人理解:越来越多的应用/服务,转向微服务化,当微服务达到一定规模后,微服务的治理与管控成为丞待解决的问题,istio正好提供这种微服务的治理能力,提供保护、连接和监控微服务的统一方法,降低这些部署的复杂性,并减轻开发团队的压力。

二、为什么使用 Istio?

通过负载均衡、服务间的身份验证、监控等方法,Istio 可以轻松地创建一个已经部署了服务的网络,而服务的代码只需很少更改甚至无需更改。通过在整个环境中部署一个特殊的 sidecar 代理为服务添加 Istio 的支持,而代理会拦截微服务之间的所有网络通信,然后使用其控制平面的功能来配置和管理 Istio,这包括:

  • 为 HTTP、gRPC、WebSocket 和 TCP 流量自动负载均衡。
  • 通过丰富的路由规则、重试、故障转移和故障注入对流量行为进行细粒度控制。
  • 可插拔的策略层和配置 API,支持访问控制、速率限制和配额。
  • 集群内(包括集群的入口和出口)所有流量的自动化度量、日志记录和追踪。
  • 在具有强大的基于身份验证和授权的集群中实现安全的服务间通信。
    Istio 为可扩展性而设计,可以满足不同的部署需求。

三、下载Istio

访问 Istio release页面下载与您操作系统对应的安装文件,我这里使用的是
istio-1.6.13-linux-amd64.tar.gz

四、安装Istio

1、准备安装环境

1)、环境信息

节点名称IP地址
k8s-master1192.168.227.131
k8s-node1192.168.227.132
k8s-node2192.168.227.133

2)、硬件环境信息

名称描述
办公电脑winxp10
虚拟机VMware® Workstation 15 Pro 15.5.1 build-15018445
操作系统CentOS Linux 7 (Core)
linux内核CentOS Linux (5.4.123-1.el7.elrepo.x86_64) 7 (Core)
CPU至少2核(此版本的k8s要求至少2核,否则kubeadm init会报错)
内存2G及其以上

3)、云原生k8s集群安装

2、安装部署istio

1)解压Istio安装文件

[root@k8s-master1 ~]# mkdir istioinstall

把Istio安装包上传到上面创建的安装目录istioinstall下面,并解压

[root@k8s-master1 istioinstall]# tar -zxvf istio-1.6.13-linux-amd64.tar.gz

1)配置Istio环境变量

[root@k8s-master1 istioinstall]# cd istio-1.6.13/bin/
[root@k8s-master1 bin]# pwd
/root/istioinstall/istio-1.6.13/bin
[root@k8s-master1 bin]# vi ~/.bashrc

添加如下内容后,保存退出

export PATH=/root/istioinstall/istio-1.6.13/bin:$PATH

执行如下命令,使环境变量生效

[root@k8s-master1 bin]# source ~/.bashrc

查看istio版本,测试下是否配置成功,出现如下信息,表示配置成功

[root@k8s-master1 bin]# istioctl version
client version: 1.6.13
control plane version: 1.6.13
data plane version: 1.6.13 (3 proxies)

2)开始安装Istio

  • 执行如下命令,进行demo配置的安装:
    istioctl manifest apply --set profile=demo
[root@k8s-master1 bin]# istioctl manifest apply --set profile=demo
Detected 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
✔ Ingress gateways installed
✔ Egress gateways installed
✔ Addons installed
✔ Installation complete
  • 验证安装成功
  • 新增一个istio-system的namespace命名空间
[root@k8s-master1 manifests]# kubectl get ns
NAME              STATUS   AGE
default           Active   11d
istio-system      Active   8h
kube-node-lease   Active   11d
kube-public       Active   11d
kube-system       Active   11d
prome-system      Active   10d
  • istio-system的namespace命名空间的Pod运行状态正常
[root@k8s-master1 manifests]# kubectl get pod -n istio-system
NAME                                    READY   STATUS    RESTARTS   AGE
grafana-5dc4b4676c-d5l2r                1/1     Running   0          8h
istio-egressgateway-6c59c897b-5xzv5     1/1     Running   0          8h
istio-ingressgateway-69d64797d5-4s55m   1/1     Running   0          8h
istio-tracing-8584b4d7f9-b2dwb          1/1     Running   0          8h
istiod-67f5db7d47-k8mc6                 1/1     Running   0          8h
kiali-6f457f5964-24b9w                  1/1     Running   0          8h
prometheus-7c8bcc98c6-gtk27             2/2     Running   0          8h

五、Istio使用示例

1、Bookinfo示例应用介绍

Istio官方提供了Bookinfo的示例应用,
Bookinfo 应用分为四个单独的微服务:

  • productpage. 这个微服务会调用 details 和 reviews 两个微服务,用来生成页面。
  • details. 这个微服务中包含了书籍的信息。
  • reviews. 这个微服务中包含了书籍相关的评论。它还会调用 ratings 微服务。
  • ratings. 这个微服务中包含了由书籍评价组成的评级信息。
    reviews 微服务有 3 个版本:
  • v1 版本不会调用 ratings 服务。
  • v2 版本会调用 ratings 服务,并使用 1 到 5 个黑色星形图标来显示评分信息。
  • v3 版本会调用 ratings 服务,并使用 1 到 5 个红色星形图标来显示评分信息。
    Bookinfo的示例应用的架构如下图,
    在这里插入图片描述Bookinfo 应用中的几个微服务是由不同的语言编写的。 这些服务对 Istio 并无依赖,但是构成了一个有代表性的服务网格的例子:它由多个服务、多个语言构成,并且 reviews 服务具有多个版本

2、Istio如何管理Booinfo微服务的?

  • Bookinfo示例应用,在 Istio 中运行,应用自身不需要做出任何改变。 只要简单的在 Istio 环境中,对服务进行配置和运行,具体一点说就是把 Envoy sidecar 注入到每个服务之中。 最终的部署结果将如下图所示:
    在这里插入图片描述

3、安装部署Bookinfo示例应用

1)进入Istio安装目录

cd istio-1.6.13

2)创建Bookinfo示例应用运行的namespace命名空间

这一步非必须操作,也可以放到default的命名空间下运行,官方提供的安装方法是在default下面部署的。

kubectl create ns bookinfo

3)开启Istio自动注入Sidecar功能

在应用运行的namespace打上标签 istio-injection=enabled Istio 默认自动注入 Sidecar. 请为 default 命名空间打上标签 istio-injection=enabled

[root@k8s-master1 istio-1.6.13]# kubectl label namespace bookinfo istio-injection=enabled

3)安装bookinfo

[root@k8s-master1 istio-1.6.13]# kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml -n bookinfo
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@k8s-master1 istio-1.6.13]# kubectl -n bookinfo get pod -o wide
NAME                              READY   STATUS    RESTARTS   AGE     IP            NODE        NOMINATED NODE   READINESS GATES
details-v1-5974b67c8-9r6dn        2/2     Running   0          5m54s   10.244.1.36   k8s-node1   <none>           <none>
productpage-v1-64794f5db4-k8t2s   2/2     Running   0          5m53s   10.244.1.34   k8s-node1   <none>           <none>
ratings-v1-c6cdf8d98-xgwqw        2/2     Running   0          5m53s   10.244.2.49   k8s-node2   <none>           <none>
reviews-v1-7f6558b974-phbsk       2/2     Running   0          5m53s   10.244.2.47   k8s-node2   <none>           <none>
reviews-v2-6cb6ccd848-zkn9w       2/2     Running   0          5m53s   10.244.2.48   k8s-node2   <none>           <none>
reviews-v3-cc56b578-whcv6         2/2     Running   0          5m53s   10.244.1.35   k8s-node1   <none>           <none>

创建 Ingress 网关,否则外部无法访问该服务,

[root@k8s-master1 istio-1.6.13]# kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml -n bookinfo

确认网关和访问地址,

[root@k8s-master1 istio-1.6.13]# kubectl get gateways.networking.istio.io -n bookinfo
NAME               AGE
bookinfo-gateway   50s
[root@k8s-master1 istio-1.6.13]# kubectl get virtualservices.networking.istio.io -n bookinfo
NAME       GATEWAYS             HOSTS   AGE
bookinfo   [bookinfo-gateway]   [*]     61s
[root@k8s-master1 istio-1.6.13]# kubectl get svc -n istio-system|grep istio-ingressgateway
istio-ingressgateway        LoadBalancer   10.106.215.228   <pending>     15021:31689/TCP,80:32410/TCP,443:30289/TCP,31400:31641/TCP,15443:32757/TCP   3d4h
[root@k8s-master1 istio-1.6.13]#

按照官方文档的描述,当 istio-ingressgateway 服务的 EXTERNAL-IP 为 pending 时,需要通过如下方式获取访问地址和端口号,

[root@k8s-master1 istio-1.6.13]# kubectl get po -l istio=ingressgateway -n istio-system -o jsonpath='{.items[0].status.hostIP}'
192.168.227.132
[root@k8s-master1 istio-1.6.13]# kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].nodePort}'
32410

然后就可以使用浏览器访问应用页面了,
在这里插入图片描述
此时尝试多刷新几次页面,可以发现请求会被轮询到不同版本的 reviews 服务上,
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值