你当前正在访问 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)

创建命名空间并部署应用程序服务

  1. 安装 AGIC 入口控制器。

  2. 使用“kubectl create ns”命令为应用程序服务创建命名空间。

    kubectl create ns httpbin
    
  3. 使用“osm namespace add”OSM CLI 命令将命名空间添加到网格。

    osm namespace add httpbin
    
  4. 使用“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
    
  5. 使用“kubectl get pods”命令验证 Pod 是否已启动并运行,以及是否已注入 Envoy Sidecar。

    kubectl get pods -n httpbin
    

    输出应类似于以下示例输出:

    NAME                      READY   STATUS    RESTARTS   AGE
    httpbin-7c6464475-9wrr8   2/2     Running   0          6d20h
    
  6. 使用“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
    

部署入口配置并验证能否访问应用程序服务

  1. 使用“kubectl apply”命令部署以下 IngressIngressBackend 配置,使外部客户端能够访问端口 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
    
  2. 使用“kubectl get ingress”命令验证已成功部署对象“Ingress”,并记下外部 IP 地址。

    kubectl get ingress -n httpbin
    

    输出应类似于以下示例输出:

    NAME      CLASS    HOSTS   ADDRESS         PORTS   AGE
    httpbin   <none>   *       20.85.173.179   80      6d20h
    
  3. 使用“kubectl get ingressbackend”命令验证已成功部署对象“IngressBackend”。

    kubectl get ingressbackend -n httpbin
    

    输出应类似于以下示例输出:

    NAME      STATUS
    httpbin   committed
    
  4. 使用以下“curl”命令验证是否可以使用流入量服务的外部 IP 地址访问 httpbin 服务。

    curl -sI http://<external-ip>/get
    
  5. 确认收到 status 200 的响应。

指标可观测性

通过指标可观测性,可以查看网格指标和网格中的部署。 使用 OSM,可以通过 Prometheus 和 Grafana 获取指标可观测性,但这些集成不在 AKS 支持策略的涵盖范围内。

还可以将 OSM 与 Azure Monitor 集成。

在网格上启用指标与 Azure Monitor 集成之前,请先确保满足以下先决条件:

  • 在群集上启用 Azure Monitor。
  • 为 AKS 群集启用 OSM 加载项。
  • 将应用程序命名空间载入网格。
  1. 使用“osm metrics enable”命令为网格中的命名空间启用指标。

    osm metrics enable --namespace myappnamespace
    
  2. 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
    
  3. 使用“kubectl apply”命令来应用 ConfigMap。

    kubectl apply -f monitor-configmap.yaml
    
  4. 导航到 Azure 门户并选择 AKS 群集。

  5. 在“监视”下选择“日志”。

  6. 在“监视”部分,查询 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 简介