Istio

istio快速开始

  • 安装istion

    • 下载istio

    • 安装crd

    • 安装一个istio demo

    • 确认部署结果

  • Bookinfo应用示例

    • 为命名空间开启自动注入功能

    • 部署Bookinfo应用

    • 确认Bookinfo的Service与Pod都已正常

    • 验证从内部能访问应用

    • 从外部访问应用

      • 为应用定义入口网关

      • 使用NodePort从外部访问

    • 智能路由示例

      • 设置默认目标规则

      • 配置路由策略,只访问reviews-v1

      • 配置路由策略,特定用户的流量导向

  • 卸载

安装istio

1、下载istio

这里我们下载最新版本istio-1.1.7-linux.tar.gz,解压后结构如下:

2、安装crd

3、安装一个demo

4、确认部署结果

确认下列服务(除jaeger-agent外)已经部署并都具有各自的CLUSTER-IP

如果你的集群在一个没有外部负载均衡器支持的环境中运行,istio-ingressgateway 的 EXTERNAL-IP 会是<pending>。要访问这个网关,只能通过服务的 NodePort 或者使用端口转发来进行访问

确认必要的 Kubernetes Pod 都已经创建并且其STATUS的值是Running

Bookinfo应用示例

Bookinfo应用的架构图如下,它包含四个微服务:productpagereviewsdetailsratings,微服务之间的调用关系如图。

其中reviews服务有三个版本v1v2v3

  • v1不会调用rating服务

  • v2会调用rating服务,并且会将评分以黑色的1到5颗星展示出来

  • v3会调用rating服务,并且会将评分以红色的1到5颗星展示出来

1、为命名空间开启自动注入功能

由于我们的Bookinfo是部署在default命名空间下,我们为default命名空间打上如下标签

2、部署Bookinfo应用

bookinfo已经在istio的tar包中了

上面的命令会启动全部的四个服务,其中也包括了reviews服务的三个版本(三个Deployment、一个Service

3、确认Bookinfo的Service与Pod都已正常

4、验证从内部能访问应用

从集群的某个台主机上使用ClusterIP访问productpage这个服务,ClusterIP在上面的kubectl get service中可以查到

5、从外部能访问应用

现在Bookinfo这个应用已经起来了,我们需要让它能够从集群外部访问,比如浏览器。为了达到这个目标,我们需要使用Istio Gateway

5.1 为应用定义入口网关

确认gatewayvirtualservice已创建好

5.2 使用NodePort访问应用

通过如下的命令获取istio-ingressgateway服务的http2协议的NodePort

然后在浏览器中使用URLhttp://<IP>:<NodePort>/productpage来访问应用;其中IP是任意一个工作节点的IP。多刷新几次,我们会发现productpage会调用reviews服务的不同版本

如果productpage调用了reviews-v1,界面如下,没有星

如果productpage调用了reviews-v2,界面如下,有黑色的星

如果productpage调用了reviews-v3,界面如下,有红色的星

6、智能路由示例

6.1 设置目标规则

验证创建成功

6.2 配置一个路由策略

接下来我们配置一个路由策略,让所有的访问都导向reviewsv1版本。执行如下命令创建virtual service

确认部署结果

然后从浏览器访问应用,多刷几次发现永远都是v1版本

6.3 配置另一个路由策略

我们在上面的基础上,再增加一种路由策略:基于用户的路由。在这种策略下,所有用户名为Jason的请求都会路由到服务reviews:v2上去。

注意,istio并没有内置的用户身份,该效果主要是通过在productpage的请求头的添加了一个end-user字段。

执行以下的创建基于用户的路由策略

然后在/productpage页面,用jason登录,多刷几次

卸载

1、删除Bookinfo示例的所有资源

在istio的根目录下执行

2、去掉命名空间的label

3、卸载istio

Reference

  • https://istio.io/docs/setup/kubernetes/install/kubernetes/

  • https://istio.io/docs/examples/bookinfo/

    *https://istio.io/docs/tasks/traffic-management/ingress/#determining-the-ingress-ip-and-ports-when-using-a-node-port

  • https://istio.io/docs/tasks/traffic-management/request-routing/

Last updated

Was this helpful?