关于service-mesh:Open-Service-Mesh

55次阅读

共计 4091 个字符,预计需要花费 11 分钟才能阅读完成。

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 install

OSM installed successfully in namespace [osm-system] with mesh name [osm]

可有看到,新创建了一个命名空间 osm-system,里边蕴含了所有 osm 组件。并且创立了一个形象的 mesh 对象,名称为 mesh。该 mesh 咱们会在接下来的 demo 中用到。

接下来咱们看下,到底部署了那些资源对象。

kubectl get all -n osm-system
NAME                                  READY   STATUS    RESTARTS   AGE
pod/osm-controller-6d9878c747-t8ht7   1/1     Running   0          81s
pod/osm-grafana-dc99fdd69-9pkdv       1/1     Running   0          81s
pod/osm-prometheus-c7cb9764f-xwdgv    1/1     Running   0          81s
pod/zipkin-f98fd66f9-fh9hw            1/1     Running   0          82s

NAME                     TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)             AGE
service/osm-controller   ClusterIP   10.100.219.192   <none>        15128/TCP,443/TCP   82s
service/osm-grafana      ClusterIP   10.100.214.129   <none>        3000/TCP            82s
service/osm-prometheus   ClusterIP   10.100.16.75     <none>        7070/TCP            82s
service/zipkin           ClusterIP   10.100.8.183     <none>        9411/TCP            82s

NAME                             READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/osm-controller   1/1     1            1           82s
deployment.apps/osm-grafana      1/1     1            1           82s
deployment.apps/osm-prometheus   1/1     1            1           82s
deployment.apps/zipkin           1/1     1            1           82s

NAME                                        DESIRED   CURRENT   READY   AGE
replicaset.apps/osm-controller-6d9878c747   1         1         1       82s
replicaset.apps/osm-grafana-dc99fdd69       1         1         1       82s
replicaset.apps/osm-prometheus-c7cb9764f    1         1         1       82s
replicaset.apps/zipkin-f98fd66f9            1         1         1       82s

包含的组件:

  • osm-controller osm 外围组件。
  • prometheus 和 grafana 用于 metrics 监控。
  • zipkin 用于 trace 追踪。

对于更具体的装置,大家能够参阅文档。

Demo

官网提供了一个相似 istio bookstore 的 demo。

BookstoreBookbuyerBookthiefBookwarehouse演示应用程序将装置在各自的 Kubernetes 命名空间中。为了使这些应用程序主动注入 Envoy Sidecar,咱们必须让命名空间被网格治理。

1: 创立 Bookstore 利用命名空间:

for i in bookstore bookbuyer bookthief bookwarehouse; do kubectl create ns $i; done

namespace/bookstore created
namespace/bookbuyer created
namespace/bookthief created
namespace/bookwarehouse created

2: 将这 4 个命名空间退出到 osm mesh 中:

for i in bookstore bookbuyer bookthief bookwarehouse; do osm namespace add $i; done

Namespace [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 yaml

apiVersion: v1
kind: Namespace
metadata:
  labels:
    openservicemesh.io/monitored-by: osm
  name: bookstore
spec:
  finalizers:
  - kubernetes
status:
  phase: Active

能够看出,将一个命名空间退出到 mesh 中,只须要减少 openservicemesh.io/monitored-by: osm lables 即可。

3: 部署利用

kubectl create -f docs/example/manifests/apps/

serviceaccount/bookbuyer created
service/bookbuyer created
deployment.apps/bookbuyer created
service/bookstore created
service/bookstore-v1 created
serviceaccount/bookstore-v1 created
deployment.apps/bookstore-v1 created
serviceaccount/bookthief created
service/bookthief created
deployment.apps/bookthief created
serviceaccount/bookwarehouse created
service/bookwarehouse created
deployment.apps/bookwarehouse created

Demo 蕴含了上面外围组件:

  • 每个利用的 Kubernetes Deployment,Service,ServiceAccount
  • 一个名为 bookstore 的根服务,其余应用程序将应用该服务将流量定向到 Bookbuyer 应用程序。
  • 一个 SMI TrafficSplit 资源,该资源指定应向每个版本的 Bookstore 发送多少流量。

运行上面的命令,查看一下 trafficsplit:

kubectl get trafficsplit -n bookstore
NAME              SERVICE
bookstore-split   bookstore.bookstore

整个 demo 的拓扑如下:

此时查看该 demo 的任意一个 pod,

kubectl get pods bookstore-v1-6c77fb8798-bj7xh  -n bookstore

NAME                            READY   STATUS    RESTARTS   AGE
bookstore-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 解决方案,而是一种新的架构模式。

正文完
 0