已啟用 Azure Arc 的 Open Service Mesh
Open Service Mesh (OSM) 是一種輕量型、可延伸的雲端原生服務網格,可讓使用者為高動態的微服務環境,統一管理、保護及取得現成的可檢視性功能。
OSM 會在 Kubernetes 上執行 Envoy 型的控制平面,它可以使用 SMI API 來設定,並透過將 Envoy 代理程式作為 Sidecar 容器注入到應用程式的每個執行個體旁邊來運作。 深入閱讀有關 Open Service Mesh 所啟用的服務網格案例的詳細資訊。
已啟用 Azure Arc 的 OSM 的所有元件都會部署在可用性區域上,使其具有區域備援性。
安裝選項和需求
已啟用 Azure Arc 的 Open Service Mesh 可以透過 Azure 入口網站、Azure CLI、ARM 範本或內建的 Azure 原則來部署。
必要條件
- 請確定您已符合這裡所列的叢集擴充功能通用必要條件。
- 使用
az k8s-extension
CLI 延伸模組版本 >= v1.0.4
目前的支援限制
- 只有一個 Open Service Mesh 執行個體可以部署在與 Azure Arc 連線的 Kubernetes 叢集上。
- 支援可用於兩個最近發行的已啟用 Arc 的 Open Service Mesh 次要版本。 請在這裡尋找最新的版本。 支援的發行版本附有注意事項。 會忽略與中繼版本相關聯的標記。
- 目前支援下列 Kubernetes 散發套件:
- AKS (Azure Kubernetes Service) 引擎
- Azure Stack HCI 上的 AKS 叢集
- 由 Azure Arc 啟用的 AKS
- 叢集 API Azure
- Google Kubernetes Engine
- Canonical Kubernetes 散發套件
- Rancher Kubernetes Engine
- OpenShift Kubernetes 散發套件
- Amazon Elastic Kubernetes Service
- VMware Tanzu Kubernetes Grid
- Azure 監視器與已啟用 Azure Arc 的 Open Service Mesh 的整合現已推出預覽版,但支援有限。
使用 Azure 入口網站進行基本安裝
若要使用 Azure 入口網站進行部署 (一旦您擁有 Arc 連線的叢集),請移至叢集的 Open Service Mesh 區段。
選取 [安裝延伸模組] 按鈕,以部署最新版的延伸模組。
或者,您也可以使用這裡所擷取的 CLI 體驗。 對於大規模上線,請進一步閱讀本文中有關使用 ARM 範本和使用 Azure 原則部署的文章。
使用 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
命令中。
在 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 的控制平面元件在建置時考慮了高可用性和容錯。 本節說明如何在安裝期間啟用 Horizontal Pod Autoscaling (HPA) 和 Pod Disruption Budget (PDB)。 深入閱讀有關 OSM 上高可用性的設計考量事項。
Horizontal Pod Autoscaling (HPA)
HPA 會根據使用者定義的平均目標 CPU 使用率 (%) 和平均目標記憶體使用率 (%) 來自動向上或向下調整控制平面 Pod 的規模。 若要在安裝期間啟用 HPA 並在 OSM 控制平面 Pod 上設定適用的值,請如下所示建立或附加到現有的 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 Disruption Budget (PDB)
為了防止在計劃停機期間發生中斷情況,控制平面 Pod osm-controller
和 osm-injector
具有一個 PDB,可確保始終至少有一個 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
進行指定。
若要安裝含 cert-manager (作為憑證提供者) 的 OSM,請如下所示建立或附加到現有的 JSON 設定文件,並將 certificateProvider.kind
值設為 cert-manager。 若要變更 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 以進行輸入
OSM 提供了多種選項來使用輸入 (ingress) 向外部公開網格服務。 OSM 可以使用 Contour,它會與安裝在網格外部的輸入 (ingress) 控制器配合使用,並佈建了憑證以加入網格。 請參閱 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 會在 arc-osm-system
命名空間中部署 MeshConfig 資源 osm-mesh-config
作為其控制平面的一部分。 此 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 Proxy 側車上的流量原則規則進行程式設計,以便與這些服務進行通訊。
您也可以在 Azure 入口網站中,並在叢集的 Open Service Mesh 區段中選取 [編輯組態] 來檢視 osm-mesh-config
。
對 OSM 控制器設定進行變更
注意
MeshConfig osm-mesh-config
中的值在升級之間會保存。
您可以使用 kubectl patch
命令來對 osm-mesh-config
進行變更。 在下面的範例中,寬鬆的流量原則模式 (Permissive Traffic Policy Mode) 已變更為 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
,請在叢集的 [Open Service Mesh] 區段中選取 [編輯組態]。
使用已啟用 Azure Arc 的 OSM
若要開始使用 OSM 功能,您必須先將應用程式命名空間加入到服務網格。 從 OSM GitHub 發行頁面下載 OSM CLI。 將命名空間新增至網格之後,您可以設定 SMI 原則以實現所需的 OSM 功能。
將命名空間加入到服務網格
執行下列命令,將命名空間新增至網格:
osm namespace add <namespace_name>
您也可以從 Azure 入口網站,並在叢集的 [Open Service Mesh] 區段中選取 [+新增] 來加入命名空間。
如需加入服務的詳細資訊,請參閱 Open Service Mesh 文件 (英文)。
使用 Service Mesh Interface (SMI) 原則來設定 OSM
您可以從範例應用程式開始或使用您的測試環境來嘗試使用 SMI 原則。
注意
如果您使用範例應用程式,請確定其版本符合您的叢集上所安裝的 OSM 延伸模組版本。 例如,如果您使用 v1.0.0 的 OSM 延伸模組,請使用 OSM 上游存放庫的 release-v1.0 分支中的 bookstore 資訊清單。
設定您自己的 Jaeger、Prometheus 和 Grafana 執行個體
OSM 延伸模組不會安裝 Jaeger、Prometheus、Grafana 和 Flagger 等附加元件。 您可以改為將 OSM 與您自己執行中的這些工具執行個體整合。 若要與您自己的執行個體整合,請參閱以下文件:
- BYO-Jaeger 執行個體 (英文)
- BYO-Prometheus 執行個體 (英文)
- BYO-Grafana 儀表板 (英文)
- 使用 Flagger 的 OSM 漸進式交付 (英文)
注意
請謹慎使用 OSM GitHub 文件中所提供的命令。 確保在變更 osm-mesh-config
時使用正確的命名空間名稱 arc-osm-system
。
使用 Azure 監視器與 Applications Insights 來監視應用程式 (預覽)
Azure 監視器和 Azure Application Insights 提供從雲端和內部部署環境收集、分析遙測資料並採取行動的全面解決方案,協助您最大限度地提高應用程式和服務的可用性和效能。 已啟用 Azure Arc 的 Open Service Mesh 已深度整合到這兩個 Azure 服務中。 此整合提供了無縫的 Azure 體驗,用於檢視和回應 OSM 計量所提供的重要 KPI。
重要
已啟用 Azure Arc 的 Kubernetes 預覽功能可在自助服務選擇基礎上取得。 預覽會以「現狀」和「可供使用時」提供,其其不受服務等級協定和有限瑕疵擔保所保護。 客戶支援部門會盡最大努力,支援部分已啟用 Azure Arc 的 Kubernetes 預覽功能。
請遵循下列步驟執行,讓 Azure 監視器抓取 Prometheus 端點以收集應用程式計量。
請依照這裡所提供的指引進行,以確保您希望監視的應用程式命名空間已加入網格中。
公開應用程式命名空間的 Prometheus 端點。
osm metrics enable --namespace <namespace1> osm metrics enable --namespace <namespace2>
使用這裡所提供的指引來安裝 Azure 監視器延伸模組。
在
kube-system
命名空間中建立 Configmap,以便 Azure 監視器監視命名空間。 例如,使用下列內容建立一個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 儀表板
- 使用此連結來存取您的 Arc 連線的 Kubernetes 叢集。
- 移至 Azure 監視器,然後瀏覽至 [報告] 索引標籤以存取 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
啟用自動升級
如果預設未啟用自動升級,可以執行以下命令來啟用它們。 您可以執行 az k8s-extension show
命令來驗證 --auto-upgrade-minor-version
目前的值,如驗證安裝步驟中所述。
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 的疑難排解說明。