你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
在 Azure Kubernetes 服务 (AKS) 上集成 Open Service Mesh
OPEN Service Mesh (OSM) 加载项集成了 Azure 以及一些开源项目提供的功能。
注意
云原生计算基金会 (CNCF) 的 Open Service Mesh (OSM) 停用后,我们建议识别 OSM 配置并将其迁移到等效的 Istio 配置。 有关从 OSM 迁移到 Istio 的信息,请参阅将 Open Service Mesh (OSM) 配置迁移到 Istio 的指南。
重要
与开源项目的集成不在 AKS 支持策略的涵盖范围内。
流入量
入口允许将网格外部的流量路由到网格中的服务。 使用 OSM,可以配置大多数入口解决方案以使用网格,但 OSM 最适合以下其中一款解决方案:
注意
此时,Azure 网关入口控制器 (AGIC) 仅适用于 HTTP 后端。 如果配置 OSM 来使用 AGIC,AGIC 不会用于 HTTPS 和 mTLS 等其他后端。
将 Azure 网关入口控制器 (AGIC) 与用于 HTTP 流入量的 OSM 附加产品配合使用
重要
无法为 HTTPS 流入量配置 Azure 网关入口控制器 (AGIC)。
创建命名空间并部署应用程序服务
安装 AGIC 入口控制器。
使用“
kubectl create ns
”命令为应用程序服务创建命名空间。kubectl create ns httpbin
使用“
osm namespace add
”OSM CLI 命令将命名空间添加到网格。osm namespace add httpbin
使用“
kubectl apply
”命令将应用程序服务部署到命名空间。export RELEASE_BRANCH=release-v1.2 kubectl apply -f https://raw.githubusercontent.com/openservicemesh/osm-docs/$RELEASE_BRANCH/manifests/samples/httpbin/httpbin.yaml -n httpbin
使用“
kubectl get pods
”命令验证 Pod 是否已启动并运行,以及是否已注入 Envoy Sidecar。kubectl get pods -n httpbin
输出应类似于以下示例输出:
NAME READY STATUS RESTARTS AGE httpbin-7c6464475-9wrr8 2/2 Running 0 6d20h
使用“
kubectl get svc
”命令列出服务的详细信息。kubectl get svc -n httpbin
输出应类似于以下示例输出:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE httpbin ClusterIP 10.0.92.135 <none> 14001/TCP 6d20h
部署入口配置并验证能否访问应用程序服务
使用“
kubectl apply
”命令部署以下Ingress
和IngressBackend
配置,使外部客户端能够访问端口14001
上的httpbin
服务。kubectl apply -f <<EOF apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: httpbin namespace: httpbin annotations: kubernetes.io/ingress.class: azure/application-gateway spec: rules: - http: paths: - path: / pathType: Prefix backend: service: name: httpbin port: number: 14001 --- kind: IngressBackend apiVersion: policy.openservicemesh.io/v1alpha1 metadata: name: httpbin namespace: httpbin spec: backends: - name: httpbin port: number: 14001 # targetPort of httpbin service protocol: http sources: - kind: IPRange name: 10.0.0.0/8 EOF
使用“
kubectl get ingress
”命令验证已成功部署对象“Ingress
”,并记下外部 IP 地址。kubectl get ingress -n httpbin
输出应类似于以下示例输出:
NAME CLASS HOSTS ADDRESS PORTS AGE httpbin <none> * 20.85.173.179 80 6d20h
使用“
kubectl get ingressbackend
”命令验证已成功部署对象“IngressBackend
”。kubectl get ingressbackend -n httpbin
输出应类似于以下示例输出:
NAME STATUS httpbin committed
使用以下“
curl
”命令验证是否可以使用流入量服务的外部 IP 地址访问httpbin
服务。curl -sI http://<external-ip>/get
确认收到
status 200
的响应。
指标可观测性
通过指标可观测性,可以查看网格指标和网格中的部署。 使用 OSM,可以通过 Prometheus 和 Grafana 获取指标可观测性,但这些集成不在 AKS 支持策略的涵盖范围内。
还可以将 OSM 与 Azure Monitor 集成。
在网格上启用指标与 Azure Monitor 集成之前,请先确保满足以下先决条件:
- 在群集上启用 Azure Monitor。
- 为 AKS 群集启用 OSM 加载项。
- 将应用程序命名空间载入网格。
使用“
osm metrics enable
”命令为网格中的命名空间启用指标。osm metrics enable --namespace myappnamespace
在
kube-system
命名空间中创建一个 Configmap,让 Azure Monitor 可以监视命名空间。 例如,使用以下内容创建monitor-configmap.yaml
来监视myappnamespace
: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 = ["myappnamespace"] metadata: name: container-azm-ms-osmconfig namespace: kube-system
使用“
kubectl apply
”命令来应用 ConfigMap。kubectl apply -f monitor-configmap.yaml
导航到 Azure 门户并选择 AKS 群集。
在“监视”下选择“日志”。
在“监视”部分,查询
InsightsMetrics
表以查看已启用的命名空间中的指标。 例如,以下查询显示了默认命名空间的 envoy 指标:InsightsMetrics | where Name contains "envoy" | extend t=parse_json(Tags) | where t.namespace == "default"
自动化和开发人员工具
OSM 可以与某些自动化项目和开发人员工具集成,帮助操作员和开发人员生成并发布应用程序。 例如,OSM 与 Flagger 集成,可以实现渐进式交付,与 Dapr 集成,可以生成应用程序。 OSM 与 Flagger 和 Dapr 的集成不在 AKS 支持策略的涵盖范围内。
外部授权
使用外部授权可将 HTTP 请求的授权卸载到外部服务。 OSM 可以通过与 Open Policy Agent (OPA) 集成来使用外部授权,但该集成不在 AKS 支持策略的涵盖范围内。
证书管理
OSM 使用几种类型的证书对 AKS 群集进行操作。 OSM 有自己的证书管理器,名为 Tresor,默认使用该证书管理器。 通过 OSM,还可以与 Hashicorp Vault 和证书管理器集成,但这些集成不在 AKS 支持策略的涵盖范围内。
后续步骤
本文介绍了 OPEN Service Mesh (OSM) 加载项集成了 Azure 以及一些开源项目提供的功能。 有关 OSM 的详细信息,请参阅 AKS 中的 OSM 简介。