微服务网格:Istio基础

Posted 分布式实验室

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了微服务网格:Istio基础相关的知识,希望对你有一定的参考价值。

在Kubernetes中创建基本的微服务看似简单。在我们的 中,我们展示了使用容器部署是多么容易。我们构建了一个简单的Docker镜像,使用Kubernetes部署它,并查询我们的应用程序。当然,那是相对无痛的!但在现实世界中,云架构通常比这更复杂,涉及数十或数百种服务,包括数据库,身份验证和其他现实问题。

管理所有这些服务是一个真正的麻烦。在本文中,我们将介绍Istio,它是提高和管理大规模云部署的下一代利器。早些时候,我们讨论了微服务的网状结构,这是Istio所支持的。

微服务网格能使你获得微服务架构的可扩展性优势,同时还支持基于集中的优势,例如日志记录和版本控制。有关网格的更多信息,请参阅我们之前的 ,概述网格的基础知识及其提供的优势。

在这篇文章中,我们将了解Istio在实现云网格架构模式时所提供的能力。我们将安装控制平面,然后查看Istio有什么优势。最后,我们将采用上次定义的Kubernetes服务并添加一个sidecar代理,并将其链接到上面的控制面板。
深入:数据平面和边车(sidecar)

微服务网格(二):Istio基础


Istio定义了两个关键的架构术语,数据平面和控制平面。数据平面是指通过应用程序流动的数据,传递给不同的服务实例并由服务本身处理。数据平面主要通过边车代理(sidecar-proxy)实现。控制层确定如何实例化服务以及保持服务的遥测和信息的位置。控制平面的关键元素是Pilot和Mixer。让我们按顺序看看它们。

sidecar代理与Pod一起运行,定义了你在Kubernetes的服务。顾名思义,它与主要服务组件一起添加,并且它针对该服务的流量进行操作。此设计允许你在Pod中为现有服务定义添加sidecar代理:只需将定义sidecar的行添加到服务中即可开始工作。

微服务网格(二):Istio基础

你获得的回报是Istio云网产品的核心优点。sidecar代理拦截进入服务的流量,并允许你以智能方式路由它。这可能意味着像负载均衡和处理TLS终止这样简单的事情,这是一种加快速度的简单方法,或者更复杂的事情,例如处理新版本服务的版本控制和分阶段部署以及收集使用指标。sidecar允许你将这些功能添加到现有的微服务架构中,而无需重新设计整个系统。

在掌握了sidecar的最初目标之后,Istio和云网的大部分功能都成为焦点。由于它们充当服务舱之间的单一、统一的桥梁,因此sidecar会共同遇到并查看流经你的应用程序的所有流量。这意味着如果你想加强安全性,sidecar可以提供一个位置,你可以在其中添加服务之间的身份验证和https,记录事件以检查异常情况,以及添加流量控制和守门(gatekeeping)以进行身份验证。

最重要的是,由于sidecar充当服务之间的中央通信端点,因此它们允许你在应用程序中构建弹性并添加额外级别的可伸缩性。微服务的一个常见问题是服务器Pod都是隔离的,如果微服务出现问题,请求可能会被缓慢处理或丢弃。使用sidecar,你可以在一个地方添加超时,更智能的负载均衡和额外的监控。

集中:控制平面

微服务网格(二):Istio基础


在此设施的另一端是控制平面。控制平面充当应用程序中运行的sidecar的控制器,以及网格中的服务可视为单一事实来源的所有信息(如日志记录和版本更新)的中央存储库。

微服务网格(二):Istio基础

使用Istio时,与控制平面交互的主要方式是通过Kubernetes。安装Istio包和定义后,可以通过操纵系统状态的kubectl命令访问控制平面。例如,使用kubectl将Pod升级到新版本时,版本更新将通过更新本地控制平面变量开始。

最简单的方法是使用kubectl中的get-svc命令列出与给定库相关的服务。要检查正在运行的内容,你可以运行:

 
   
   
 
  1. kubectl get svc -n istio-system


并查看在后台运行的Istio核心控制平面功能列表。你可能会认识到其中的一些,例如Citadel,即管理服务之间流量安全性的服务。

安装Istio

微服务网格(二):Istio基础


首先,让我们来看看Istio提供的开箱即用产品。我们将安装Istio控制平面来管理我们在 中定义的基本HTTP API。该API服务是在Kubernetes上定义的,并且作为单个Kubernetes Pod实现,其中运行了API。

要安装Istio,请按照Istio官方快速入门指南[1]中的步骤操作。首先,从Istio版本页面[2]下载最新版本。Istio仍处于非常活跃的开发阶段,最新版本始终是最佳起点。要做到这一点,你只需下拉文件并确保它在你的路径中可用。

然后,将Istio定义添加到你的Kubernetes中,以便它们可以与kubectl命令行工具一起使用。只需使用kubectl apply将你在上面下拉的.yaml文件添加到安装目录中:

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


