использовать шлюз API Ambassador в качестве входа Istio?

Все , что я искал в Интернете целый день, но не могу найти полного и достойного примера того, как использовать шлюз ambassador api в качестве входа istio. Документация по умолчанию на сайте посла относительно istio недостаточно ясна. Так может кто-нибудь предоставить полный и подробный пример того, как использовать шлюз ambassador Api вместе с сервисной сеткой istio?

My platform specs are
OS: Windows10
Container-Platform: Docker-desktop
Kubernetes-version: 1.10.11

1 ответ

Эта тема подробно объяснена в документации Ambassador:

Ambassador - это собственный шлюз API Kubernetes для микросервисов. Амбассадор развертывается на границе вашей сети и направляет входящий трафик к вашим внутренним службам (он же трафик "север-юг"). Istio - это сервисная сетка для микросервисов, предназначенная для добавления наблюдаемости, маршрутизации и устойчивости на уровне приложений (L7) для трафика между сервисами (также известного как трафик "восток-запад"). И Istio, и Ambassador созданы с использованием Envoy.

По этой ссылке вы найдете пошаговое руководство, как заставить Ambassador работать с Istio.


Кроме того, вам нужно будет обновить версию Kubernetes, поскольку требования Istio:

  • Istio 1.4 а также 1.3 был протестирован с Kubernetes: 1.13, 1.14, 1.15.

  • Istio 1.2 был протестирован с Kubernetes: 1.12, 1.13, 1.14.

Я предлагаю избегать старых версий.

Спустя много часов мне удалось интегрировать Ambassador 1.8 с Istio 1.7.3. Интеграция mTLS была действительно сложной.

Сначала я обновил Kubernetes до последней версии (1.19.2) со следующими extraArgs:

          extraArgs:
            service-account-issuer: kubernetes.default.svc
            service-account-signing-key-file: /etc/kubernetes/pki/sa.key

Затем установил Istio с профилем по умолчанию.

Затем я перешел к документации, упомянутой Петром, но модуль Ambassador не хотел запускаться. Поэтому я сравнил боковую машину в документации построчно с коляской, автоматически созданной Istio в другом модуле. Наконец я добрался до следующего рабочего yaml развертывания:

apiVersion: apps/v1
вид: Развертывание
метаданные:
  имя: посол
  пространство имен: ракета
