初试 Open Service Mesh(OSM)

2024-03-17 00:48
文章标签 open 初试 service mesh osm

本文主要是介绍初试 Open Service Mesh(OSM),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

微软近期开源了一个新的名为 Open Service Mesh[1] 的项目并准备捐赠给 CNCF[2]

基本介绍

Open Service Mesh (OSM) is a lightweight, extensible, Cloud Native service mesh that allows users to uniformly manage, secure, and get out-of-the-box observability features for highly dynamic microservice environments.

Open Service Mesh(OSM)是一个轻量级,可扩展的云原生服务网格,它使用户能够统一管理,保护和获得针对高度动态微服务环境的开箱即用的可观察性功能。

OSM 在 Kubernetes 上运行基于 Envoy 的控制平面,可以使用 SMI API 进行配置。它通过以 sidecar 的形式注入 Envoy 代理来工作。

控制面负责持续配置代理,以配置策略和路由规则等都保持最新。代理主要负责执行访问控制的规则,路由控制,采集 metrics 等。(这和目前我们常见到的 Service Mesh 方案基本都一样的)

显著特性

  • 基于  Service Mesh Interface (SMI) 的实现,主要包括 Traffic Access ControlTraffic SpecsTraffic Split 。剩下的 Traffic Metrics 正在开发中;

  • 服务间的通信加密使用 mTLS ;

  • 定义和执行服务间的访问控制[3]策略;

  • 通过 Prometheus 和 Grafana 完成器观察性;

  • 可与外部证书管理服务进行集成;

  • Envoy sidecar [4] 自动注入;

上手体验

只做介绍未免太过无趣,而且说实话,这么多 service mesh 实现,不亲自上手试试看,感觉不出来太多差异的。

这里我使用 KIND[5] 作为我本地的实验环境。

安装

安装过程很简单,直接去 Release 页面[6] 下载预编译好的二进制文件。可将二进制文件加入到 $PATH 中。

(MoeLove) ➜  ~ wget -q https://github.com/openservicemesh/osm/releases/download/v0.1.0/osm-v0.1.0-linux-amd64.tar.gz
(MoeLove) ➜  ~ tar -xzvf osm-v0.1.0-linux-amd64.tar.gz           
linux-amd64/
linux-amd64/LICENSE
linux-amd64/README.md
linux-amd64/osm
(MoeLove) ➜  ~ cd linux-amd64 
(MoeLove) ➜  linux-amd64 ls
LICENSE  osm  README.md

在进行 osm 资源和服务的正式安装前,先做个必要的检查:

(MoeLove) ➜  linux-amd64 ./osm check --pre-install                                                                       
ok: initialize Kubernetes client
ok: query Kubernetes API
ok: Kubernetes version
ok: can create namespaces
ok: can create customresourcedefinitions
ok: can create clusterroles
ok: can create clusterrolebindings
ok: can create mutatingwebhookconfigurations
ok: can create serviceaccounts
ok: can create services
ok: can create deployments
ok: can create configmaps
ok: can read secrets
ok: can modify iptables
All checks successful!

可以看到主要是和权限相关的一些检查。接下来就正式对 ocm 相关资源进行部署。

默认使用的镜像,托管在 DockerHub 上,如果需要配置加速的小伙伴,可传递 --container-registry 更改源地址,以便于加速安装进度。

(MoeLove) ➜  linux-amd64 ./osm installOSM installed successfully in namespace [osm-system] with mesh name [osm]
(MoeLove) ➜  linux-amd64 kubectl -n osm-system get pods
NAME                              READY   STATUS              RESTARTS   AGE
osm-controller-d499d6cc7-88659    0/1     ContainerCreating   0          12s
osm-grafana-58ff65dfb7-svztv      0/1     ContainerCreating   0          12s
osm-prometheus-5756769877-zj6f6   0/1     ContainerCreating   0          12s
zipkin-6df4b57677-dcq8q           0/1     ContainerCreating   0          12s

可以看到默认安装完成后,都在 osm-system 命名空间下,有 4 个 Pods

  • osm-controller:控制谬

  • osm-grafana:Dashboard 相关,可通过 osm dashboard 命令唤起;

  • osm-prometheus:采集 metrics ;

  • zipkin:链路追踪

还有对应的 service 记录.

(MoeLove) ➜  linux-amd64 kubectl -n osm-system get svc  
NAME             TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)             AGE
osm-controller   ClusterIP   10.97.115.1      <none>        15128/TCP,443/TCP   7m46s
osm-grafana      ClusterIP   10.110.209.86    <none>        3000/TCP            7m46s
osm-prometheus   ClusterIP   10.97.10.65      <none>        7070/TCP            7m46s
zipkin           ClusterIP   10.103.150.158   <none>        9411/TCP            7m46s

以及一系列的 CRD