然后,你需要通过选择身份验证方法来激活Istio安装。对于本演示,我将使用默认的相互HTTPS身份验证,这对于演示项目和开始新工作非常有用。要将网格添加到现有项目,你需要更多地查看选项。现在,你可以运行以下命令:

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


有了这个,你就可以继续往前了。你需要将Istio设施添加到你创建的现有Pod中,对于新Pod,你需要添加Istio作为依赖项。

部署helloworld App

微服务网格(二):Istio基础


我们使用helloworld示例应用程序,该应用程序已在我们的上一篇博客中讲过。这将创建一个部署,一个服务,一个网关和一个VirtualService。更新配置文件以匹配以下内容:

helloworld.yaml

 
   
   
 
  1. apiVersion: v1

  2. kind: Service

  3. metadata:

  4. name: helloworld

  5. spec:

  6. type: ClusterIP

  7. ports:

  8. - port: 80

  9. targetPort: 8080

  10. selector:

  11. app: helloworld


  12. ---


  13. apiVersion: apps/v1

  14. kind: Deployment

  15. metadata:

  16. name: helloworld-v1

  17. spec:

  18. replicas: 1

  19. selector:

  20. matchLabels:

  21. app: helloworld

  22. template:

  23. metadata:

  24. labels:

  25. app: helloworld

  26. version: v1

  27. spec:

  28. containers:

  29. - name: helloworld-kubernetes

  30. image: haseebm/helloworld-kubernetes

  31. ports:

  32. - containerPort: 8080


  33. ---


  34. apiVersion: networking.istio.io/v1alpha3

  35. kind: Gateway

  36. metadata:

  37. name: helloworld-gateway

  38. spec:

  39. selector:

  40. istio: ingressgateway # use istio default controller

  41. servers:

  42. - port:

  43. number: 80

  44. name: http

  45. protocol: HTTP

  46. hosts:

  47. - "*"


  48. ---


  49. apiVersion: networking.istio.io/v1alpha3

  50. kind: VirtualService

  51. metadata:

  52. name: helloworld

  53. spec:

  54. hosts:

  55. - "*"

  56. gateways:

  57. - helloworld-gateway

  58. http:

  59. route:

  60. - destination:

  61. host: helloworld

  62. port:

  63. number: 80


手动注入Istio Sidecar

微服务网格(二):Istio基础


Istio使用sidecar模式将istio sidecar容器与helloworld app容器放在同一个Pod中。

 
   
   
 
  1. $ kubectl apply -f <(istioctl kube-inject -f helloworld.yaml)

  2. service/helloworld created

  3. deployment.extensions/helloworld-v1 created

  4. gateway.networking.istio.io/helloworld-gateway created

  5. virtualservice.networking.istio.io/helloworld created

确认Pod和服务正在运行:

 
   
   
 
  1. $ kubectl get pod,svc | grep helloworld

  2. pod/helloworld-v1-1cbca3f8d5-achr2 2/2 Running

  3. service/helloworld ClusterIP 10.160.58.61


现在,查看helloworld的流量:

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


Hello world v1

下一步


Istio是开展云网格技术和智能微服务管理的一个很好的方式。正如我们在过去的几篇文章中看到的那样,正确管理的微服务在技术优势和可扩展性方面有很多优势,但充分利用可用技术对于获得这些优势至关重要。

在接下来的几篇文章中,我们将介绍一些Istio和云网格的应用程序,以增强我们的示例体系结构的安全性和可管理性。在下一篇文章中,我们将讨论如何在Istio中管理部署和版本更新,以无缝地推送代码更新,而不会出现部署中断。

相关链接:

  1. https://istio.io/docs/setup/kubernetes/install/kubernetes/

  2. https://istio.io/docs/setup/kubernetes/


原文链接:https://medium.com/faun/microservices-mesh-part-ii-istio-basics-b9c343594a05

基于Kubernetes的DevOps实战培训


基于Kubernetes的DevOps战培训将于2019年9月27日在上海开课,3天时间带你系统掌握Kubernetes,学习效果不好可以继续学习。本次培训包括:容器特性、镜像、网络;Kubernetes架构、核心组件、基本功能;Kubernetes设计理念、架构设计、基本功能、常用对象、设计原则;Kubernetes的数据库、运行时、网络、插件已经落地经验;微服务架构、组件、监控方案等,点击下方图片或者阅读原文链接查看详情。

以上是关于微服务网格:Istio基础的主要内容,如果未能解决你的问题,请参考以下文章

Istio安全基础:在零可信网络上运行微服务

微服务网格:Istio高级特性

快速集成Citrix ADC与Istio,实现微服务应用内的流量优化!

快速集成Citrix ADC与Istio,实现微服务应用内的流量优化!

快速集成Citrix ADC与Istio,实现微服务应用内的流量优化!

谈谈微服务架构中的基础设施:Service Mesh与Istio