спецификации:
  реплик: 1
  селектор:
    matchLabels:
      услуга: посол
  шаблон:
    метаданные:
      аннотации:
        consul.hashicorp.com/connect-inject: "ложь"
        sidecar.istio.io/inject: 'ложь'
      ярлыки:
        услуга: посол
        app.kubernetes.io/managed-by: getambassador.io
    спецификации:
      близость:
        podAntiAffinity:
          предпочтительный DuringSchedulingIgnoredDuringExecution:
          - podAffinityTerm:
              labelSelector:
                matchLabels:
                  услуга: посол
              topologyKey: kubernetes.io/hostname
            вес: 100
      контейнеры:
      - имя: посол
        изображение: docker.io/datawire/ambassador:1.8.0
        env:
        - имя: AMBASSADOR_NAMESPACE
          valueFrom:
            fieldRef:
              fieldPath: metadata.namespace
        - имя: HOST_IP
          valueFrom:
            fieldRef:
              fieldPath: status.hostIP 
        - имя: REDIS_URL
          значение: ambassador-redis:6379
        - имя: AMBASSADOR_URL
          значение: https://ambassador.rocket.svc.cluster.local
        - имя: POLL_EVERY_SECS
          значение: '60'
        - имя: AMBASSADOR_INTERNAL_URL
          значение: https://127.0.0.1:8443
        - имя: AMBASSADOR_SINGLE_NAMESPACE
          значение: "ДА" 
        - имя: AMBASSADOR_ID
          значение: "посол-ракета"
        # Необходимо для запуска sidecar istio-proxy
        - имя: AMBASSADOR_ENVOY_BASE_ID
          значение: "1"
        порты:
        - порт контейнера: 8080
          имя: http
        - порт контейнера: 8443
          имя: https
        - порт контейнера: 8877
          имя: http-admin
        livenessProbe:
          httpGet:
            путь: / посол /v0/check_alive
            порт: http-admin
          periodSeconds: 3
        готовность
          httpGet:
            путь: /ambassador/v0/check_ready
            порт: http-admin
          periodSeconds: 3
        Ресурсы:
          пределы:
            ЦП: 1000 м
            память: 600Mi
          Запросы:
            ЦП: 200 м
            память: 300Mi
        securityContext:
          allowPrivilegeEscalation: ложь 
        объем
        - mountPath: /tmp/ посол-под-информация
          имя: посол-под-информация
        - mountPath: /etc/istio-certs/
          имя: istio-certs
      - имя: istio-proxy
         # Используйте ту же версию, что и ваша установка Istio
        образ: docker.io/istio/proxyv2:1.7.3
        аргументы:
        - прокси
        - коляска
        - --домен
        - $(POD_NAMESPACE).svc.cluster.local
        - --serviceCluster
        - istio-proxy-ambassador.$(POD_NAMESPACE)
        - --discoveryAddress
        - istiod.istio-system.svc:15012
        - --connectTimeout
        - 10 с
        - --statusPort
        - "15020"
        - --trust-domain=cluster.local
        - --controlPlaneBootstrap=false
        env:
        - имя: OUTPUT_CERTS
          значение: "/etc/istio-certs"
        - имя: JWT_POLICY
          значение: сторонний-jwt
        - имя: PILOT_CERT_PROVIDER
          значение: istiod
        - имя: CA_ADDR
          значение: istiod.istio-system.svc:15012
        - имя: ISTIO_META_MESH_ID
          значение: cluster.local
        - имя: POD_NAME
          valueFrom:
            fieldRef:
              fieldPath: metadata.name
        - имя: POD_NAMESPACE
          valueFrom:
            fieldRef:
              fieldPath: metadata.namespace
        - имя: INSTANCE_IP
          valueFrom:
            fieldRef:
              fieldPath: status.podIP
        - имя: SERVICE_ACCOUNT
          valueFrom:
            fieldRef:
              fieldPath: spec.serviceAccountName
        - имя: HOST_IP
          valueFrom:
            fieldRef:
              fieldPath: status.hostIP
        - имя: ISTIO_META_POD_NAME
          valueFrom:
            fieldRef:
              apiVersion: v1
              fieldPath: metadata.name
        - имя: ISTIO_META_CONFIG_NAMESPACE
          valueFrom:
            fieldRef:
              apiVersion: v1
              fieldPath: metadata.namespace
        - имя: ISTIO_META_CLUSTER_ID
          значение: Kubernetes
        imagePullPolicy: IfNotPresent
        Ресурсы:
          пределы:
            ЦП: 2000 м
            память: 1024Mi
          Запросы:
            ЦП: 100 м
            память: 128Mi
        готовность
          failureThreshold: 30
          httpGet:
            путь: /healthz/ready
            порт: 15020
            схема: HTTP
          initialDelaySeconds: 1
          periodSeconds: 2
          successThreshold: 1
          timeoutSeconds: 1
        объем
        - mountPath: /var/run/secrets/istio
          имя: istiod-ca-cert
        - mountPath: /etc/istio/proxy
          имя: istio-envoy
        - mountPath: /etc/istio-certs/
          имя: istio-certs
        - mountPath: /var/run/secrets/tokens
          имя: istio-token
        securityContext:
          runAsUser: 0
      объемы:
      - название: istio-certs
        emptyDir:
          среда: Память
      - имя: istiod-ca-cert
        configMap:
          defaultMode: 420
          имя: istio-ca-root-cert
      - имя: istio-envoy
        emptyDir:
          среда: Память
      - имя: istio-token
        прогнозируется:
          defaultMode: 420
          источники:
          - serviceAccountToken:
              аудитория: istio-ca
              expirationSeconds: 43200
              путь: istio-token
      - downAPI:
          Предметы:
          - fieldRef:
              fieldPath: metadata.labels
            путь: метки
        имя: посол-под-информация
      restartPolicy: Всегда
      securityContext:
        runAsUser: 8888
      serviceAccountName: посол
      terminationGracePeriodSeconds: 0 

Примечание. Я предпочитаю запускать один Istio на кластер и один Ambassador на пространство имен, поэтому я помещаю модуль Ambassador и другие мои модули в пространство имен rocket.

Другие вопросы по тегам