你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
警告
Microsoft已于 2027 年 9 月 30 日宣布停用 AKS 开放服务网格(OSM)加载项 。 上游 OSM 项目也已由 Cloud Native Computing Foundation (CNCF) 停用。 识别任何现有的 OSM 配置,并将其迁移到等效的 OSS Istio 配置。
Open Service Mesh (OSM) 是一种轻型、可扩展的云原生服务网格,可让用户统一地管理、保护和获取高度动态微服务环境现成的可观测性功能。
OSM 在 Kubernetes 上运行基于 Envoy 的控制平面,可以使用 SMI API 进行配置,并通过将 Envoy 代理作为挎斗容器注入到每个应用程序实例旁边来运行。 详细了解 Open Service Mesh 实现的服务网格方案。
已启用 Azure Arc 的 OSM 的所有组件都部署在可用性区域中,使其区域冗余。
安装选项和要求
已启用 Azure Arc 的 Open Service Mesh 可以通过 Azure 门户、Azure CLI、ARM 模板或内置 Azure 策略进行部署。
Prerequisites
- 确保满足此处列出的所有一般群集扩展先决条件。
- 使用
az k8s-extensionCLI 扩展版本 >= v1.0.4
当前的支持限制
- 在一个已连接到 Azure Arc 的 Kubernetes 群集上,只能部署一个 Open Service Mesh 实例。
- 支持已启用 Arc 的开放式服务网格的两个最新发布的次要版本。
- AKS(Azure Kubernetes 服务)引擎
- Azure Local 上的 AKS 群集
- Azure Arc 启用的 AKS
- 群集 API Azure
- Google Kubernetes 引擎
- Canonical Kubernetes 发行版
- Rancher Kubernetes 引擎
- OpenShift Kubernetes 发行版
- Amazon Elastic Kubernetes 服务
- VMware Tanzu Kubernetes 网格
- 在预览版中,可以将 Azure Monitor 与已启用 Azure Arc 的 Open Service Mesh 相集成,但支持将受到限制。
使用 Azure 门户进行基本安装
若要在 Azure 门户中部署 Open Service Mesh,请导航到已启用 Arc 的 Kubernetes 群集。 在服务菜单中的 “设置”下,选择“ 打开服务网格”。
选择“安装扩展程序”按钮以部署最新版本的扩展程序。
或者,也可以使用下面捕获的 CLI 体验。 若要了解大规模载入,请阅读本文中关于使用 ARM 模板和 Azure Policy 进行部署的详细信息。
使用 Azure CLI 进行基本安装
以下步骤假定你已有一个群集,其中包含连接到 Azure Arc 的受支持的 Kubernetes 分发。确保 KUBECONFIG 环境变量指向启用了 Arc 的 Kubernetes 群集的 kubeconfig。
设置环境变量:
export CLUSTER_NAME=<arc-cluster-name>
export RESOURCE_GROUP=<resource-group-name>
如果使用 OpenShift 群集,请跳到 OpenShift 安装步骤。
创建扩展:
注意
要固定特定版本的 OSM,请将--version x.y.z标志添加到create命令。 请注意,此命令将值 auto-upgrade-minor-version 设置为 false。
az k8s-extension create --cluster-name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --cluster-type connectedClusters --extension-type Microsoft.openservicemesh --scope cluster --name osm
应该会看到如此示例类似的输出。 将实际 OSM Helm 图表部署到群集可能需要 3-5 分钟。 在进行此部署之前, installState 仍保留 Pending。
{
"autoUpgradeMinorVersion": true,
"configurationSettings": {},
"creationTime": "2021-04-29T17:50:11.4116524+00:00",
"errorInfo": {
"code": null,
"message": null
},
"extensionType": "microsoft.openservicemesh",
"id": "/subscriptions/<subscription-id>/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.Kubernetes/connectedClusters/$CLUSTER_NAME/providers/Microsoft.KubernetesConfiguration/extensions/osm",
"identity": null,
"installState": "Pending",
"lastModifiedTime": "2021-04-29T17:50:11.4116525+00:00",
"lastStatusTime": null,
"location": null,
"name": "osm",
"releaseTrain": "stable",
"resourceGroup": "$RESOURCE_GROUP",
"scope": {
"cluster": {
"releaseNamespace": "arc-osm-system"
},
"namespace": null
},
"statuses": [],
"type": "Microsoft.KubernetesConfiguration/extensions",
"version": "x.y.z"
}
接下来,验证安装。
自定义安装
以下各节介绍了已启用 Azure Arc 的 OSM 的某些自定义安装。 自定义安装需要在 JSON 文件中设置 OSM 值并将其传递到 k8s-extension create CLI 命令中。
在 OpenShift 群集上安装 OSM
将以下内容复制并保存到 JSON 文件中。 如果已创建配置设置文件,请将以下行添加到现有文件,以保留以前的更改。
{ "osm.osm.enablePrivilegedInitContainer": "true" }将特权安全上下文约束添加到网格中应用程序的每个服务帐户。
oc adm policy add-scc-to-user privileged -z <service account name> -n <service account namespace>
将实际 OSM Helm 图表部署到群集可能需要 3-5 分钟。 在进行此部署之前, installState 仍保留 Pending。
为确保不会将特权 init 容器设置还原为默认设置,请在所有后续 "osm.osm.enablePrivilegedInitContainer" : "true" 命令中传入 az k8s-extension create 配置设置。
在安装时启用高可用性功能
OSM 的控制平面组件在构建时考虑了高可用性和容错。 本部分介绍如何在安装过程中启用水平 Pod 自动缩放 (HPA) 和 Pod 中断预算 (PDB)。 详细了解 OSM 上高可用性的设计注意事项。
水平 Pod 自动缩放 (HPA)
HPA 根据用户定义的平均目标 CPU 使用率 (%) 和平均目标内存利用率 (%) 自动增加或减少控制平面 Pod。 若要在安装期间在 OSM 控制平面 Pod 上启用 HPA 并设置适用的值,请创建或追加到现有的 JSON 设置文件(如下所示),并为每个要启用 HPA 的控制平面 pod(osmController、injector)重复键/值对。
{
"osm.osm.<control_plane_pod>.autoScale.enable" : "true",
"osm.osm.<control_plane_pod>.autoScale.minReplicas" : "<allowed values: 1-10>",
"osm.osm.<control_plane_pod>.autoScale.maxReplicas" : "<allowed values: 1-10>",
"osm.osm.<control_plane_pod>.autoScale.cpu.targetAverageUtilization" : "<allowed values 0-100>",
"osm.osm.<control_plane_pod>.autoScale.memory.targetAverageUtilization" : "<allowed values 0-100>"
}
现在,用自定义值安装 OSM。
Pod 中断预算 (PDB)
为了防止在计划中断期间发生中断,控制平面 Pod osm-controller 和 osm-injector 具有 PDB,可确保始终至少有 1 个对应于每个控制平面应用程序的 Pod。
若要启用 PDB,请为每个所需的控制平面 pod(osmController、injector)创建或追加到现有 JSON 设置文件,如下所示:
{
"osm.osm.<control_plane_pod>.enablePodDisruptionBudget" : "true"
}
现在,用自定义值安装 OSM。
安装带有 cert-manager 的 OSM 以便管理证书
cert-manager 是一种提供程序,可用于将签名证书颁发给 OSM,而无需在 Kubernetes 中存储私钥。 有关详细信息,请参阅 OSM 的 cert-manager 文档和演示。
注意
请谨慎使用 OSM GitHub 文档中提供的命令。 请确保在命令中使用正确的命名空间或使用标志 --osm-namespace arc-osm-system 指定命名空间。
若要使用证书管理器作为证书提供程序安装 OSM,请创建或追加到现有的 JSON 设置文件,将 certificateProvider.kind 值设置为证书管理器,如下所示。 要改变 OSM 文档中指定的默认 cert-manager 值,还应加入并更新后续 certmanager.issuer 行。
{
"osm.osm.certificateProvider.kind" : "cert-manager",
"osm.osm.certmanager.issuerName" : "<issuer name>",
"osm.osm.certmanager.issuerKind" : "<issuer kind>",
"osm.osm.certmanager.issuerGroup" : "<issuer group>"
}
现在,用自定义值安装 OSM。
安装带 Contour 的 OSM 以实现 Ingress
OSM 提供了多个选项,用于在外部使用 Ingress 公开网格服务。 OSM 可以使用 Contour,它可与在网格外部安装的入口控制器一同工作,并支持使用证书进行预配以参与网格。 有关详细信息,请参阅 OSM 的 Ingress 文档和演示。
注意
请谨慎使用 OSM GitHub 文档中提供的命令。 请确保在命令中使用正确的命名空间或使用标志 --osm-namespace arc-osm-system 指定命名空间。
若要设置在 OSM 安装期间配置 Contour 所需的值,请向 JSON 设置文件追加以下内容:
{
"osm.osm.osmNamespace" : "arc-osm-system",
"osm.contour.enabled" : "true",
"osm.contour.configInline.tls.envoy-client-certificate.name" : "osm-contour-envoy-client-cert",
"osm.contour.configInline.tls.envoy-client-certificate.namespace" : "arc-osm-system"
}
在 OSM 安装过程中设置值
需将需要在 OSM 安装过程中设置的任何值保存到单个 JSON 文件中,并通过 Azure CLI 安装命令加以传入。
创建具有适用值的 JSON 文件(如“自定义安装”部分所述)后,请将文件路径设置为环境变量:
export SETTINGS_FILE=<json-file-path>
运行 az k8s-extension create 命令以创建 OSM 扩展,并使用 --configuration-settings-file 标记传入设置文件:
az k8s-extension create --cluster-name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --cluster-type connectedClusters --extension-type Microsoft.openservicemesh --scope cluster --name osm --configuration-settings-file $SETTINGS_FILE
使用 ARM 模板安装已启用 Azure Arc 的 OSM
将群集连接到 Azure Arc 后,创建采用以下格式的 JSON 文件,并确保更新<cluster-name>和<osm-arc-version>值:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"ConnectedClusterName": {
"defaultValue": "<cluster-name>",
"type": "String",
"metadata": {
"description": "The Connected Cluster name."
}
},
"ExtensionInstanceName": {
"defaultValue": "osm",
"type": "String",
"metadata": {
"description": "The extension instance name."
}
},
"ExtensionVersion": {
"defaultValue": "<osm-arc-version>",
"type": "String",
"metadata": {
"description": "The extension type version."
}
},
"ExtensionType": {
"defaultValue": "Microsoft.openservicemesh",
"type": "String",
"metadata": {
"description": "The extension type."
}
},
"ReleaseTrain": {
"defaultValue": "Stable",
"type": "String",
"metadata": {
"description": "The release train."
}
}
},
"functions": [],
"resources": [
{
"type": "Microsoft.KubernetesConfiguration/extensions",
"apiVersion": "2020-07-01-preview",
"name": "[parameters('ExtensionInstanceName')]",
"properties": {
"extensionType": "[parameters('ExtensionType')]",
"releaseTrain": "[parameters('ReleaseTrain')]",
"version": "[parameters('ExtensionVersion')]"
},
"scope": "[concat('Microsoft.Kubernetes/connectedClusters/', parameters('ConnectedClusterName'))]"
}
]
}
设置环境变量:
export TEMPLATE_FILE_NAME=<template-file-path>
export DEPLOYMENT_NAME=<desired-deployment-name>
运行以下命令以安装 OSM 扩展:
az deployment group create --name $DEPLOYMENT_NAME --resource-group $RESOURCE_GROUP --template-file $TEMPLATE_FILE_NAME
现在,应该可以查看 OSM 资源并在群集中使用 OSM 扩展。
使用内置策略安装已启用 Azure Arc 的 OSM
在 Azure 门户的Kubernetes类别下,有一个内置策略:已启用 Azure Arc 的 Kubernetes 群集应安装 Open Service Mesh 扩展。 可以在订阅或资源组的范围内分配此策略。
此策略的默认操作为“如果不存在则部署”。 但是,可以选择通过在分配期间更改参数来审核群集的扩展安装。 系统还会提示你指定要安装的版本(v1.0.0-1 或更高版本)作为参数。
验证安装
运行以下命令。
az k8s-extension show --cluster-type connectedClusters --cluster-name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --name osm
JSON 输出应如以下所示:
{
"autoUpgradeMinorVersion": true,
"configurationSettings": {},
"creationTime": "2021-04-29T19:22:00.7649729+00:00",
"errorInfo": {
"code": null,
"message": null
},
"extensionType": "microsoft.openservicemesh",
"id": "/subscriptions/<subscription-id>/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.Kubernetes/connectedClusters/$CLUSTER_NAME/providers/Microsoft.KubernetesConfiguration/extensions/osm",
"identity": null,
"installState": "Installed",
"lastModifiedTime": "2021-04-29T19:22:00.7649731+00:00",
"lastStatusTime": "2021-04-29T19:23:27.642+00:00",
"location": null,
"name": "osm",
"releaseTrain": "stable",
"resourceGroup": "$RESOURCE_GROUP",
"scope": {
"cluster": {
"releaseNamespace": "arc-osm-system"
},
"namespace": null
},
"statuses": [],
"type": "Microsoft.KubernetesConfiguration/extensions",
"version": "x.y.z"
}
有关可用于验证群集上的 Open Service Mesh (OSM) 扩展组件的部署并对其进行故障排除的更多命令,请参阅故障排除指南
OSM 控制器配置
OSM 在osm-mesh-config命名空间中部署 MeshConfig 资源arc-osm-system作为其控制平面的一部分。 此 MeshConfig 的目的是使网格所有者/操作员能够根据其需求更新某些网格配置。 要查看默认值,请使用以下命令。
kubectl describe meshconfig osm-mesh-config -n arc-osm-system
输出显示默认值:
Certificate:
Cert Key Bit Size: 2048
Service Cert Validity Duration: 24h
Feature Flags:
Enable Async Proxy Service Mapping: false
Enable Egress Policy: true
Enable Envoy Active Health Checks: false
Enable Ingress Backend Policy: true
Enable Multicluster Mode: false
Enable Retry Policy: false
Enable Snapshot Cache Mode: false
Enable WASM Stats: true
Observability:
Enable Debug Server: false
Osm Log Level: info
Tracing:
Enable: false
Sidecar:
Config Resync Interval: 0s
Enable Privileged Init Container: false
Log Level: error
Resources:
Traffic:
Enable Egress: false
Enable Permissive Traffic Policy Mode: true
Inbound External Authorization:
Enable: false
Failure Mode Allow: false
Stat Prefix: inboundExtAuthz
Timeout: 1s
Inbound Port Exclusion List:
Outbound IP Range Exclusion List:
Outbound Port Exclusion List:
有关详细信息,请参阅 Config API 参考。 请注意,spec.traffic.enablePermissiveTrafficPolicyMode 设置为 true。 当 OSM 处于宽松流量策略模式时,系统会绕过 SMI 流量策略强制执行。 在此模式下,OSM 会自动发现属于服务网格一部分的服务,并在每个 Envoy 代理挎斗上对流量策略规则进行编程,以便能够与这些服务通信。
通过从群集的 Open Service Mesh 窗格中选择“编辑配置”,也可以在 Azure 门户中查看 osm-mesh-config。
对 OSM 控制器配置进行更改
注意
MeshConfig osm-mesh-config 中的值在升级过程中保持不变。
可以使用 osm-mesh-config 命令对 kubectl patch 进行更改。 在以下示例中,宽松流量策略模式更改为了 false。
kubectl patch meshconfig osm-mesh-config -n arc-osm-system -p '{"spec":{"traffic":{"enablePermissiveTrafficPolicyMode":false}}}' --type=merge
如果使用了不正确的值,则 MeshConfig CRD 上的验证将阻止更改并显示一条错误消息,说明值无效的原因。 例如,此命令显示了将 enableEgress 修补为非布尔值时会发生的情况:
kubectl patch meshconfig osm-mesh-config -n arc-osm-system -p '{"spec":{"traffic":{"enableEgress":"no"}}}' --type=merge
# Validations on the CRD will deny this change
The MeshConfig "osm-mesh-config" is invalid: spec.traffic.enableEgress: Invalid value: "string": spec.traffic.enableEgress in body must be of type boolean: "string"
或者,若要在 Azure 门户中编辑 osm-mesh-config ,请从群集的“打开服务网格”窗格中选择 “编辑配置 ”。 进行所需的更改,然后选择“ 查看 + 保存”。
使用支持 Azure Arc 的 OSM
若要开始使用 OSM 功能,首先需要将应用程序命名空间加入服务网格。 从OSM GitHub 版本页下载 OSM CLI。 将命名空间添加到网格后,可以配置 SMI 策略以实现所需的 OSM 功能。
将命名空间加入服务网格
运行以下命令将命名空间添加到网格:
osm namespace add <namespace_name>
若要在 Azure 门户中加入命名空间,请从群集的“打开服务网格”窗格中选择“ 添加 ”,然后选择所需的命名空间。
有关载入服务的详细信息,请参阅Open Service Mesh 文档。
为 OSM 配置服务网格接口 (SMI) 策略
可以从某个示例应用程序着手,或者使用测试环境来试用 SMI 策略。
注意
如果使用示例应用程序,请确保其版本与群集上安装的 OSM 扩展的版本匹配。 例如,如果使用的是 OSM 扩展 v1.0.0,请使用 OSM 上游存储库的 release-v1.0 分支中的 bookstore 清单。
配置自己的 Jaeger、Prometheus 和 Grafana 实例
OSM 扩展不会安装附加产品,如 Jaeger、Prometheus、Grafana 和 Flagger。 你可以改为将 OSM 与自己的正在运行的工具实例集成。 若要与你自己的实例集成,请查看以下文档:
注意
请谨慎使用 OSM GitHub 文档中提供的命令。 对 arc-osm-system 进行更改时,请确保使用正确的命名空间名称 osm-mesh-config。
使用 Azure Monitor 和 Applications Insights 监视应用程序(预览版)
Azure Monitor 和 Azure Application Insights 都提供用于收集、分析和处理来自云环境与本地环境的遥测数据的综合解决方案,可帮助你将应用程序和服务的可用性和性能最大化。 已启用 Azure Arc 的 Open Service Mesh 已深入集成到这两个 Azure 服务中。 此集成提供无缝的 Azure 体验,用于查看和响应 OSM 指标提供的关键 KPI。
重要说明
已启用 Azure Arc 的 Kubernetes 预览功能是可选择启用的自助功能。 预览版是“按原样”和“按可用”提供的,并且未包含在服务级别协议和有限保修中。 客户支持部门会尽力为已启用 Azure Arc 的 Kubernetes 预览功能提供部分支持。
按照以下步骤允许 Azure Monitor 抓取 prometheus 终结点以收集应用程序指标。
遵循此处可用的指南,确保要监视的应用程序命名空间已加入到网格。
公开应用程序命名空间的 prometheus 终结点。
osm metrics enable --namespace <namespace1> osm metrics enable --namespace <namespace2>参考此处提供的指导安装 Azure Monitor 扩展。
在
kube-system命名空间中创建一个 Configmap,让 Azure Monitor 可以监视命名空间。 例如,使用以下内容创建container-azm-ms-osmconfig.yaml来监视<namespace1>和<namespace2>:kind: ConfigMap apiVersion: v1 data: schema-version: v1 config-version: ver1 osm-metric-collection-configuration: |- # OSM metric collection settings [osm_metric_collection_configuration] [osm_metric_collection_configuration.settings] # Namespaces to monitor monitor_namespaces = ["<namespace1>", "<namespace2>"] metadata: name: container-azm-ms-osmconfig namespace: kube-system运行以下 kubectl 命令
kubectl apply -f container-azm-ms-osmconfig.yaml
最长可能需要在 15 分钟后,指标才会显示在 Log Analytics 中。 可以尝试查询 InsightsMetrics 表。
InsightsMetrics
| where Name contains "envoy"
| extend t=parse_json(Tags)
| where t.app == "namespace1"
查看 OSM 工作簿
- 使用此 链接访问 Azure 门户,然后导航到 Arc 连接的 Kubernetes 群集。
- 转到 Azure Monitor,导航到“报告”选项卡以访问 OSM 工作簿。
- 选择一个时间范围和命名空间来限定服务的范围。
“请求”选项卡
请求选项卡显示通过 OSM 中的服务间通信发送的所有 HTTP 请求的摘要。
- 可以通过在网格中选择服务来查看所有服务。
- 可以查看请求总数、请求错误率和 P90 延迟。
- 可以向下钻取到目标,并查看 HTTP 错误/成功代码、成功率、Pod 资源利用率和以不同百分位表示的延迟的趋势。
“连接”选项卡
连接选项卡显示 Open Service Mesh 中服务间所有连接的摘要。
- 出站连接:源与目标服务之间的连接总数。
- 出站活动连接:所选时间范围内源与目标之间的活动连接的上次计数。
- 出站失败连接:源与目标服务之间的失败连接总数。
升级到指定版本的 OSM
在升级期间,控制平面可能会停机一段时间。 数据平面仅在 CRD 升级期间受影响。
支持的升级
OSM 扩展可以在次要版本和主要版本之间手动升级。 然而,自动升级(如果启用)仅适用于次要版本。
手动升级到指定 OSM 版本
以下命令可将 OSM-Arc 扩展升级到指定版本:
az k8s-extension update --cluster-name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --cluster-type connectedClusters --release-train stable --name osm --version x.y.z
启用自动升级
如果未默认启用自动升级,可以运行以下命令来启用它们。 通过运行在--auto-upgrade-minor-version步骤详述的 az k8s-extension show 命令来验证 的当前值。
az k8s-extension update --cluster-name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --cluster-type connectedClusters --release-train stable --name osm --auto-upgrade-minor-version true
卸载启用了 Azure Arc 的 OSM
使用以下命令:
az k8s-extension delete --cluster-type connectedClusters --cluster-name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --name osm -y
验证扩展实例是否已删除:
az k8s-extension list --cluster-type connectedClusters --cluster-name $CLUSTER_NAME --resource-group $RESOURCE_GROUP
此输出不应包含 OSM。 如果群集上没有安装任何其他扩展,它只是一个空数组。
使用 az k8s-extension 命令删除 OSM 扩展时, arc-osm-system 不会删除命名空间。 命名空间内的实际资源(如改变 Webhook 配置和 osm-controller pod)需要大约 10 分钟才能删除。
注意
使用 az k8s-extension CLI 卸载由 Arc 管理的 OSM 组件。Arc 不支持使用 OSM CLI 进行卸载,可能会导致不良行为。
后续步骤
- 想尝试一下吗? 使用群集 API 快速开始实现 Azure Arc Jumpstart 方案。
- 获取已启用 Azure Arc 的 OSM 的故障排除帮助。
- 探索已启用 Arc 的 Kubernetes的其他扩展。