nutanix karbon上的istio服务网格

  • 2019年4月22日
  • 0答复
  • 2103意见

UserLevel 4
徽章 +5
免责声明:该帖子旨在用于演示目的,不得用于生产簇。ISTIO今天不包括Nutanix Karbon中,因此Nutanix的支持将无法处理与ISTIO相关的任何案例。

什么是服务网格?

从整体应用过渡到分布式微服务体系结构时,服务的数量会大大增加。大规模的权力下放使开发人员和运营商难以实现服务到服务的通信。

服务网格启用服务到服务通信,提供连接性,安全性,控制和可观察性。


来源:微生物

什么是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


代码:
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。

配置请求路由

现在,我们将应用不同的路由政策。
  1. 所有通往评论服务V1的流量。
  2. 除用户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。
Baidu