использовать шлюз 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.