微服务的服务网格。 第二部分,使用Istio的基础知识

本文的翻译是专门为Kubernetes Based Infrastructure Platform课程的学生准备的。



从表面上看,在Kubernetes中设置基本的微服务非常简单。 在最近的一篇文章中,我们讨论了开始使用容器是多么容易。 我们将一个简单的Docker映像放在一起,使用Kubernetes对其进行部署,然后运行应用程序请求。 这并不困难,但是在生活中,云架构通常更为复杂。 它们包括数十个甚至数百个带有数据库,身份验证和其他实际必要元素的服务。


有时要持续服用会令人头疼。 在本文中,我们将讨论Istio,它是一种用于服务网格的工具(我们之前已经看过该架构),它将大型云部署的管理提升到了一个新的水平。


微服务为您提供了极大的可伸缩性,并且服务网格通过单片环境的典型集中化优势(例如日志和版本控制)对它们进行了补充。 在本系列的上一篇文章中,我们写了更多有关服务网格的功能和优点的信息。


同一出版物的重点是Istio使用网状网络实现云架构模式的功能。 我们将学习如何配置控制平面,考虑Istio的优势,最后,采用我们上次使用的Kubernetes服务,向其添加sidecar代理,并将其与新创建的控制平面相关联。


引入数据平面和Sidecar代理


Istio中的两个主要体系结构术语是数据平面和控制平面。 数据平面与在应用程序中移动,传输到各种服务实例并由服务本身进行处理的数据一起使用。 对于其实现,主要使用Sidecar代理。 在管理级别,确定服务实例化的顺序,遥测数据的位置和服务信息。 控制平面的主要元素包括飞行员和混合器。 让我们看看它是如何工作的。


Sidecar代理与在Kubernetes中定义您的服务的壁炉一起运行。 它被添加到服务的主要组件中,并与去往该服务的流量一起使用。 您可以在壁炉中将sidecar-proxy添加到现有服务定义:仅将定义sidecar-proxy的行添加到服务中,然后它将开始工作。



作为回报,您将获得Istio云网格网络基础的优势列表。 Sidecar代理拦截进入服务的流量并允许智能路由。 我们正在谈论简单的任务,例如负载平衡或处理TLS中断,这将显着加快工作速度,而讨论的过程则更为复杂,例如版本控制,分阶段部署新服务版本以及收集资源利用率指标。 Sidecar-proxy允许您将所有这些功能添加到微服务的现有体系结构中, 而无需重新组织整个系统


随着Sidecar代理的最初目的变得很明确,Istio和云服务网格的整体利益就变得显而易见。 实际上,所有服务聚合之间的sidecar-proxy架构合在一起,充当服务吊舱之间的统一连接元素,可以传递通过应用程序的所有流量。 这意味着,如果有必要,为了加强保护,它们充当一个单一位置,您可以在其中添加验证过程和服务之间的HTTPS协议,保留事件日志以检查异常情况,并部署用于验证的流量控制和过滤工具。


此外,由于sidecar代理充当服务之间通信的中心端点,因此它们提高了应用程序的弹性并增加了可伸缩性的附加级别。 微服务的缺点之一是所有服务器Pod都是隔离的,并且如果微服务有问题,则可以缓慢处理请求或完全重置请求。 借助sidecar代理,您可以集中添加超时,配置智能负载平衡并扩展监视功能。


集中化:控制平面


除了数据平面外,Istio还包括一个控制平面。 它充当应用程序中执行的所有Sidecar代理的控制器,以及所有信息(例如日志记录和版本信息)的中央存储库,网络上的服务将其视为可靠数据的单一来源。



与Istio一起使用时,Kubernetes是与控制平面进行交互的主要方式。 安装Istio软件包并添加定义后,可以使用kubectl命令来控制系统状态以访问控制平面。 例如,使用kubectl将炉床更新为新版本的kubectl始于更新本地控制平面的变量。


kubectl使用get-svc命令最容易看到-您将获得与特定库相关的服务列表。 要检查哪些Istio组件正在运行,可以使用以下命令:


 kubectl get svc -n istio-system 

