体验 正式发布 的OSM v1.0.0 版本

2021年10月份发布了OSM 1.0 RC[1],在过去的几个月里,OSM 的贡献者一直在努力为 v1.0.0 版本的发布做准备。2022年2月1日,OSM 团队正式发布 1.0.0 版本[2]。OSM 从最初的发布到现在已经走了很长的路,团队继续专注于社区需要的关键和必要的功能。Open Service Mesh(OSM)是一个 轻量级、 可扩展的 Service Mesh 工具,旨在通过引入简单性和降低复杂性来管理和保护 K8s 集群内的 API。它基于 envoy Proxy 并将其作为 sidecar 容器注入到每个Observable应用程序中,该应用程序依次执行流量管理、路由策略、捕获指标等。

微软把Open Service Mesh 捐赠给云原生计算基金会(CNCF),以确保它由社区主导,并具有开放的治理,OSM目前还是 沙箱项目。

1.0 版本已经支持多集群和混合环境中运行 OSM。1.0版本中的一些新功能:

  • 新的内部控制平面事件管理框架来处理对 Kubernetes 集群和策略的更改

  • 拒绝/忽略无效 SMI TrafficTarget 资源的验证

  • 改进控制平面内存利用率,OSM 现在可以根据内存使用情况自动缩放。

  • 支持用于网状流量的 TCP 服务器优先协议。appProtocol: tcp-server-first除了在 Egress 策略中指定的服务之外,现在可以在网格中的服务端口上指定,以减少 MySQL 和 PostgreSQL 等协议的延迟。

  • OSM 附带的 Grafana 仪表板更加准确和一致。

  • OSM 控制平面镜像现在是多架构的,支持 linux/amd64 和 linux/arm64。

自上次发布以来,osmCLI 也有了一些改进。

  • osm support bug-report除了网格内的 Pod 之外,收集日志和其他有助于调试的信息的命令现在可以从 OSM 的控制平面收集日志。

  • 对于在没有 Helm 的情况下管理 OSM 生命周期的用户,该osm install命令现在支持选择性地清理由控制平面创建的 CustomResourceDefinition、webhook 配置和资源以简化卸载。

  • osm version命令现在将显示安装在集群上的 OSM 版本以及 CLI 的版本。

查看我们最新更新的文档网站[3],了解更多关于特性、演示和架构的信息。

显著特性

Open Service Mesh 相对于Istio 来说,确实很轻量。SMI 处理了所有你期望的标准服务 Mesh 功能,包括使用 mTLS 确保服务之间的通信安全,管理访问控制策略,服务监控等。

  • 为服务定义并执行细化的访问控制策略,基于 Service Mesh Interface (SMI) 的实现,主要包括 Traffic Access Control, Traffic Specs 和 Traffic Split 以及 Traffic Metrics ;

  • 通过启用相互 TLS (mTLS) 来保护服务与服务之间的通信 ;

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

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

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

  • 使用 Envoy 边车代理自动注入,将应用程序加入到 OSM 网格中;

上手体验

这里我使用 Rancher Desktop[4] 作为我本地的实验环境,来亲手试一试看了。

安装非常简单,参考文档 [5],直接去 Release 页面下载预编译好的二进制文件。可将二进制文件加入到 $PATH 中。

wget  https://github.com/openservicemesh/osm/releases/download/v1.0.0/osm-v1.0.0-windows-amd64.zip -o osm.zip
unzip osm.zip
osm.exe version

下面的命令显示了如何在 Kubernetes 集群上安装 OSM。此命令启用 Prometheus、 Grafana和 Jaeger集成。文件中的osm.enablePermissiveTrafficPolicychart 参数values.yaml指示 OSM 忽略任何策略,让流量在 Pod 之间自由流动。在 OSM 中的宽松流量策略模式下,系统会绕过 SMI 流量策略强制执行。在此模式下,OSM 会自动发现属于服务网格一部分的服务,并在每个 Envoy 代理挎斗上对流量策略规则进行编程,以便能够与这些服务通信。

osm install  --mesh-name "osm-system" --osm-namespace "osm" --set=osm.enablePermissiveTrafficPolicy=true --set=osm.deployPrometheus=true  --set=osm.deployGrafana=true   --set=osm.deployJaeger=true

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

ef3d9b281140aa25bf991cbd361777c2.png

