池剑锋 译 分布式实验室
在Kubernetes中创建基本的微服务看似简单。在我们的上一篇文章中,我们展示了使用容器部署是多么容易。我们构建了一个简单的Docker镜像,使用Kubernetes部署它,并查询我们的应用程序。当然,那是相对无痛的!但在现实世界中,云架构通常比这更复杂,涉及数十或数百种服务,包括数据库,身份验证和其他现实问题。
管理所有这些服务是一个真正的麻烦。在本文中,我们将介绍Istio,它是提高和管理大规模云部署的下一代利器。早些时候,我们讨论了微服务的网状结构,这是Istio所支持的。
微服务网格能使你获得微服务架构的可扩展性优势,同时还支持基于集中的优势,例如日志记录和版本控制。有关网格的更多信息,请参阅我们之前的讨论,概述网格的基础知识及其提供的优势。
在这篇文章中,我们将了解Istio在实现云网格架构模式时所提供的能力。我们将安装控制平面,然后查看Istio有什么优势。最后,我们将采用上次定义的Kubernetes服务并添加一个sidecar代理,并将其链接到上面的控制面板。深入:数据平面和边车(sidecar)
sidecar代理与Pod一起运行,定义了你在Kubernetes的服务。顾名思义,它与主要服务组件一起添加,并且它针对该服务的流量进行操作。此设计允许你在Pod中为现有服务定义添加sidecar代理:只需将定义sidecar的行添加到服务中即可开始工作。
你获得的回报是Istio云网产品的核心优点。sidecar代理拦截进入服务的流量,并允许你以智能方式路由它。这可能意味着像负载均衡和处理TLS终止这样简单的事情,这是一种加快速度的简单方法,或者更复杂的事情,例如处理新版本服务的版本控制和分阶段部署以及收集使用指标。sidecar允许你将这些功能添加到现有的微服务架构中,而无需重新设计整个系统。
在掌握了sidecar的最初目标之后,Istio和云网的大部分功能都成为焦点。由于它们充当服务舱之间的单一、统一的桥梁,因此sidecar会共同遇到并查看流经你的应用程序的所有流量。这意味着如果你想加强安全性,sidecar可以提供一个位置,你可以在其中添加服务之间的身份验证和https,记录事件以检查异常情况,以及添加流量控制和守门(gatekeeping)以进行身份验证。
最重要的是,由于sidecar充当服务之间的中央通信端点,因此它们允许你在应用程序中构建弹性并添加额外级别的可伸缩性。微服务的一个常见问题是服务器Pod都是隔离的,如果微服务出现问题,请求可能会被缓慢处理或丢弃。使用sidecar,你可以在一个地方添加超时,更智能的负载均衡和额外的监控。
集中:控制平面
使用Istio时,与控制平面交互的主要方式是通过Kubernetes。安装Istio包和定义后,可以通过操纵系统状态的kubectl命令访问控制平面。例如,使用kubectl将Pod升级到新版本时,版本更新将通过更新本地控制平面变量开始。
最简单的方法是使用kubectl中的get-svc命令列出与给定库相关的服务。要检查正在运行的内容,你可以运行:
kubectl get svc -n istio-system
并查看在后台运行的Istio核心控制平面功能列表。你可能会认识到其中的一些,例如Citadel,即管理服务之间流量安全性的服务。
安装Istio
要安装Istio,请按照Istio官方快速入门指南[1]中的步骤操作。首先,从Istio版本页面[2]下载最新版本。Istio仍处于非常活跃的开发阶段,最新版本始终是最佳起点。要做到这一点,你只需下拉文件并确保它在你的路径中可用。
然后,将Istio定义添加到你的Kubernetes中,以便它们可以与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 App
helloworld.yaml
手动注入Istio Sidecar
确认Pod和服务正在运行:
现在,查看helloworld的流量:
$ curl a2******.ap-southeast-1.elb.amazonaws.com/api/hello
Hello world v1
下一步
在接下来的几篇文章中,我们将介绍一些Istio和云网格的应用程序,以增强我们的示例体系结构的安全性和可管理性。在下一篇文章中,我们将讨论如何在Istio中管理部署和版本更新,以无缝地推送代码更新,而不会出现部署中断。
相关链接:
https://istio.io/docs/setup/kubernetes/install/kubernetes/
https://istio.io/docs/setup/kubernetes/
原文链接:https://medium.com/faun/microservices-mesh-part-ii-istio-basics-b9c343594a05