显示在后台运行的主要Istio控制平面元素的列表。 您可能已经熟悉其中的一些功能,例如Citadel,它是一项管理服务之间流量保护的服务。


安装Istio


让我们看看Istio默认支持哪些功能。 我们将安装Istio控制平面来管理上一篇文章中描述的基本HTTP API。 该API服务是在Kubernetes中定义的,并作为Kubernetes下运行有API的单个服务来实现。


要安装Istio,请遵循快速官方指南中的步骤。 首先从相应的页面下载最新版本的Istio。 该程序仍在积极开发中,因此最好使用其最新版本。 只需下载文件并确保它在正确的目录中即可。


然后将Istio定义添加到Kubernetes,以便可以将其与kubectl命令行kubectl 。 使用kubectl apply将先前获得的.yaml文件添加到安装目录:


 kubectl apply -f install/kubernetes/helm/istio/templates/crds.yaml 

然后通过选择身份验证方法来激活Istio的安装。 我将使用默认的双向HTTPS身份验证,这对于演示和入门非常有用。 要将服务网格添加到现有项目,您需要找出其他一些可用选项。 在此阶段,您可以运行以下命令:


 kubectl apply -f install/kubernetes/istio-demo-auth.yaml 

之后,您可以继续。 您将需要将Istio结构添加到之前创建的Pod中,对于新Pod,请将Istio添加为依赖项。


Helloworld应用程序部署


我们将使用试用应用程序helloworld,该应用程序在我们先前的出版物中进行了介绍。 将创建:一项部署,一项服务,一项网关和一项虚拟服务。 更新配置文件以匹配以下内容:


helloworld.yaml


 apiVersion: v1 kind: Service metadata: name: helloworld spec: type: ClusterIP ports: - port: 80 targetPort: 8080 selector: app: helloworld --- apiVersion: apps/v1 kind: Deployment metadata: name: helloworld-v1 spec: replicas: 1 selector: matchLabels: app: helloworld template: metadata: labels: app: helloworld version: v1 spec: containers: - name: helloworld-kubernetes - image: haseebm/helloworld-kubernetes ports: - containerPort: 8080 --- apiVersion: networking.istio.io/v1alpha3 kind: Gateway metadata: name: helloworld-gateway spec: selector: istio: ingressgateway # use istio default controller servers: - port: number: 80 name: http protocol: HTTP hosts: - "*" --- apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: helloworld spec: hosts: - "*" gateways: - helloworld-gateway http: route: - destination: host: helloworld port: number: 80 

手动Istio Sidecar代理


Istio使用sidecar代理示例将Istio sidecar代理容器与helloworld应用程序容器放在一个炉膛中。


 $ kubectl apply -f <(istioctl kube-inject -f helloworld.yaml) service/helloworld created deployment.extensions/helloworld-v1 created gateway.networking.istio.io/helloworld-gateway created virtualservice.networking.istio.io/helloworld created 

检查是否执行了pod和服务:


 $ kubectl get pod,svc | grep helloworld pod/helloworld-v1-1cbca3f8d5-achr2 2/2 Running service/helloworld ClusterIP 10.160.58.61 

现在检查helloworld应用程序的流量:


 $ curl a2******.ap-southeast-1.elb.amazonaws.com/api/hello 

你好世界v1


后续步骤


通常,Istio是了解云技术网格网络和微服务智能管理的好方法。 正如我们已经写了不止一次的文章,正确管理的微服务具有许多技术优势,包括扩展性。 但是,要获得这些好处,您需要有效地使用现有技术。


将来,我们将研究使用Istio和云网格网络来提高我们的试用架构的安全性和可管理性的其他方案。 因此,下一篇文章将重点介绍Istio中的部署管理和版本控制,以有效地分发代码更新,而不会破坏和破坏部署。


阿萨德·法兹(Asad Faizi)
CloudPlex.io,Inc的创始人兼首席执行官
asad@cloudplex.io
www.cloudplex.io

Source: https://habr.com/ru/post/zh-CN477434/


All Articles