上图是使用k8slens :https://k8slens.dev/ ,这里简要介绍一下lens:(Lens 就是一个强大的 IDE,可以实时查看集群状态,实时查看日志流,方便排查故障。有了 Lens,你可以更方便快捷地使用你的集群,从根本上提高工作效率和业务迭代速度。Lens 可以管理多集群,它使用内置的 kubectl 通过 kubeconfig 来访问集群,支持本地集群和外部集群(如EKS、AKS、GKE、Pharos、UCP、Rancher 等),甚至连 Openshift 也支持。)

  • osm-controller:osm控制器

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

  • osm-prometheus:采集 metrics ;

  • osm-injector:注入程序

  • osm-bootstrap:启动

  • jaeger :链路追踪

检查 OSM 控制器Deployment、Pod 和svc

kubectl get deployment,pod,service -n osm --selector app=osm-controller

正常运行的 OSM 控制器将如下所示:

a61fcab79784be0cd9a5c200a9abfc0f.png

检查 OSM 注入程序Deployment、Pod 和服务

kubectl get deployment,pod,service -n osm --selector app=osm-injector

正常运行的 OSM 注入程序将如下所示:

4656cabfd15549af4bb591efc5976485.png

检查 OSM 启动 Deployment、Pod 和服务

kubectl get deployment,pod,service -n osm --selector app=osm-bootstrap

86c255b4385d201ed42cf978a7df013b.png

检查验证 Webhook 和改变 Webhook

kubectl get ValidatingWebhookConfiguration --selector app=osm-controller

正常运行的 OSM 验证 Webhook 将如下所示:

e6375995d15c92ee31f6985ed8e46d16.png

检查改变 Webhook 的服务和 CA 捆绑包

kubectl get ValidatingWebhookConfiguration osm-validator-mesh-osm-system -o json | jq '.webhooks[0].clientConfig.service'

正确配置的改变 Webhook 配置将如下所示:

{
       "name": "osm-validator",
       "namespace": "osm",
       "path": "/validate",
       "port": 9093
}

检查 osm-mesh-config 资源

检查该 ConfigMap 是否存在:kubectl get meshconfig osm-mesh-config -n osm

检查 OSM MeshConfig 的内容

kubectl get meshconfig osm-mesh-config -n osm -o yaml

PS C:\Users\zsygz> kubectl get meshconfig osm-mesh-config -n osm -o yaml
apiVersion: config.openservicemesh.io/v1alpha1
kind: MeshConfig
metadata:
   creationTimestamp: "2022-02-03T07:47:42Z"
   generation: 1
   name: osm-mesh-config
   namespace: osm
   resourceVersion: "230958"
   uid: 2701cf39-02dd-4d8d-b920-30120f52dc66
spec:
   certificate:
     certKeyBitSize: 2048
     serviceCertValidityDuration: 24h
   featureFlags:
     enableAsyncProxyServiceMapping: false
     enableEgressPolicy: true
     enableEnvoyActiveHealthChecks: false
     enableIngressBackendPolicy: true
     enableMulticlusterMode: false
     enableRetryPolicy: false
     enableSnapshotCacheMode: false
     enableWASMStats: true
   observability:
     enableDebugServer: false
     osmLogLevel: info
     tracing:
       enable: false
   sidecar:
     configResyncInterval: 0s
     enablePrivilegedInitContainer: false
     logLevel: error
     resources: {}
   traffic:
     enableEgress: false
     enablePermissiveTrafficPolicyMode: true
     inboundExternalAuthorization:
       enable: false
       failureModeAllow: false
       statPrefix: inboundExtAuthz
       timeout: 1s
     inboundPortExclusionList: []
     outboundIPRangeExclusionList: []
     outboundPortExclusionList: []

以及一系列的 CRD

