Open Service Mesh
Open Service Mesh (OSM) 是微软开源的一个轻量级,可扩大的云原生 service mesh 解决方案。其遵循了SMI 标准。并且微软承诺,会尽快交给CNCF基金会治理,这就意味着这是一个社区主导的我的项目,而不是微软。
OSM 数据代理层,抉择了EnvoyProxy,联想到谷歌的Istio,aws的app mesh等service mesh 解决方案,能够看出Envoy 曾经成为了service mesh 事实上的数据层规范。
OSM具备的个性:
- 轻松通明地为部署配置流量转移
- 通过启用mTLS爱护服务到服务的通信
- 定义和执行服务的细粒度拜访控制策略
- 对调试和监督服务的应用程序度量的可察看性和洞察力
- 通过可插入接口与内部证书治理服务/解决方案集成
- 通过启用Envoy代理的主动sidecar注入将应用程序利用到网格上
其实OSM次要蕴含了以下几个组件:
- 代理管制立体-解决来自服务网格Sidecar代理的gRPC连贯
- 证书管理器-解决证书的发行和治理
- 端点提供商-可能自省参加计算平台的组件;这些检索反对网格中服务的计算的IP地址
- 网格标准-SMI Spec的Go SDK的封装;其提供了简略的办法来检索SMI Spec资源,形象出集群和存储细节
- 网格目录-服务网格的心脏;这是地方组件,它从所有其余组件收集输出,并将配置分派到代理管制立体
装置
装置部署osm最简略的形式就是通过 osm
CLI。
从 release 页面 下载最新版本的osm
:
wget https://github.com/openservicemesh/osm/releases/download/v0.2.0/osm-v0.2.0-linux-amd64.tar.gz
目前最新版本是v0.2.0 。
解压缩,并且将osm
加到 PATH中。
mv ./osm /usr/local/bin/osm
而后间接应用osm
装置即可。
osm installOSM installed successfully in namespace [osm-system] with mesh name [osm]
可有看到,新创建了一个命名空间osm-system,里边蕴含了所有osm组件。并且创立了一个形象的mesh对象,名称为mesh。该mesh 咱们会在接下来的demo中用到。
接下来咱们看下,到底部署了那些资源对象。
kubectl get all -n osm-systemNAME READY STATUS RESTARTS AGEpod/osm-controller-6d9878c747-t8ht7 1/1 Running 0 81spod/osm-grafana-dc99fdd69-9pkdv 1/1 Running 0 81spod/osm-prometheus-c7cb9764f-xwdgv 1/1 Running 0 81spod/zipkin-f98fd66f9-fh9hw 1/1 Running 0 82sNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEservice/osm-controller ClusterIP 10.100.219.192 <none> 15128/TCP,443/TCP 82sservice/osm-grafana ClusterIP 10.100.214.129 <none> 3000/TCP 82sservice/osm-prometheus ClusterIP 10.100.16.75 <none> 7070/TCP 82sservice/zipkin ClusterIP 10.100.8.183 <none> 9411/TCP 82sNAME READY UP-TO-DATE AVAILABLE AGEdeployment.apps/osm-controller 1/1 1 1 82sdeployment.apps/osm-grafana 1/1 1 1 82sdeployment.apps/osm-prometheus 1/1 1 1 82sdeployment.apps/zipkin 1/1 1 1 82sNAME DESIRED CURRENT READY AGEreplicaset.apps/osm-controller-6d9878c747 1 1 1 82sreplicaset.apps/osm-grafana-dc99fdd69 1 1 1 82sreplicaset.apps/osm-prometheus-c7cb9764f 1 1 1 82sreplicaset.apps/zipkin-f98fd66f9 1 1 1 82s
包含的组件:
- osm-controller osm 外围组件。
- prometheus 和 grafana 用于metrics监控。
- zipkin 用于trace 追踪。
对于更具体的装置,大家能够参阅文档。
Demo
官网提供了一个相似istio bookstore 的demo。
Bookstore
,Bookbuyer
,Bookthief
,Bookwarehouse
演示应用程序将装置在各自的Kubernetes命名空间中。为了使这些应用程序主动注入Envoy Sidecar,咱们必须让命名空间被网格治理。
1: 创立 Bookstore 利用命名空间:
for i in bookstore bookbuyer bookthief bookwarehouse; do kubectl create ns $i; donenamespace/bookstore creatednamespace/bookbuyer creatednamespace/bookthief creatednamespace/bookwarehouse created
2: 将这4个命名空间退出到osm mesh中:
for i in bookstore bookbuyer bookthief bookwarehouse; do osm namespace add $i; doneNamespace [bookstore] succesfully added to mesh [osm]Namespace [bookbuyer] succesfully added to mesh [osm]Namespace [bookthief] succesfully added to mesh [osm]Namespace [bookwarehouse] succesfully added to mesh [osm]
任意查看这4个命名空间中的一个
kubectl get ns bookstore -o yamlapiVersion: v1kind: Namespacemetadata: labels: openservicemesh.io/monitored-by: osm name: bookstorespec: finalizers: - kubernetesstatus: phase: Active
能够看出,将一个命名空间退出到mesh中,只须要减少 openservicemesh.io/monitored-by: osm
lables即可。
3: 部署利用
kubectl create -f docs/example/manifests/apps/serviceaccount/bookbuyer createdservice/bookbuyer createddeployment.apps/bookbuyer createdservice/bookstore createdservice/bookstore-v1 createdserviceaccount/bookstore-v1 createddeployment.apps/bookstore-v1 createdserviceaccount/bookthief createdservice/bookthief createddeployment.apps/bookthief createdserviceaccount/bookwarehouse createdservice/bookwarehouse createddeployment.apps/bookwarehouse created
Demo蕴含了上面外围组件:
- 每个利用的Kubernetes Deployment,Service, ServiceAccount
- 一个名为
bookstore
的根服务,其余应用程序将应用该服务将流量定向到Bookbuyer
应用程序。 - 一个SMI TrafficSplit资源,该资源指定应向每个版本的Bookstore发送多少流量。
运行上面的命令,查看一下trafficsplit:
kubectl get trafficsplit -n bookstoreNAME SERVICEbookstore-split bookstore.bookstore
整个demo 的拓扑如下:
此时查看该demo的任意一个pod,
kubectl get pods bookstore-v1-6c77fb8798-bj7xh -n bookstoreNAME READY STATUS RESTARTS AGEbookstore-v1-6c77fb8798-bj7xh 2/2 Running 0 9m27s
能够看出曾经将Envoy注入到利用中了。大体上和其余Service Mesh 计划 相似, 通过init container -- osm-init 做了初始化的设置,而后envoy 作为 Sidecar 来承接inboud和outboud流量。
4: 配置拜访策略和流量加密
当所有的利用部署实现后,并且退出到了mesh中,那么就能够应用OSM反对的个性了。比方流量分隔,咱们能够用来实现灰度公布。
此处不再具体讲述,大家有趣味,参考官网文档。
总结
正如Open Service Mesh 所声称,OSM是一个装置容易,运维容易,操作容易的轻量级Service Mesh 解决方案。
不过目前release版本为v0.2.0 , 间隔生产环境还有肯定的工夫。
咱们能够设想微软之前开源的dapr,那么 dapr 和 osm 的联合,能够带来很多新的玩法。将dapr 的很多业务性能也放到sidercar中,届时,osm不仅是一个Service Mesh 解决方案,而是一种新的架构模式。