Как настроить Ingress для AWS EKS Application Load Balancer (ALB) для нескольких микросервисов?

#kubernetes #microservices #kubernetes-ingress #amazon-eks

#kubernetes #микросервисы #kubernetes-вход #амазонка-экс

Вопрос:

У меня есть 5 микросервисов, которым я хочу разрешить внешний трафик. Эти микросервисы будут размещены на разных поддоменах. Я использую кластер K8s на EKS и запускаю кластер и другие службы. Кажется, что когда дело доходит до Ingress, возникает довольно много путаницы. Я настроил контроллер входа ALB, следуя этому руководству в eksworkshop. Это сработало для меня, и я могу развернуть игру 2048, как объясняется в руководстве.

Теперь я хочу разработать входной ресурс следующим образом:

 # apiVersion: networking.k8s.io/v1beta1
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
    name: cluster-ingress
    annotations:
        kubernetes.io/ingress.class: alb
        alb.ingress.kubernetes.io/scheme: internet-facing
        alb.ingress.kubernetes.io/target-type: ip
spec:
    rules:
        - host: app.my-domain.com
          http:
              paths:
                  - path: /*
                    backend:
                        serviceName: app-cluster-ip-service
                        servicePort: 3000

        - host: ms1.my-domain.com
          http:
              paths:
                  - path: /*
                    backend:
                        serviceName: ms1-cluster-ip-service
                        servicePort: 8000
        - host: ms2.my-domain.com
          http:
              paths:
                  - path: /*
                    backend:
                        serviceName: ms2-cluster-ip-service
                        servicePort: 2000
        - host: ms3.my-domain.com
          http:
              paths:
                  - path: /*
                    backend:
                        serviceName: ms3-cluster-ip-service
                        servicePort: 4000
        - host: website.my-domain.com
          http:
              paths:
                  - path: /*
                    backend:
                        serviceName: website-cluster-ip-service
                        servicePort: 3333
 

Итак, вот мои сомнения

  1. Как настроить ingress для перенаправления на разные порты в зависимости от домена? (когда я использовал Nginx, было предусмотрено настроить восходящий поток, а затем Nginx соответствующим образом маршрутизирует трафик)
  2. Какова процедура привязки его к моему зарегистрированному домену? (Сертификаты TLS с Cert manager позволяют шифровать)
  3. Что я должен поместить в свои записи DNS для всех поддоменов? (Запись / CNAME ALB) И все ли 5 поддоменов имеют одну и ту же запись / конфигурацию?

Я использую Cloudflare для управления DNS, если это помогает.

Ответ №1:

  1. Балансировщик нагрузки приложения использует правила для условной маршрутизации запросов к разным хостам / путям. Таким образом, контроллер балансировки нагрузки AWS поддерживает эту функцию с помощью аннотаций, подробности см. в документе doc.
  2. Вы можете использовать cert manager для управления сертификатами вашего домена. Также AWS load balancer поддерживает указание сертификата, хранящегося в ACM, если вы используете подстановочный сертификат.
  3. Да, вам необходимо создать несколько записей DNS для ваших доменов, независимо от используемого вами контроллера входа. Вы можете взглянуть на external-dns, чтобы сделать это автоматически.