什么是服务网格?
从整体应用过渡到分布式微服务体系结构时,服务的数量会大大增加。大规模的权力下放使开发人员和运营商难以实现服务到服务的通信。服务网格启用服务到服务通信,提供连接性,安全性,控制和可观察性。
来源:微生物
什么是ISTIO?
来自ISTIO网站:“在高水平上,ISTIO有助于减少这些部署的复杂性,并减轻您的开发团队的压力。这是一个完全开源的网格,可将透明度分层到现有的分布式应用程序上。它也是一个平台,包括使其集成到任何记录平台,遥测或策略系统中的API。ISTIO的多元化功能集可让您成功,有效地运行分布式的微服务体系结构,并提供统一的方法来保护,连接和监视微服务。”
建筑学
ISTIO服务网格中有两架逻辑飞机:数据平面和控制平面。来源:istio
有关更多信息ISTIO架构。
nutanix karbon上的istio
这篇文章将帮助您部署新品牌的Kubernetes群集,并在顶部运行ISTIO。让我们开始吧!提供Nutanix Karbon群集
您需要的第一件事是Nutanix Karbon群集。如果您还没有,请访问Kubernetes群集部署与Nutanix Karbon迈克尔·海格(Michael Haigh)。出于本文的目的,我们将使用Kubernetes版本1.13和默认计算资源的开发集群。请继续关注未来的博客文章,我们将在其中介绍在生产Kubernetes群集上安装ISTIO。
(可选)Kubernetes入学控制器
Nutanix Karbon仅使用稳定的入学控制器。为了支持ISTIO自动卫生机注射功能,我们需要包括两个beta入学控制器:MutatingAdmissionwebhook和验证addissionDabermissionwebhook。您需要使用Karbon中的SSH动作连接到Kubernetes掌握节点。
运行命令以附加两个额外的入场控制器。
sudo sed -i'/ensission-control/s/$/,mutatingAdmissionwebhook,alidationAdmissionwebhook/'/var/nutanix/netanix/etc/kubernetes/manifests/kube-apiserver.yaml
重新启动库比特·马斯特服务。
sudo systemctl守护程序 - 雷亚德&& sudo systemctl restart kubelet-master
下载istio
在撰写本文时,ISTIO为1.1.3版。curl -l https://git.io/getLatestistio |istio_version = 1.1.3 sh-
CD ISTIO-1.1.3
配置头盔
如果您还没有掌舵,请访问我以前的一篇文章之一,nutanix karbon上的无舵头。安装了Tillerless Helm,如果您还没有,让我们开始耕种。
舵蒂勒开始
(可选)指标服务器
ISTIO用途Kubernetes水平豆荚自动制剂对于少数ISTIO组件。这样可以确保您的微服务应用程序尺度,同时尺度尺度以满足性能和弹性要求。指标服务器替换堆(弃用)。iStio将从指标服务器。
用舵机安装指标服务器。
Helm安装稳定/度量服务器\
- 名称度量服务器\
-namespace ntnx-system \
-set args [0] =“ - kubelet-preferred-address-types = internalip”,\
args [1] =“ - kubelet-insecure-tls = true”,\
args [2] =“ - logtostderr”
得到看法访问Karbon用户的指标服务器。
回声'
apiversion:rbac.authorization.k8s.io/v1
KIND:聚类
元数据:
名称:视图对象
规则:
-Apigroups:
-trics.k8s.io
资源:
- 豆荚
- 节点
动词:
- 得到
- 列表
- 手表
---
apiversion:rbac.authorization.k8s.io/v1
类型:簇束
元数据:
名称:视图对象
ROLEREF:
Apigroup:rbac.authorization.k8s.io
KIND:聚类
名称:视图对象
主题:
-apigroup:rbac.authorization.k8s.io
善良:用户
名称:系统:匿名
'|kubectl应用-f-
在karbon上安装istio
在撰写本文时,Helm为2.13.1版。我们正在使用此版本安装ISTIO 1.1.3。使用盔时,有两个步骤可以安装ISTIO。- 安装ISTIO-INIT图表以引导所有ISTIO的CRD:
Helm install install/kubernetes/helm/istio-init \
-name istio-init \
- namespace istio-system
- 安装istio图表对应于演示轮廓。还有其他可用的配置文件。
Helm install install/kubernetes/helm/istio \
-name istio \
-namespace istio-system \
- 值install/kubernetes/helm/istio/values-istio-demo.yaml
验证安装
确保部署相应的kubernetes豆荚并具有地位的跑步或者完全的。kubectl获取豆荚-N iStio -System
现在,我们已经运行了iStio,让我们部署一个示例应用程序。
部署BookInfo应用程序
BookInfo是ISTIO提供的微服务应用程序,用于演示各种ISTIO功能。BookInfo应用程序(来源:istio)
安装BookInfo
应用程序YAML文件是您之前已下载的ISTIO版本的一部分。如您在上一图中看到的那样,请回想一下,要使ISTIO工作,需要将Envoy Sidecar容器添加到每个微服务中。默认情况下,ISTIO不会注入边。为了使ISTIO的网络钩注入辅助设备,我们需要使用标签启用命名空间。对于此示例,我们将使用默认kubernetes名称空间,这意味着istio将向Sidecars注入任何POD部署在默认名称空间中。
kubectl标签名称空间默认iStio intoction =启用
检查默认名称空间是否已正确标记。
kubectl获取名称空间-l istio注入
名称状态年龄注入
默认活动32H启用
ISTIO系统活动31H
Kube-Public活跃32H
Kube-System活动32H
NTNX系统活动32H
让我们部署应用程序。确保您在ISTIO安装的根目录上。
kubectl应用-f样品/bookinfo/platform/kube/bookinfo.yaml
该命令启动了BookInfo应用程序架构图中显示的所有四个服务。启动了所有3个评论服务,V1,V2和V3的版本。让我们确认已经创建了服务,但最重要的是,吊舱运行了两个容器,即微服务和特使代理人。
Kubectl获得服务
名称类型群集IP外部IP端口年龄
详细信息clusterip 172.19.189.165 9080/tcp 3s
kubernetes clusterip 172.19.0.1 443/tcp 32h
ProductPage Clusterip 172.19.201.141 9080/TCP 2S
等级聚类172.19.188.70 9080/TCP 3S
评论集群172.19.236.106 9080/TCP 2S
如果您看到每个吊舱单个容器,请确保已标记为命名空间,并且在Kubernetes API服务中配置了正确的入学控件。
kubectl获取豆荚
名称准备状态重新开始年龄
详细信息-V1-69658DCF78-BBRVD 2/2运行0 60S
ProductPage-V1-6B6798CB84-W46VH 2/2运行0 59S
Ratings-V1-6F97D68B6-NSGBS 2/2运行0 59S
评论-V1-7C98DCD6DC-PH5Z8 2/2运行0 59S
评论-V2-6677766D47-XVPFL 2/2运行0 59S
评论-V3-79F9BCC54C-V5C26 2/2运行0 59S
让我们快速确认BookInfo应用程序正在按预期运行。
kubectl exec -it $(kubectl get pod -l app = ratings -o jsonpath ='{。项目[0] .metadata.name}')-c评级 - curl ProductsPage:9080/productPage |grep -o“。*”
我们期望使用上一个命令的输出是简单的书店应用。
公开bookinfo
默认情况下,示例BookInfo应用程序未公开外部访问。我们可以使用Nginx等入口控制器,但是我们将使用ISTIO网关使用特使代理。kubectl应用-f样品/bookinfo/networking/bookinfo -gateway.yaml
在我们访问浏览器上的网站之前,我们需要一个Kubernetes Worker和BookInfo应用的外部端口的IP地址。
Export Ingress_Host = $(Kubectl获取PO -L ISTIO = IngressGateway \
-n istio -system -o jsonpath ='{。items [0] .status.hostip}')
Export Ingress_port = $(Kubectl -N ISTIO-SYSTEM获取服务ISTIO-INGRESSGATEWAY \
-o jsonpath ='{。spec.ports [?(@name ==“ http2”)]。nodeport}')
export gateway_url = $ ingress_host:$ ingress_port
echo $ gateway_url
在浏览器中复制输出,打开页面https://大约:空白,在我的情况下http://10.10.56.158:31380/productpage。
如果您几次刷新页面,您会看到本书评论的不同版本。发生这种情况是因为我们尚未应用任何路由政策。
应用默认目标规则
在使用ISTIO控制BookInfo版本路由之前,您需要定义可用版本,称为子集, 在目标规则。kubectl应用-f样本/bookinfo/networking/destination-rule-all.yaml
为了更好地了解ISTIO在更改路由策略时如何管理流量,我们将使用两个操作工具:Grafana和Kiali。
- Grafana用于可视化Prometheus收集的指标。
- Kiali用于可视化我们的服务网格以及请求所采取的路径。
产生流量
我们将在后台产生流量,因此我们不需要一直在刷新页面。确保在导出的终端中运行命令Gateway_url环境变量。观看-n 1 curl -o/dev/null -s -w%{http_code} $ gateway_url/productpage \
&>/dev/null&
启动Grafana
通过Grafana UI打开ISTIO仪表板。kubectl -n istio-system port-forward $(kubectl -n istio-system get pod \
-l app = grafana -o jsonpath ='{。项目[0] .metadata.name}')3000:3000&>/>/dev/null&
访问http:// localhost:3000/dashboard/db/istio-mesh-dashboard在您的网络浏览器中。
ISTIO仪表板看起来类似于:
启动Kiali
要打开Kiali UI,请在您的Kubernetes环境中执行以下命令:kubectl -n istio-system port-forward $(kubectl -n istio-system get pod \
-l app = kiali -o jsonpath ='{。项目[0] .metadata.name}')20001:20001&>/>/dev/null&
访问http:// localhost:20001/kiali/console在您的网络浏览器中。点击图形并确保选择了默认名称空间。
操作iStio
您可以自己尝试许多ISTIO任务,但是就本文而言,我们将重点关注配置请求路由。如果要检查其他任务,请访问此关联。当前状态
如您在Kiali中所看到的,我们在后台发送的请求正在得到罗宾对评论服务。这意味着将有没有评分的响应,其他具有黑色评级的响应,而其他具有红色等级的响应。这是因为我们尚未配置任何路由策略。在Grafana中,您会看到发送到发送给的请求评论服务。在我的情况下,每个版本的微服务为0.29 OPS。
配置请求路由
现在,我们将应用不同的路由政策。- 所有通往评论服务V1的流量。
- 除用户Jason的流量外,所有访问量的V1访问量。
情况1
以下路由策略将将所有请求发送给评论:v1。kubectl应用-f样品/bookinfo/networking/virtual-service-all-v1.yaml
等待一分钟,然后重新审视Grafana和Kiali。在格拉法纳,你会看到评论:v2和评论:v3没有任何要求,评分:v1。
在Kiali中,您会看到无效的链接评论:v2和评论:v3。仅有的评论:v1在绿色上是什么意思是带有请求的主动链接。
案例2
接下来,您将更改路由配置,以便将特定用户的所有流量路由到特定的服务版本。在这种情况下,所有名为Jason的用户的流量都将被路由到服务评论:v2。记住,评论:v2是包含星级功能的版本。
kubectl应用-f样本/bookinfo/networking/virtual-service-reviews-test-v2.yaml
对于此示例,我们需要在BookInfo应用程序中登录Jason。打开浏览器并访问https://大约:空白。刷新几次页面,您将看到未显示评分。
作为用户jason登录,刷新浏览器,您会看到每次评论旁边的星级等级出现。
连续刷新浏览器至少15秒,然后检查Grafana和Kiali。在Grafana中,您会看到新的评论:v2工作量和评分:v1服务。
在Kiali中,您可以看到服务网格已经改变,我们有评论:v1和新的评论:v2和评分:v1因为用户Jason的请求。
注意:请记住停止在背景中运行的任务Killall Kubectl和基尔手表。
这篇文章简单地说明了如何在Nutanix Karbon提供的Kubernetes群集上设置ISTIO。