PS C:\Users\zsygz> kubectl get crds -n osm
NAME                                                            CREATED AT
addons.k3s.cattle.io                                            2022-01-03T02:00:57Z
helmcharts.helm.cattle.io                                       2022-01-03T02:00:57Z
helmchartconfigs.helm.cattle.io                                 2022-01-03T02:00:57Z
middlewaretcps.traefik.containo.us                              2022-01-03T02:03:26Z
ingressrouteudps.traefik.containo.us                            2022-01-03T02:03:26Z
tlsstores.traefik.containo.us                                   2022-01-03T02:03:26Z
serverstransports.traefik.containo.us                           2022-01-03T02:03:26Z
traefikservices.traefik.containo.us                             2022-01-03T02:03:26Z
ingressroutetcps.traefik.containo.us                            2022-01-03T02:03:26Z
middlewares.traefik.containo.us                                 2022-01-03T02:03:26Z
tlsoptions.traefik.containo.us                                  2022-01-03T02:03:26Z
ingressroutes.traefik.containo.us                               2022-01-03T02:03:26Z
challenges.acme.cert-manager.io                                 2022-01-03T10:05:42Z
certificaterequests.cert-manager.io                             2022-01-03T10:05:42Z
clusterissuers.cert-manager.io                                  2022-01-03T10:05:42Z
issuers.cert-manager.io                                         2022-01-03T10:05:42Z
orders.acme.cert-manager.io                                     2022-01-03T10:05:42Z
certificates.cert-manager.io                                    2022-01-03T10:05:42Z
features.management.cattle.io                                   2022-01-03T11:35:16Z
navlinks.ui.cattle.io                                           2022-01-03T11:35:19Z
clusters.management.cattle.io                                   2022-01-03T11:35:20Z
apiservices.management.cattle.io                                2022-01-03T11:35:20Z
clusterregistrationtokens.management.cattle.io                  2022-01-03T11:35:20Z
settings.management.cattle.io                                   2022-01-03T11:35:20Z
preferences.management.cattle.io                                2022-01-03T11:35:20Z
clusterrepos.catalog.cattle.io                                  2022-01-03T11:35:20Z
operations.catalog.cattle.io                                    2022-01-03T11:35:20Z
apps.catalog.cattle.io                                          2022-01-03T11:35:20Z
fleetworkspaces.management.cattle.io                            2022-01-03T11:35:20Z
managedcharts.management.cattle.io                              2022-01-03T11:35:20Z
clusters.provisioning.cattle.io                                 2022-01-03T11:35:21Z
rkeclusters.rke.cattle.io                                       2022-01-03T11:35:21Z
rkecontrolplanes.rke.cattle.io                                  2022-01-03T11:35:21Z
rkebootstraps.rke.cattle.io                                     2022-01-03T11:35:21Z
rkebootstraptemplates.rke.cattle.io                             2022-01-03T11:35:21Z
custommachines.rke.cattle.io                                    2022-01-03T11:35:21Z
clusters.cluster.x-k8s.io                                       2022-01-03T11:35:21Z
machinedeployments.cluster.x-k8s.io                             2022-01-03T11:35:21Z
machinehealthchecks.cluster.x-k8s.io                            2022-01-03T11:35:21Z
machines.cluster.x-k8s.io                                       2022-01-03T11:35:22Z
machinesets.cluster.x-k8s.io                                    2022-01-03T11:35:22Z
authconfigs.management.cattle.io                                2022-01-03T11:35:22Z
groupmembers.management.cattle.io                               2022-01-03T11:35:22Z
groups.management.cattle.io                                     2022-01-03T11:35:22Z
tokens.management.cattle.io                                     2022-01-03T11:35:22Z
userattributes.management.cattle.io                             2022-01-03T11:35:22Z
users.management.cattle.io                                      2022-01-03T11:35:22Z
catalogs.management.cattle.io                                   2022-01-03T11:35:23Z
clusterroletemplatebindings.management.cattle.io                2022-01-03T11:35:23Z
catalogtemplates.management.cattle.io                           2022-01-03T11:35:23Z
dynamicschemas.management.cattle.io                             2022-01-03T11:35:23Z
catalogtemplateversions.management.cattle.io                    2022-01-03T11:35:23Z
etcdbackups.management.cattle.io                                2022-01-03T11:35:23Z
clusteralerts.management.cattle.io                              2022-01-03T11:35:23Z
globalrolebindings.management.cattle.io                         2022-01-03T11:35:23Z
clusteralertgroups.management.cattle.io                         2022-01-03T11:35:23Z
clustercatalogs.management.cattle.io                            2022-01-03T11:35:23Z
globalroles.management.cattle.io                                2022-01-03T11:35:23Z
clusterloggings.management.cattle.io                            2022-01-03T11:35:23Z
kontainerdrivers.management.cattle.io                           2022-01-03T11:35:23Z
clusteralertrules.management.cattle.io                          2022-01-03T11:35:23Z
apps.project.cattle.io                                          2022-01-03T11:35:23Z
nodedrivers.management.cattle.io                                2022-01-03T11:35:23Z
clustermonitorgraphs.management.cattle.io                       2022-01-03T11:35:23Z
clusterscans.management.cattle.io                               2022-01-03T11:35:23Z
apprevisions.project.cattle.io                                  2022-01-03T11:35:23Z
pipelineexecutions.project.cattle.io                            2022-01-03T11:35:23Z
nodepools.management.cattle.io                                  2022-01-03T11:35:23Z
nodetemplates.management.cattle.io                              2022-01-03T11:35:23Z
pipelinesettings.project.cattle.io                              2022-01-03T11:35:23Z
composeconfigs.management.cattle.io                             2022-01-03T11:35:23Z
nodes.management.cattle.io                                      2022-01-03T11:35:23Z
podsecuritypolicytemplateprojectbindings.management.cattle.io   2022-01-03T11:35:24Z
multiclusterapps.management.cattle.io                           2022-01-03T11:35:24Z
pipelines.project.cattle.io                                     2022-01-03T11:35:23Z
podsecuritypolicytemplates.management.cattle.io                 2022-01-03T11:35:24Z
sourcecodecredentials.project.cattle.io                         2022-01-03T11:35:24Z
multiclusterapprevisions.management.cattle.io                   2022-01-03T11:35:24Z
projectnetworkpolicies.management.cattle.io                     2022-01-03T11:35:24Z
sourcecodeproviderconfigs.project.cattle.io                     2022-01-03T11:35:24Z
monitormetrics.management.cattle.io                             2022-01-03T11:35:24Z
sourcecoderepositories.project.cattle.io                        2022-01-03T11:35:24Z
notifiers.management.cattle.io                                  2022-01-03T11:35:24Z
projectroletemplatebindings.management.cattle.io                2022-01-03T11:35:24Z
projects.management.cattle.io                                   2022-01-03T11:35:24Z
projectalerts.management.cattle.io                              2022-01-03T11:35:24Z
projectalertgroups.management.cattle.io                         2022-01-03T11:35:24Z
rkek8ssystemimages.management.cattle.io                         2022-01-03T11:35:24Z
projectcatalogs.management.cattle.io                            2022-01-03T11:35:24Z
projectloggings.management.cattle.io                            2022-01-03T11:35:24Z
rkek8sserviceoptions.management.cattle.io                       2022-01-03T11:35:24Z
projectalertrules.management.cattle.io                          2022-01-03T11:35:24Z
rkeaddons.management.cattle.io                                  2022-01-03T11:35:24Z
roletemplates.management.cattle.io                              2022-01-03T11:35:24Z
projectmonitorgraphs.management.cattle.io                       2022-01-03T11:35:24Z
samltokens.management.cattle.io                                 2022-01-03T11:35:24Z
clustertemplates.management.cattle.io                           2022-01-03T11:35:24Z
clustertemplaterevisions.management.cattle.io                   2022-01-03T11:35:24Z
cisconfigs.management.cattle.io                                 2022-01-03T11:35:24Z
cisbenchmarkversions.management.cattle.io                       2022-01-03T11:35:24Z
templates.management.cattle.io                                  2022-01-03T11:35:24Z
templateversions.management.cattle.io                           2022-01-03T11:35:24Z
templatecontents.management.cattle.io                           2022-01-03T11:35:24Z
globaldnses.management.cattle.io                                2022-01-03T11:35:24Z
globaldnsproviders.management.cattle.io                         2022-01-03T11:35:24Z
prometheuses.monitoring.coreos.com                              2022-01-03T11:35:29Z
prometheusrules.monitoring.coreos.com                           2022-01-03T11:35:29Z
alertmanagers.monitoring.coreos.com                             2022-01-03T11:35:29Z
servicemonitors.monitoring.coreos.com                           2022-01-03T11:35:29Z
azureconfigs.rke-machine-config.cattle.io                       2022-01-03T11:35:32Z
vmwarevsphereconfigs.rke-machine-config.cattle.io               2022-01-03T11:35:32Z
digitaloceanconfigs.rke-machine-config.cattle.io                2022-01-03T11:35:32Z
harvesterconfigs.rke-machine-config.cattle.io                   2022-01-03T11:35:32Z
linodeconfigs.rke-machine-config.cattle.io                      2022-01-03T11:35:32Z
amazonec2configs.rke-machine-config.cattle.io                   2022-01-03T11:35:32Z
digitaloceanmachines.rke-machine.cattle.io                      2022-01-03T11:35:32Z
azuremachines.rke-machine.cattle.io                             2022-01-03T11:35:32Z
linodemachines.rke-machine.cattle.io                            2022-01-03T11:35:32Z
vmwarevspheremachines.rke-machine.cattle.io                     2022-01-03T11:35:32Z
harvestermachines.rke-machine.cattle.io                         2022-01-03T11:35:32Z
amazonec2machines.rke-machine.cattle.io                         2022-01-03T11:35:32Z
digitaloceanmachinetemplates.rke-machine.cattle.io              2022-01-03T11:35:32Z
azuremachinetemplates.rke-machine.cattle.io                     2022-01-03T11:35:32Z
linodemachinetemplates.rke-machine.cattle.io                    2022-01-03T11:35:32Z
amazonec2machinetemplates.rke-machine.cattle.io                 2022-01-03T11:35:32Z
vmwarevspheremachinetemplates.rke-machine.cattle.io             2022-01-03T11:35:32Z
harvestermachinetemplates.rke-machine.cattle.io                 2022-01-03T11:35:32Z
bundles.fleet.cattle.io                                         2022-01-03T11:35:20Z
bundledeployments.fleet.cattle.io                               2022-01-03T11:36:37Z
bundlenamespacemappings.fleet.cattle.io                         2022-01-03T11:36:37Z
clustergroups.fleet.cattle.io                                   2022-01-03T11:36:37Z
clusters.fleet.cattle.io                                        2022-01-03T11:35:20Z
clusterregistrationtokens.fleet.cattle.io                       2022-01-03T11:36:37Z
gitrepos.fleet.cattle.io                                        2022-01-03T11:36:37Z
clusterregistrations.fleet.cattle.io                            2022-01-03T11:36:37Z
gitreporestrictions.fleet.cattle.io                             2022-01-03T11:36:37Z
contents.fleet.cattle.io                                        2022-01-03T11:36:37Z
imagescans.fleet.cattle.io                                      2022-01-03T11:36:37Z
gitjobs.gitjob.cattle.io                                        2022-01-03T11:36:37Z
components.dapr.io                                              2022-01-07T10:13:43Z
configurations.dapr.io                                          2022-01-07T10:13:44Z
subscriptions.dapr.io                                           2022-01-07T10:13:45Z
meshconfigs.config.openservicemesh.io                           2022-02-03T07:46:15Z
multiclusterservices.config.openservicemesh.io                  2022-02-03T07:46:15Z
egresses.policy.openservicemesh.io                              2022-02-03T07:46:15Z
trafficsplits.split.smi-spec.io                                 2022-02-03T07:46:15Z
tcproutes.specs.smi-spec.io                                     2022-02-03T07:46:15Z
ingressbackends.policy.openservicemesh.io                       2022-02-03T07:46:15Z
traffictargets.access.smi-spec.io                               2022-02-03T07:46:15Z
httproutegroups.specs.smi-spec.io                               2022-02-03T07:46:15Z

