Что я пытаюсь сделать
Создайте среду Kubernetes с одной службой шлюза API, сопоставленной с DNS-адресом.
Что я наделал:
1) Я зашел в сервис AWS Route53 и создал поддомен.
2) У этого поддомена статический IP-адрес. Я получил этот IP-адрес, выполнив пингование доменного имени.
3) Я создал Кластер Kubernetes на AWS с kops.
4) У меня есть служба шлюза, конечные точки которой попадают в микросервисы в инфраструктуре k8s.
Это услуга типа LoadBalancer
, где loadBalancerIP
равен статическому IP сверху.
Эта проблема:
При указанной выше настройке сервис не может создать с Failed to ensure load balancer for service default/gateway-service: LoadBalancerIP cannot be specified for AWS ELB
.
Итак, я читаю довольно хорошие ресурсы о K8s Ingress (Также) и Сервис обратного прокси Nginx. (И этот в конце) (Также этот).
Моя ошибка также спрашивали раньше, и снова кажется, что ответ ставит еще один уровень между моим шлюзом API и внешним миром.
Затем, прочитав много о контроллерах Nginx Ingress, я действительно запутался.
Мои вопросы
а) Есть ли более серьезная причина для создания еще одного слоя между шлюзом и внешним миром, помимо совместимости?
б) Будет ли то, что я пробовал, работать в Google Cloud Platform (это проблема, связанная с развертыванием AWS)
в) Контроллер входящего трафика Nginx... В чем разница между обратным прокси Nginx и сервисом Kubernetes Ingress? Потому что мне кажется, что эти слова здесь используются как синонимы.
г) Кажется, существует так много способов сделать это, какой в настоящее время лучший (и самый простой) метод?
РЕДАКТИРОВАТЬ:
Я реализовал вариант 1 ответа Ионы. Вот конфиги на случай, если кто-то захочет скопировать и вставить.
шлюз-service.yaml:
apiVersion: v1
kind: Service
metadata:
name: gateway-service
spec:
ports:
- name: "gateway"
port: 80
targetPort: 5000
selector:
app: "gateway"
type: LoadBalancer
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: "gateway"
spec:
replicas: 1
template:
metadata:
labels:
app: "gateway"
spec:
containers:
- image: <account_nr>.dkr.ecr.us-east-1.amazonaws.com/gateway
imagePullPolicy: Always
name: "gateway"
ports:
- containerPort: 5000
protocol: "TCP"
Затем создайте субдомен в AWS Route53:
1) Создать домен
2) New Record Set
3) Тип A
(IPv 4)
4) Псевдоним yes
5) Выберите цель псевдонима, которая соответствует внешней конечной точке службы. (kubectl describe services gateway-service | grep LoadBalancer
)
Потенциально возможно задействовать пять различных элементов автоматизации инфраструктуры:
Некоторые из них могут управлять некоторыми другими. Необязательно, чтобы все они хорошо играли вместе, и они могут соревноваться друг с другом.
Я на самом деле не смотрел на среду выполнения Amazon kubernetes, но помимо этого, для выполнения простых вещей, которые вы хотите сделать, я знаю как минимум 3 варианта:
https://github.com/kubernetes/kops/tree/master/addons/route53-mapper
Это более простая версия первой, включая TLS, но кажется немного безумным использовать ее для TLS, потому что, похоже, требуется хранить сертификаты в служебных аннотациях, а не в секретах.
Ответы:
Есть ли более серьезная причина для создания еще одного слоя между шлюзом и внешним миром, помимо совместимости?
Нет никаких требований, этот подход подходит для автоматизации владения как ELB, так и k8s. Как правило, не нужны конкурирующие владельцы автоматизации.
Будет ли то, что я пробовал, работать в Google Cloud Platform (это проблема, связанная с развертыванием AWS)
Автоматизация gcloud отличается, и его балансировщикам нагрузки можно назначить IP-адреса, потому что у него отдельно управляемое выделение IP-адресов. Так что в некоторой степени это проблема AWS.
Контроллер входящего трафика Nginx ... В чем разница между обратным прокси-сервером Nginx и службой Kubernetes Ingress? Потому что мне кажется, что эти слова здесь используются как синонимы.
Они взаимозаменяемы. Один - абстракция, другой - конкретный.
Kubernetes Ingress - это абстракция, которую можно реализовать разными способами. Входящие ресурсы включают входящие ресурсы, контроллер и прокси-сервер, который принимает конфигурацию. Контроллер следит за кластером на предмет входящих изменений ресурсов, переводит их в конфигурацию, специфичную для прокси, а затем перезагружает прокси.
Входящий контроллер nginx - это реализация этого механизма с использованием nginx. Есть много других, использующих haproxy и другие прокси.
Кажется, существует так много способов сделать это, какой в настоящее время лучший (и самый простой) метод?
См. Выше. Возможно, есть и другие способы.