Поделиться через


Интеграция с Open Service Mesh в Службе Kubernetes Azure (AKS)

Надстройка Open Service Mesh (OSM) интегрируется с функциями, предоставляемыми Azure и некоторыми проектами с открытым кодом.

Примечание.

С выходом Open Service Mesh (OSM) из эксплуатации, объявленным Cloud Native Computing Foundation (CNCF), мы рекомендуем определить ваши конфигурации OSM и перенести их в эквивалентную конфигурацию Istio. Для получения информации о миграции с OSM на Istio см. руководство по миграции конфигураций Open Service Mesh (OSM) в Istio.

Внимание

Политика поддержки AKS не распространяется на интеграцию с проектами с открытым кодом.

Входящий трафик

Ingress позволяет маршрутизировать трафик, внешний по отношению к сети, к службам внутри сети. С помощью OSM можно настроить большинство решений для обработки входящего трафика, чтобы они работали с сеткой службы, но OSM лучше всего работает с одним из следующих решений:

Примечание.

В настоящее время контроллер входящего трафика шлюза Azure (AGIC) работает только для серверных служб HTTP. Если вы настроите OSM для использования AGIC, agIC не будет использоваться для других серверных компонентов, таких как HTTPS и mTLS.

Использование контроллера входящего трафика шлюза Azure (AGIC) с надстройкой OSM для входящего трафика HTTP

Внимание

Невозможно настроить контроллер входящего трафика шлюза Azure (AGIC) для входящего трафика HTTPS.

Создание пространства имен и развертывание службы приложений

  1. Установка контроллера входящего трафика AGIC.

  2. Создайте пространство имен для службы приложений с помощью kubectl create ns команды.

    kubectl create ns httpbin
    
  3. Добавьте пространство имен в сетку с помощью osm namespace add команды CLI OSM.

    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. Убедитесь, что поды запущены и работают, и в них внедрен побочный контейнер Envoy с помощью команды kubectl get pods.

    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. Разверните следующие Ingress и IngressBackend конфигурации, чтобы разрешить внешним клиентам доступ к httpbin службе через порт 14001 с помощью kubectl apply команды.

    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. Убедитесь, что объект Ingress успешно развернут, используя команду kubectl get ingress, и запишите внешний IP-адрес.

    kubectl get ingress -n httpbin
    

    Выходные данные должны выглядеть примерно так:

    NAME      CLASS    HOSTS   ADDRESS         PORTS   AGE
    httpbin   <none>   *       20.85.173.179   80      6d20h
    
  3. Убедитесь, что IngressBackend объект успешно развернут с помощью kubectl get ingressbackend команды.

    kubectl get ingressbackend -n httpbin
    

    Выходные данные должны выглядеть примерно так:

    NAME      STATUS
    httpbin   committed
    
  4. Убедитесь, что вы можете получить доступ к httpbin службе с помощью внешнего IP-адреса службы входящего трафика и следующей curl команды.

    curl -sI http://<external-ip>/get
    
  5. Подтвердите получение ответа с помощью status 200.

Наблюдаемость метрик

Возможность наблюдения за метриками позволяет вам просматривать метрики вашей сетки и развертывания в ней. OSM поддерживает использование Prometheus и Grafana для обеспечения наблюдаемости метрик, но политика поддержки AKS не распространяется на эти интеграции.

OSM можно также интегрировать с Azure Monitor.

Прежде чем включить метрики в сетке для интеграции с Azure Monitor, убедитесь, что у вас есть следующие предварительные требования:

  • Включите Azure Monitor в кластере.
  • Включите надстройку OSM для вашего кластера AKS.
  • Подключите пространства имен вашего приложения к сетке.
  1. Включите метрики для пространства имен в сетке с помощью этой команды osm metrics enable.

    osm metrics enable --namespace myappnamespace
    
  2. Создайте ConfigMap в kube-system пространстве имен, которая позволяет 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. Примените ConfigMap с помощью kubectl apply команды.

    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 и cert-manager, однако политика поддержки AKS не распространяется на эти интеграции.

Следующие шаги

В этой статье рассматриваются интеграции надстроек Open Service Mesh (OSM) с функциями, предоставляемыми Azure и некоторыми проектами с открытым исходным кодом. Дополнительные сведения об OSM см. в статье Об OSM в AKS.