(MoeLove) ➜  linux-amd64 kubectl -n osm-system get crd   
NAME                                      CREATED AT
backpressures.policy.openservicemesh.io   2020-08-06T16:14:03Z
httproutegroups.specs.smi-spec.io         2020-08-06T16:14:03Z
tcproutes.specs.smi-spec.io               2020-08-06T16:14:03Z
trafficsplits.split.smi-spec.io           2020-08-06T16:14:03Z
traffictargets.access.smi-spec.io         2020-08-06T16:14:03Z

实践

  • 创建实验用的 namespace, 并通过 osm namespace add 将其纳入管理范围中:

(MoeLove) ➜  ~ kubectl create ns bookstore
namespace/bookstore created
(MoeLove) ➜  ~ kubectl create ns bookbuyer
namespace/bookbuyer created
(MoeLove) ➜  ~ kubectl create ns bookthief
namespace/bookthief created
(MoeLove) ➜  ~ kubectl create ns bookwarehouse
namespace/bookwarehouse created
(MoeLove) ➜  ~ osm namespace add bookstore bookbuyer bookthief bookwarehouse
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]
  • 部署实验应用程序

# 在项目的代码目录中执行
(MoeLove) ➜  osm git:(main) kubectl apply -f docs/example/manifests/apps 
Warning: kubectl apply should be used on resource created by either kubectl create --save-config or kubectl apply
namespace/bookbuyer configured
serviceaccount/bookbuyer created
service/bookbuyer created
deployment.apps/bookbuyer created
Warning: kubectl apply should be used on resource created by either kubectl create --save-config or kubectl apply
namespace/bookstore configured
service/bookstore created
service/bookstore-v1 created
serviceaccount/bookstore-v1 created
deployment.apps/bookstore-v1 created
Warning: kubectl apply should be used on resource created by either kubectl create --save-config or kubectl apply
namespace/bookthief configured
serviceaccount/bookthief created
service/bookthief created
deployment.apps/bookthief created
Warning: kubectl apply should be used on resource created by either kubectl create --save-config or kubectl apply
namespace/bookwarehouse configured
serviceaccount/bookwarehouse created
service/bookwarehouse created
deployment.apps/bookwarehouse created
trafficsplit.split.smi-spec.io/bookstore-split created
  • 本地访问

你可以通过 kubectl port-foward 在本地对刚才部署的应用进行访问。示例中也提供了相应的启动脚本 scripts/port-forward-all.sh ,注意这里需要先安装 GNU parallel ,例如:dnf install parallel .

(MoeLove) ➜  osm git:(main) ✗ ./scripts/port-forward-all.sh
Academic tradition requires you to cite works you base your article on.
If you use programs that use GNU Parallel to process data for an article in a
scientific publication, please cite:O. Tange (2018): GNU Parallel 2018, Mar 2018, ISBN 9781387509881,DOI https://doi.org/10.5281/zenodo.1146014This helps funding further development; AND IT WON'T COST YOU A CENT.
If you pay 10000 EUR you should feel free to use GNU Parallel without citing.More about funding GNU Parallel and the citation notice:
https://www.gnu.org/software/parallel/parallel_design.html#Citation-noticeTo silence this citation notice: run 'parallel --citation' once.

访问本地的 8080~8083 端口即可看到示例项目。例如:

备注:这里是因为我的应用程序已经运行一段时间了,如果是新部署的,所有数字皆为 0

  • 访问控制策略

我们来看看如何调整访问控制的策略

kind: TrafficTarget
apiVersion: access.smi-spec.io/v1alpha2
metadata:name: bookstore-v1namespace: bookstore
spec:destination:kind: ServiceAccountname: bookstore-v1namespace: bookstorerules:- kind: HTTPRouteGroupname: bookstore-service-routesmatches:- buy-a-book- books-boughtsources:- kind: ServiceAccountname: bookbuyernamespace: bookbuyer#- kind: ServiceAccount#name: bookthief#namespace: bookthief
---
apiVersion: specs.smi-spec.io/v1alpha3
kind: HTTPRouteGroup
metadata:name: bookstore-service-routesnamespace: bookstore
spec:matches:- name: books-boughtpathRegex: /books-boughtmethods:- GETheaders:- host: "bookstore.bookstore"- "user-agent": ".*-http-client/*.*"- "client-app": "bookbuyer"- name: buy-a-bookpathRegex: ".*a-book.*new"methods:- GETheaders:- host: "bookstore.bookstore"

这里定义了两个 SMI 中的资源 TrafficTargetHTTPRouteGroup ,用来控制入口流量。

(MoeLove) ➜  osm git:(main) ✗ kubectl apply -f docs/example/manifests/access/

通过以上命令创建这两个资源。然后再次打开我们的示例应用程序,就会看到对应的计数正在逐步增加(因为请求被放行了) 。

以上示例来自于项目仓库 中的示例。

Dashboard

通过 osm dashboard 可直接唤起本地浏览器,并 port-foward 将 Grafana 打开。