使用以下命令获取已安装的 SMI CRD 版本:

PS C:\Users\zsygz> osm mesh list

MESH NAME    MESH NAMESPACE   VERSION   ADDED NAMESPACES
osm-system   osm              v1.0.0

MESH NAME    MESH NAMESPACE   SMI SUPPORTED
osm-system   osm              HTTPRouteGroup:v1alpha4,TCPRoute:v1alpha4,TrafficSplit:v1alpha2,TrafficTarget:v1alpha3

To list the OSM controller pods for a mesh, please run the following command passing in the mesh's namespace
         kubectl get pods -n <osm-mesh-namespace> -l app=osm-controller

实践

下面我们来部署一个应用程序测试一下,OSM 强调的 Observable 的含义是什么 ——用户可以选择哪些应用程序(命名空间)应该在 OSM的管理范围,OSM 会监控那些不影响其他人的应用程序!

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

kubectl create namespace bookstore
kubectl create namespace bookbuyer
kubectl create namespace bookthief
kubectl create namespace bookwarehouse

osm namespace add bookstore --mesh-name=osm-system
osm namespace add bookbuyer --mesh-name=osm-system
osm namespace add bookthief --mesh-name=osm-system
osm namespace add bookwarehouse --mesh-name=osm-system

osm metrics enable --namespace bookstore
osm metrics enable --namespace bookbuyer
osm metrics enable --namespace bookthief
osm metrics enable --namespace bookwarehouse

