Azure AKS Loadbalancer, обслуживающий несколько модулей с использованием службы на одном IP - PullRequest
2 голосов
/ 10 июля 2020

Сейчас у меня есть балансировщик нагрузки для каждого модуля. В моем случае 2 модуля со следующими определениями YAML.

apiVersion: v1
kind: Service
metadata:
  name: service1
spec:
  ports:
  - name: https-service1
    port: 6379
    targetPort: 6379
  selector:
       app: service1-consoleapp
  type: LoadBalancer

apiVersion: v1
kind: Service
metadata:
  name: service2
spec:
  ports:
  - name: https-service2
    port: 443
    targetPort: 443
  selector:
       app: service2-consoleapp
  type: LoadBalancer

Когда я применяю 2 указанных выше файла yaml, я получаю 2 внешних IP-адреса, которые затем использую для настройки записей A в моих поддоменах DNS.

service1.company.com => внешний IP 1 для service1-consoleapp

service2.company.com => внешний IP 2 для service2-consoleapp

Есть ли способ объединить файл YAML в один, так что я могу использовать только один IP-адрес вместо 2?

Кроме того, похоже, что при входе вы можете это сделать, но не знаете, как я справляюсь с требованием «хоста».

Может ли кто-нибудь объяснить, как будет работать маршрутизация, поскольку я не уверен, какие значения должны быть в свойстве path?

Я все равно получу 2 внешних IP-адреса, которые я могу использовать для заполнения поддомены dns?

 spec:
  rules:
  - host: service1.company.com
    http:
      paths:
      - backend:
          serviceName: service1
          servicePort: 6379
        path: ??
  - host: service2.company.com
    http:
      paths:
      - backend:
          serviceName: service2
          servicePort: 433
        path: ??

Результат, который я ищу, - это если я наберу

service1.company.com: 6379 в моем браузере, тогда я должен попасть в конечную точку модуля (service1- consoleapp), и если я наберу

service2.company.com:443 в моем браузере, тогда я должен попасть в конечную точку модуля (service2-consoleapp).

, где service1.company.com и service2.company.com находятся на одном IP-адресе.

заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 10 июля 2020

Вам лучше работать с документацией Microsoft - Создайте контроллер входящего трафика в Azure Kubernetes Service (AKS) .

Из документов:

Контроллер входящего трафика - это часть программного обеспечения, которое обеспечивает обратный прокси, настраиваемую маршрутизацию c трафика и завершение TLS для сервисов Kubernetes. Входящие ресурсы Kubernetes используются для настройки правил и маршрутов входа для отдельных сервисов Kubernetes. Используя контроллер входящего трафика и правила входа, можно использовать один IP-адрес для маршрутизации трафика c к нескольким службам в кластере Kubernetes.

Следуйте документации и установите входящий трафик.

Позже, следуйте документации Kubernetes как @CSharpRocks, предложенному в комментариях.

Из документов:

Если вы создаете ресурс Ingress без каких-либо хостов, определенных в правилах, то любой веб-трафик c с IP-адресом вашего контроллера Ingress может быть сопоставлен без необходимости виртуального хоста на основе имени.

Например, следующий вход Ingress ресурс будет направлять трафик, запрошенный для first.bar.com, на service1, second.foo.com на service2, а любой трафик c на IP-адрес без имени хоста, определенного в запросе (то есть без представления заголовка запроса), на service3.

Пример Yaml:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: name-virtual-host-ingress
spec:
  rules:
  - host: first.bar.com
    http:
      paths:
      - backend:
          serviceName: service1
          servicePort: 80
  - host: second.foo.com
    http:
      paths:
      - backend:
          serviceName: service2
          servicePort: 80
  - http:
      paths:
      - backend:
          serviceName: service3
          servicePort: 80

Подробнее о Типы путей .

1 голос
/ 10 июля 2020

Входящий ресурс, который у вас есть в настоящее время, должен работать. Полностью удалите раздел path. Также в вашем DNS вам необходимо создать поддомены service1.company.com, service2.company.com и A record, чтобы указывать на IP-адрес балансировщика нагрузки.

Этот loadBalancer - тот, который будет направлять трафик c формы за пределы Модули входящего контроллера и входной контроллер будут перенаправлять трафик c на внутренние модули в соответствии с правилами, определенными во входном ресурсе. Правило host работает таким образом - если HTTP-запрос имеет заголовок Host, service1.company.com контроллер входа отправит этот запрос на service1, а если он имеет заголовок Host, контроллер входа 1012 * отправит этот запрос to service2

При развертывании контроллера входящего трафика, такого как Nginx, вам необходимо создать службу типа LoadBalancer. Таким образом, у вас будет только один loadBalancer, который предназначен для доступа к модулям входящего контроллера.

...