总结

Open Service Mesh 相对来说,确实很轻量。所需要的访问控制,流量切割等功能通过自己创建 SMI 资源来控制。

并且,在同一个集群内可存在多组 mesh ,osm 安装的时候,可指定 mesh 名称。

此外,这个项目也是微软在 Service Mesh 方向的又一个大动作了。目标也许是 Istio 。让我们拭目以待。


欢迎订阅我的文章公众号【MoeLove】

TheMoeLove

参考资料

[1]

OSM: https://github.com/openservicemesh/osm/

[2]

捐赠提案: https://github.com/cncf/toc/pull/507

[3]

访问控制: https://github.com/servicemeshinterface/smi-spec/blob/v0.5.0/apis/traffic-access/v1alpha2/traffic-access.md

[4]

sidecar 注入: https://github.com/openservicemesh/osm/blob/main/docs/patterns/sidecar_injection.md

[5]

Kubernetes In Docker: https://kind.sigs.k8s.io/

[6]

osm Release 页面: https://github.com/openservicemesh/osm/releases

这篇关于初试 Open Service Mesh(OSM)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/817296

相关文章

Open a folder or workspace... (File -> Open Folder)

问题:vscode Open with Live Server 时 显示Open a folder or workspace... (File -> Open Folder)报错 解决:不可以单独打开文件1.html ; 需要在文件夹里打开 像这样

android java.io.IOException: open failed: ENOENT (No such file or directory)-api23+权限受权

问题描述 在安卓上,清单明明已经受权了读写文件权限,但偏偏就是创建不了目录和文件 调用mkdirs()总是返回false. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.READ_E

UserWarning: mkl-service package failed to import

安装完成anaconda,并设置了两个环境变量  之后再控制台运行python环境,输入import numpy as np,提示错误 D:\InstallFolder\Anaconda3\lib\site-packages\numpy\__init__.py:143: UserWarning: mkl-service package failed to import, therefore

数据集 3DPW-开源户外三维人体建模-姿态估计-人体关键点-人体mesh建模 >> DataBall

3DPW 3DPW-开源户外三维人体建模数据集-姿态估计-人体关键点-人体mesh建模 开源户外三维人体数据集 @inproceedings{vonMarcard2018, title = {Recovering Accurate 3D Human Pose in The Wild Using IMUs and a Moving Camera}, author = {von Marc

数据集 Ubody人体smplx三维建模mesh-姿态估计 >> DataBall

Ubody开源人体三维源数据集-smplx-三维建模-姿态估计 UBody:一个连接全身网格恢复和真实生活场景的上半身数据集,旨在拟合全身网格恢复任务与现实场景之间的差距。 UBody包含来自多人的现实场景的1051k张高质量图像,这些图像拥有2D全身关键点、3D SMPLX模型。 UBody由国际数字经济学院(IDEA)提供。 (UBody was used for mesh r

jdbc连接数据库使用sid和service_name的区别 ?

问题描述: ORA-12505, TNS:listener does not currently know of SID given in connect descriptor The Connection descriptor used by the client was: 10.12.162.84:1521:xxxx  oracle数据的tnsnames.ora中配置的是:SERVICE

Open-Sora代码详细解读(1):解读DiT结构

Diffusion Models专栏文章汇总:入门与实战 前言:目前开源的DiT视频生成模型不是很多,Open-Sora是开发者生态最好的一个,涵盖了DiT、时空DiT、3D VAE、Rectified Flow、因果卷积等Diffusion视频生成的经典知识点。本篇博客从Open-Sora的代码出发,深入解读背后的原理。 目录 DiT相比于Unet的关键改进点 Token化方

error while loading shared libraries: libnuma.so.1: cannot open shared object file:

腾讯云CentOS,安装Mysql时: 1.yum remove libnuma.so.1 2.yum install numactl.x86_64

Spring 注解(@Repository 、@Service 和 @Controller )

Spring 2.5 中除了提供 @Component 注释外,还定义了几个拥有特殊语义的注释,它们分别是:@Repository、@Service 和 @Controller 。         在目前的 Spring 版本中,这 3 个注释和 @Component 是等效的,但是从注释类的命名上,很容易看出这 3 个注释分别和持久层 、业务层 和控制层 相对应。虽然目前这 3 个注释和 @

Open Source, Open Life 第九届中国开源年会论坛征集正式启动

中国开源年会 COSCon 是业界最具影响力的开源盛会之一,由开源社在2015年首次发起,而今年我们将迎来第九届 COSCon! 以其独特定位及日益增加的影响力,COSCon 吸引了越来越多的国内外企业、高校、开源组织/社区的大力支持。与一般企业、IT 媒体、行业协会举办的行业大会不同,COSCon 具有跨组织、跨项目、跨社区的广泛覆盖面,也吸引了众多国内外开源开发者和开源爱好者的关注及参与