现在,四个命名空间中的每一个都用 标记openservicemesh.io/monitored-by: osm和注释openservicemesh.io/sidecar-injection: enabled。OSM 控制器注意到这些命名空间上的标签和注释,将开始使用 Envoy sidecar 注入所有pod。

  • 部署实验应用程序

PS C:\Users\zsygz> kubectl apply -f https://raw.githubusercontent.com/openservicemesh/osm-docs/release-v1.0/manifests/apps/bookbuyer.yaml
serviceaccount/bookbuyer created
deployment.apps/bookbuyer created
PS C:\Users\zsygz> kubectl apply -f https://raw.githubusercontent.com/openservicemesh/osm-docs/release-v1.0/manifests/apps/bookthief.yaml
serviceaccount/bookthief created
deployment.apps/bookthief created
PS C:\Users\zsygz> kubectl apply -f https://raw.githubusercontent.com/openservicemesh/osm-docs/release-v1.0/manifests/apps/bookstore.yaml
service/bookstore created
serviceaccount/bookstore created
deployment.apps/bookstore created
PS C:\Users\zsygz> kubectl apply -f https://raw.githubusercontent.com/openservicemesh/osm-docs/release-v1.0/manifests/apps/bookwarehouse.yaml
serviceaccount/bookwarehouse created
service/bookwarehouse created
deployment.apps/bookwarehouse created
PS C:\Users\zsygz> kubectl apply -f https://raw.githubusercontent.com/openservicemesh/osm-docs/release-v1.0/manifests/apps/mysql.yaml
serviceaccount/mysql created
service/mysql created
statefulset.apps/mysql created

