安装并试用Istio service mesh
Last updated
Was this helpful?
Last updated
Was this helpful?
注意:本文档已失效,请浏览 。本书中的 Service Mesh 章节已不再维护,请转到 中浏览。
官方文档地址 。
本文根据官网的文档整理而成,步骤包括安装istio 0.5.1并创建一个bookinfo的微服务来测试istio的功能。
文中使用的yaml文件可以在的manifests/istio
目录中找到,如果镜像pull失败,请根据官网的镜像自行修改。
CentOS 7.4.1708
Docker 17.12.0-ce
Kubernetes 1.8.5
Istio 的控制平面部署在 Kubernetes 中的部署架构如下图所示。
我们可以清楚的看到 Istio 控制平面的几个组件的部署运行的命令与开发的端口,以及端口与服务之间的映射的关系。
1.下载安装包
下载Linux版本的当前最新版安装包
2.解压
解压后,得到的目录结构如下:
从文件里表中可以看到,安装包中包括了kubernetes的yaml文件,示例应用和安装模板。
3.先决条件
以下说明要求您可以访问启用了RBAC(基于角色的访问控制)的Kubernetes1.7.3或更新的群集。您还需要安装1.7.3或更高版本。如果您希望启用automatic sidecar injection,则需要Kubernetes 1.9或更高版本。kubectl
注意:如果您安装了Istio 0.1.x,请在安装新版本之前彻底卸载它(包括适用于所有启用Istio的应用程序窗口的Istio支架)。 安装或升级Kubernetes CLIkubectl以匹配群集支持的版本(CRD支持版本为1.7或更高版本)。
根据您的Kubernetes提供者:
要在本地安装Istio,请安装最新版本的Minikube(版本0.22.1或更高版本)。
4.安装步骤
从0.2版本开始,Istio安装在它自己的istio-system命名空间中,并且可以管理来自所有其他命名空间的服务。
转至Istio发布页面以下载与您的操作系统相对应的安装文件。如果您使用的是MacOS或Linux系统,以下命令自动下载并提取最新版本:
解压缩安装文件并将目录更改为文件位置。
安装目录包含:
例如,如果包是istio-0.5(初步)
将istioctl客户端添加到您的PATH。例如,在MacOS或Linux系统上运行以下命令:
安装Istio的核心组件。从下面两个互相排斥的选项中选择一个,或者用Helm Chart交替安装: a)安装Istio而不启用侧车间的相互TLS认证。为具有现有应用程序的群集,使用Istio辅助车的服务需要能够与其他非Istio Kubernetes服务以及使用活动性和准备就绪探测器,无头服务或StatefulSets的应用程序通信的应用程序选择此选项。
要么
b)安装Istio并启用侧柜之间的相互TLS认证:
这两个选项都会创建istio-system命名空间以及所需的RBAC权限,并部署Istio-Pilot,Istio-Mixer,Istio-Ingress和Istio-CA(证书颁发机构)。
可选:如果您的群集的Kubernetes版本是1.9或更高,并且您希望启用自动代理注入,请安装sidecar injector webhook。 验证安装 请确保以下Kubernetes服务部署:istio-pilot,istio-mixer,istio-ingress。
注意:如果您的集群中不支持外部负载平衡(例如,Minikube)的环境中运行,该external-ip的istio-ingress会显示。您必须使用NodePort访问应用程序,或使用端口转发。
修改istio.yaml中的istio-ingress service的type为ClusterIP,并设置nodePort
,默认为32000。
确保相应Kubernetes容器都运行起来:istio-pilot-*
、istio-mixer-*
、istio-ingress-*
、istio-ca-*
,和可选的istio-sidecar-injector-*
。
部署您的应用程序
您现在可以部署您自己的应用程序或者像Bookinfo一样随安装提供的示例应用程序之一。注意:应用程序必须对所有HTTP通信使用HTTP/1.1或HTTP/2.0协议,因为HTTP/1.0不受支持。
如果您启动了Istio-sidecar-injector,如上所示,您可以直接使用应用程序部署应用程序kubectl create。
Istio Sidecar注入器会自动将Envoy容器注入到您的应用程序窗格中,假设运行在标有名称空间的名称空间中istio-injection=enabled
如果您没有安装Istio-sidecar-injector,则在部署它们之前,必须使用istioctl kube-inject将Envoy容器手动注入应用程序窗格中:
卸载
卸载Istio sidecar进样器:
如果您启用Istio-sidecar-injector,请将其卸载:
卸载Istio核心组件。对于0.6(初始)发行版,卸载将删除RBAC权限,istio-system命名空间和分层下的所有资源。忽略不存在资源的错误是安全的,因为它们可能已被分层删除。
a)如果您在禁用相互TLS身份验证的情况下安装了Istio:
要么
b)如果您在启用相互TLS身份验证的情况下安装了Istio:
7.安装监控插件
安装插件
在traefik ingress中增加增加以上几个服务的配置,同时增加istio-ingress配置。
该微服务用到的镜像有:
该应用架构图如下:
部署应用
如果将productpage
配置在了ingress里了,那么在浏览器中访问http://ingress.istio.io/productpage
,如果使用了istio默认的gateway
ingress配置的话,ingress service使用nodePort
方式暴露的默认使用32000端口,那么可以使用 http://任意节点的IP:32000/productpage
来访问。
多次刷新页面,你会发现有的页面上的评论里有星级打分,有的页面就没有,这是因为我们部署了三个版本的应用,有的应用里包含了评分,有的没有。Istio根据默认策略随机将流量分配到三个版本的应用上。
查看部署的bookinfo应用中的productpage-v1
service和deployment,查看productpage-v1
的pod的详细json信息可以看到这样的结构:
不断刷新productpage页面,将可以在以下几个监控中看到如下界面。
Grafana页面
http://grafana.istio.io
Prometheus页面
http://prometheus.istio.io
Zipkin页面
http://zipkin.istio.io
ServiceGraph页面
http://servicegraph.istio.io/dotviz
可以用来查看服务间的依赖关系。
访问http://servicegraph.istio.io/graph
可以获得json格式的返回结果。
还有一些更高级的功能,我们后续将进一步探索。
下载地址:
我们使用Istio提供的测试应用微服务来进行测试。
Istio kube-inject
命令会在bookinfo.yaml
文件中增加Envoy sidecar信息。参考
在本机的/etc/hosts
下增加VIP节点和ingress.istio.io
的对应信息,具体步骤参考:,或者使用gateway ingress来访问服务,
见文件。从详细输出中可以看到这个Pod中实际有两个容器,这里面包括了initContainer
,作为istio植入到kubernetes deployment中的sidecar。
BookInfo示例中有三个版本的reviews
,可以使用istio来配置路由请求,将流量分发到不同版本的应用上。参考。