体验 正式发布 的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。
自上次发布以来,osm
CLI 也有了一些改进。
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.enablePermissiveTrafficPolicy
chart 参数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:
上图是使用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 控制器将如下所示:
检查 OSM 注入程序Deployment、Pod 和服务
kubectl get deployment,pod,service -n osm --selector app=osm-injector
正常运行的 OSM 注入程序将如下所示:
检查 OSM 启动 Deployment、Pod 和服务
kubectl get deployment,pod,service -n osm --selector app=osm-bootstrap
检查验证 Webhook 和改变 Webhook
kubectl get ValidatingWebhookConfiguration --selector app=osm-controller
正常运行的 OSM 验证 Webhook 将如下所示:
检查改变 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
实验里为每个应用程序创建了一个Kubernetes 服务帐户。服务帐户用作应用程序的身份,稍后将在演示中使用它来创建服务到服务的访问控制策略。
本地访问
可以通过 kubectl port-foward
在本地对刚才部署的应用进行访问。我们也可以通过Rancher Desktop 来操作:
访问 http://localhost:62300/ 即可看到示例项目。例如:
通过 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。
访问控制策略
一旦应用程序启动并运行,它们可以使用宽松流量策略模式或SMI 流量策略模式相互交互。在宽松流量策略模式下,应用服务之间的流量由 自动配置osm-controller
,SMI Traffic Targets 定义的访问控制策略不强制执行。在 SMI 策略模式下,默认情况下所有流量都被拒绝,除非使用 SMI 访问和路由策略的组合明确允许。
前面我们安装osm 的时候指定的--set=osm.enablePermissiveTrafficPolicy=true 就是宽松流量策略模式。从而允许应用程序之间的连接,而不需要 SMI 流量访问策略。
kubectl edit meshconfig -n osm
将osm.enablePermissiveTrafficPolicy 改成false 保存,从而禁用宽松流量策略模式,启用SMI流量策略。
SMI 流量策略可用于以下方面:
- SMI 访问控制策略,用于授权服务身份之间的流量访问
- 用于定义路由规则以与访问控制策略相关联的 SMI 流量规范策略
- 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: bookstore
namespace: bookstore
spec:
destination:
kind: ServiceAccount
name: bookstore
namespace: bookstore
rules:
- kind: HTTPRouteGroup
name: bookstore-service-routes
matches:
- buy-a-book
- books-bought
sources:
- kind: ServiceAccount
name: bookbuyer
namespace: bookbuyer
---
apiVersion: specs.smi-spec.io/v1alpha4
kind: HTTPRouteGroup
metadata:
name: bookstore-service-routes
namespace: bookstore
spec:
matches:
- name: books-bought
pathRegex: /books-bought
methods:
- GET
headers:
- "user-agent": ".*-http-client/*.*"
- "client-app": "bookbuyer"
- name: buy-a-book
pathRegex: ".*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 是非常好的一个实践多运行时架构的组合。
参考资料
[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/
体验 正式发布 的OSM v1.0.0 版本的更多相关文章
- Kube-OVN v1.10.0:新增Windows节点支持,用户自定义子网ACL等10+硬核功能
在Kube-OVN社区小伙伴的共同努力下,Kube-OVN v1.10.0于五月份正式发布.Kube-OVN v1.10.0版本中,我们一如既往地对Kube-OVN 的功能.性能.稳定性和易用性进行了 ...
- DBA 的效率加速器——CloudQuery v1.3.0 上线!
好久不见! 自 CloudQuery v1.2.1 发布至今,已有月余,在此期间我们收到了很多朋友对 CloudQuery 的反馈和建议,很多朋友表达了对 v1.3.0 的期待,非常感谢. Cloud ...
- Volcano社区v1.6.0版本正式发布
摘要:Volcano社区v1.6.0版本正式发布.此次版本增加了弹性作业管理.基于真实负载的动态调度. 基于真实负载的重调度.Volcano Job插件--MPI等多个新特性. 本文分享自华为云社区& ...
- 浏览器端类EXCEL表格插件 - 智表ZCELL产品V1.0.0.1版本发布
智表的优势 智表兼容与依赖 ZCELL 基于jQuery V1.11.3版本研发,兼容性依赖于jQuery自身的兼容性. 经过验证,目前IE.火狐.谷歌.360等主流浏览器均可以正常使用. 智表下载 ...
- 【VIP视频网站项目】VIP视频网站项目v1.0.3版本发布啦(程序一键安装+电影后台自动抓取+代码结构调整)
在线体验地址:http://vip.52tech.tech/ GIthub源码:https://github.com/xiugangzhang/vip.github.io 项目预览 主页面 登录页面 ...
- Gitea v1.17.0 正式发布 | 集成软件包管理器、容器镜像仓库
我们自豪地宣布 Gitea v1.17.0 发布了.本次发布带来了诸多新特性和累积的更新,我们强烈建议用户在更新到最新版本之前仔细阅读发行注记. 在 1.17.0 版本的开发中我们一共合并了 645 ...
- Dapr v1.9.0 版本已发布
Dapr是一套开源.可移植的事件驱动型运行时,允许开发人员轻松立足云端与边缘位置运行弹性.微服务.无状态以及有状态等应用程序类型.Dapr能够确保开发人员专注于编写业务逻辑,而不必分神于解决分布式系统 ...
- 浏览器端类EXCEL表格插件 版本更新 - 智表ZCELL产品V1.1.0.1版本发布
智表(ZCELL),浏览器下纯JS表格控件,为您提供EXCEL般的智能体验! 纯国产化.高性价比的可靠解决方案. 更新说明 让大家久等了.因为最近忙其他项目,发布时间稍有延迟. 下次版本更新 ...
- 【开源】SpringBootNetty聊天室V1.2.0升级版本介绍
前言 SpringBoot!微服务微架构的基础,Netty通信框架的元老级别框架,即之前的SpringBoot与Netty的实现聊天室的功能后已经过了不到一周的时间啦,今天我们更新了项目版本从V1.0 ...
随机推荐
- Categorical Reparameterization with Gumbel-Softmax
目录 概 主要内容 Gumbel distribution Jang E., Gu S. and Poole B. Categorical reparameterization with gumbel ...
- 图片 Augmentation整理
目录 Augmentation Flipping 翻转 Grayscale Equalize 均衡直方图 Posterize 减少颜色通道位数 Cropping Rotation Translatio ...
- 解决vue生产环境app.js或vendor文件过大问题
1.去掉多余的库 将不必要的库卸载掉 npm uninstall xxx 举个例子:例如moment库文件是很大的,在前端可以用js的 new Date实现获取日期,或者可以其他库代替,也可以将mom ...
- 求区间内第一个大于等于x的数的下标
int tree[4*N]; void build(int o,int l,int r) { if(l==r) {cin>>tree[o];return;} build(ls,l,mid) ...
- 基于Spring MVC + Spring + MyBatis的【学生信息管理系统】
资源下载:https://download.csdn.net/download/weixin_44893902/45603211 练习点设计: 模糊查询.删除.新增 一.语言和环境 实现语言:JAVA ...
- visual studio code 修改工具栏风格
用windows版vscode的同学们是否发现它的工具栏是白色的跟整个界面看起来不太搭调,如下图: 其实要改变标题栏颜色也很简单,点击:文件> 首选项>设置 将 "window. ...
- MongoDB_安装、配置、连接(五)
MongoDB 是跨平台的,既可以在 Linux系统下安装,也可以在Windows 系统.MacOS系统下安装,本节主要介绍如何在 Linux 系统下安装 MongoDB. windows安装:htt ...
- Python_多任务:进程、线程、协程
进程 进程是一个具有一定独立功能的程序在一个数据集上的一次动态执行的过程,是操作系统进行资源分配和调度的一个独立单位,是应用程序运行的载体.进程是一种抽象的概念,从来没有统一的标准定义.进程一般由程序 ...
- unittest+ddt_实现数据驱动测试(7)
我们设计测试用例时,会出现测试步骤一样,只是其中的测试数据有变化的情况,比如测试登录时的账号密码.这个时候,如果我们依然使用一条case一个方法的话,会出现大量的代码冗余,而且效率也会大大降低.此时, ...
- Java带包结构调用命令行运行编译
原文: https://www.toutiao.com/i6491809562037846542/ 带包结构调用命令行运行编译. 记事本编写两个简单的类 文件结构目录 启动DOS,进入文件所在目录 分 ...