PS C:\Users\zsygz> kubectl apply -f https://raw.githubusercontent.com/openservicemesh/osm-docs/release-v1.0/manifests/apps/bookstore-v2.yaml
service/bookstore-v2 created
serviceaccount/bookstore-v2 created
deployment.apps/bookstore-v2 created
traffictarget.access.smi-spec.io/bookstore-v2 created

使用下列命令检查下安装的资源:

kubectl get pods,deployments,serviceaccounts -n bookbuyer
kubectl get pods,deployments,serviceaccounts -n bookthief

kubectl get pods,deployments,serviceaccounts,services,endpoints -n bookstore
kubectl get pods,deployments,serviceaccounts,services,endpoints -n bookwarehouse

9f328bb9b5d9147d39537b7bee14cc9c.png

实验里为每个应用程序创建了一个Kubernetes 服务帐户。服务帐户用作应用程序的身份,稍后将在演示中使用它来创建服务到服务的访问控制策略。

  • 本地访问

可以通过 kubectl port-foward 在本地对刚才部署的应用进行访问。我们也可以通过Rancher Desktop 来操作:

8db97ecff8ae66215a5322571da63ae9.png

访问 http://localhost:62300/  即可看到示例项目。例如:

7033e401953fc44d98bb3cd24a6a0adf.png

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

PS C:\Users\zsygz> osm dashboard --osm-namespace=osm
[+] Starting Dashboard forwarding
[+] Issuing open browser http://localhost:3000

Grafana 登录的默认用户名和密码是admin/admin。

899f652cfbf3cba84ecc68230a7370a3.png

  • 访问控制策略

一旦应用程序启动并运行,它们可以使用宽松流量策略模式或SMI 流量策略模式相互交互。在宽松流量策略模式下,应用服务之间的流量由 自动配置osm-controller,SMI Traffic Targets 定义的访问控制策略不强制执行。在 SMI 策略模式下,默认情况下所有流量都被拒绝,除非使用 SMI 访问和路由策略的组合明确允许。

前面我们安装osm 的时候指定的--set=osm.enablePermissiveTrafficPolicy=true 就是宽松流量策略模式。从而允许应用程序之间的连接,而不需要 SMI 流量访问策略。

kubectl edit meshconfig -n osm

将osm.enablePermissiveTrafficPolicy 改成false 保存,从而禁用宽松流量策略模式,启用SMI流量策略。

SMI 流量策略可用于以下方面:

  1. SMI 访问控制策略,用于授权服务身份之间的流量访问

  2. 用于定义路由规则以与访问控制策略相关联的 SMI 流量规范策略

  3. SMI 流量拆分策略可根据权重将客户端流量引导至多个后端

我们现在来部署 SMI TrafficTarget 和 HTTPRouteGroup 策略:

kubectl apply -f https://raw.githubusercontent.com/openservicemesh/osm-docs/release-v1.0/manifests/access/traffic-access-v1.yaml

kind: TrafficTarget
apiVersion: access.smi-spec.io/v1alpha3
metadata:name: bookstorenamespace: bookstore
spec:destination:kind: ServiceAccountname: bookstorenamespace: bookstorerules:- kind: HTTPRouteGroupname: bookstore-service-routesmatches:- buy-a-book- books-boughtsources:- kind: ServiceAccountname: bookbuyernamespace: bookbuyer
---
apiVersion: specs.smi-spec.io/v1alpha4
kind: HTTPRouteGroup
metadata:name: bookstore-service-routesnamespace: bookstore
spec:matches:- name: books-boughtpathRegex: /books-boughtmethods:- GETheaders:- "user-agent": ".*-http-client/*.*"- "client-app": "bookbuyer"- name: buy-a-bookpathRegex: ".*a-book.*new"methods:- GET
这里定义了两个 SMI 中的资源 TrafficTarget 和 HTTPRouteGroup ,用来控制入口流量,应用后将允许访问对应的服务。
清理
列出osm 扫描器下的所有命名空间
osm ns list --mesh-name=osm-system
从 OSM 扫描器中删除命名空间
osm namespace remove bookbuyer --mesh-name=osm-system
osm namespace remove bookstore --mesh-name=osm-system
osm namespace remove bookthief --mesh-name=osm-system
osm namespace remove bookwarehouse --mesh-name=osm-system重新部署 删除Envoy 边车
kubectl rollout restart deployment bookbuyer -n bookbuyer 
kubectl rollout restart deployment bookstore -n bookstore 
kubectl rollout restart deployment bookthief -n bookthief 
kubectl rollout restart deployment bookwarehouse -n bookwarehouse从k8s 集群里卸载osm
osm uninstall mesh --mesh-name=osm-system  --osm-namespace=osm

总结

Open Service Mesh 相对来说,确实非常的轻量。所需要的访问控制,流量切割等功能通过自己创建 SMI 资源来控制, Dapr 和 OSM 是非常好的一个实践多运行时架构的组合。

a64969ceaf7847eacfc7b7e584854354.png

参考资料

[1] 第一个候选版本: https://github.com/openservicemesh/osm/releases/tag/v1.0.0-rc.1

[2] 第一个1.0 正式版本: https://github.com/openservicemesh/osm/releases/tag/v1.0.0

[3] 文档网站: https://docs.openservicemesh.io/

[4] 通过Rancher Desktop在桌面上运行K8s :https://www.cnblogs.com/shanyou/p/15759035.html

[5] 设置OSM:https://release-v1-0.docs.openservicemesh.io/docs/getting_started/setup_osm/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/291902.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据流图的画法

数据流图的画法 数据流图也称为数据流程图date flow diagram , DFD&#xff0c;是一种便于用户理解和分析系统数据流程的图形工具&#xff0c;他摆脱了系统和详细内容&#xff0c;精确的在逻辑上描写叙述系统的功能、输入、输出和数据存储等&#xff0c;是系统逻辑模型的重要组…

MFC继承表

转载于:https://www.cnblogs.com/Lthis/p/4264967.html

linux之fdisk查看分区和mkfs.ext3删除分区和mount挂载和e2label添加卷标使用总结

一、使用fdisk、mkfs.ext3、和mount、e2lable的原因 有个分区挂载不上,然后需要格式化分区,还需要添加卷标 二、fdisk、mkfs.ext3、mount、e2lable命令介绍 1、fdisk命令介绍 1)、了解分区 分区是将一个硬盘驱动器分成若干个逻辑驱动器,分区是把硬盘连续的区块当做一个…

linux c之strncpy函数和strncmp函数最简单使用总结

1.原型声明&#xff1a; char * strncpy(char *dest,const char *src, size_t n); strncmp() 用来比较两个字符串的前n个字符&#xff0c;区分大小写&#xff0c;其原型为&#xff1a; int strncmp ( const char * str1, const char * str2, size_t n ); 若str1与str2的前n…

阻止你变现的,从来都不是开源许可证

文 | lola_chen出品 | OSC开源社区&#xff08;ID&#xff1a;oschina2013&#xff09;之前&#xff0c;《GPL 转闭源&#xff1f;法院判决&#xff1a;一日 GPL 终身 GPL》一文提出一个冷门却又重要的知识点&#xff1a;GPL 许可证之下的开源项目&#xff0c;可以分叉出来闭源…

03-递归

数据结构和算法 基于《算法图解》—Aditya Bhargava和《数据结构》—严蔚敏 第3章 递归 3.1 递归 假设在一堆嵌套的盒子里找钥匙&#xff0c;对比循环和递归。 使用循环解决&#xff1a; #使用while循环&#xff1a;只要盒子堆不是空&#xff0c;就从中取出一个盒子&#x…

linux c之提示format‘%d’ expects argument of type ‘int’, but argument 2 has type ‘long int’ [-Wformat

1、问题 有个long int data;我输出的时候printf("data is %d", data);出现下面警告 自己竟然不知道 长整型怎么打印出来&#xff0c;日了狗。 2、解决办法 md&#xff0c;m为指定的输出字段的宽度。如果数据的位数小于m&#xff0c;则左端补以空格&#xff0c;若大…

Asp.Net Core部署:早知道,还是docker!以及一点碎碎念

前言AspNetCore技术栈在我们团队里的使用也有一段时间了&#xff0c;之前的部署方式一直是本地编译之后上传可执行文件到服务器&#xff0c;使用supervisor来管理进程这种很原始的方式。参考之前的文章&#xff1a;Asp.Net Core学习笔记&#xff1a;&#xff08;五&#xff09;…

04-快速排序

数据结构和算法 基于《算法图解》—Aditya Bhargava 和《数据结构》—严蔚敏 第4章 快速排序 4.1 分而治之 divide and conquer , 简称D&C&#xff1a;一种著名的递归式问题解决方法。 例子1&#xff1a; 假设你是农场主&#xff0c;有一小块土地。要求将这块地均匀地分…

android studio no marked region found along edge Found along top edge

由于种种原因&#xff0c;导致9图已经不是9图格式了&#xff0c;但是在Eclipse里面不会报错&#xff0c;在android studio 里面会报错 Error:9-patch image D:\download\avatar-android-master\avatar-android-master\sample\src\main\res\drawable-hdpi\abc_list_divider_holo…

Linux下安装compsoer ,并使用composer安装laravel

为什么80%的码农都做不了架构师&#xff1f;>>> 1、composer安装 https://getcomposer.org/download/打开composer官网。根据提示linux下可以使用php安装。 php -r "copy(https://getcomposer.org/installer, composer-setup.php);" php -r "if (ha…

AspNetCore在docker部署时遇到一个小坑

哦吼之前刚说了尝试了使用docker来部署AspNetCore应用&#xff08;Asp.Net Core部署&#xff1a;早知道&#xff0c;还是docker!以及一点碎碎念&#xff09;&#xff0c;结果这才刚上班就遇到问题了 …我这项目用的数据库是Oracle&#xff0c;之前直接运行没啥问题&#xff0c;…

05-散列表

数据结构和算法 基于《算法图解》—Aditya Bhargava 和《数据结构》—严蔚敏 第5章 散列表 假设你在一家杂货店上班。有顾客来买东西时&#xff0c;你得到一个本子中查找价格。如果本子的内容不是按字母顺序来排序的&#xff0c;你可能为查找苹果价格而浏览每一页&#xff0c…

疯狂ios讲义疯狂连载之实现游戏逻辑(2)

13.6.5 定义获取通道的工具方法这里所谓的通道指的是一个方块上、下、左、右4个方向上的空白方块图13.10显示了一个方块四周的通道。图13.10 方块四周的通道下面是获取某个坐标点四周通道的4个方法。程序清单codes/13/Link/Link/sources/board/FKGameService.m13.6.6 没有转折点…

linux之进程间通信--使用信号

一、什么是信号用过Windows的我们都知道&#xff0c;当我们无法正常结束一个程序时&#xff0c;可以用任务管理器强制结束这个进程&#xff0c;但这其实是怎么实现的呢&#xff1f;同样的功能在Linux上是通过生成信号和捕获信号来实现的&#xff0c;运行中的进程捕获到这个信号…

解决Maven工程中报 Missing artifact jdk.tools:jdk.tools

2019独角兽企业重金招聘Python工程师标准>>> 解决方法&#xff1a; 在pom.xml中添加如下依赖&#xff1a; <dependency> <groupId>jdk.tools</groupId> <artifactId>jdk.tools</artifactId> <version>…

回到地球之后,这个男人创建了Ubuntu

文 | 大东出品 | OSC开源社区&#xff08;ID&#xff1a;oschina2013&#xff09;2002 年&#xff0c;莫斯科当地时间 4 月 25 日 9 时 26 分&#xff0c;满载着补给和 3 名宇航员的“联盟-TM 号”航天飞船在“联盟 U”火箭的推进下飞往国际空间站。同行的三人中&#xff0c;年…

Hadoop完全分子式环境搭建—问题及解决办法

Hadoop完全分布式环境搭建 ps:本人是按照尚硅谷的教程搭建的&#xff0c;版本hadoop2.7&#xff0c;centos版本6&#xff0c;一台主机&#xff0c;两台从机。 一&#xff0e;版本问题 1.尽量使用hadoop版本2&#xff0c;尽量不要使用最新版本3。因为会出现无法解决的问题&…

POJ 2135 最小费用最大流

思路&#xff1a; 源->1连费用0 流量2 其它的边 费用w 流量1 n->汇 费用0 流量2 最小费用流 搞定~ //By SiriusRen #include <queue> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; #define N 2010 #def…

06-广度优先搜索:图、队列

数据结构和算法 基于《算法图解》—Aditya Bhargava 和《数据结构》—严蔚敏 第6章广度优先搜索 6.1 简介 广度优先搜索—breadth-first search&#xff0c;BFS. 主要内容图和队列。 广度优先搜索能让你能够找出两样东西之间的最短距离&#xff0c;比如&#xff1a;编写国际跳…