Назад | Перейти на главную страницу

Как выбрать внешний IP-адрес балансировщика нагрузки Kubernetes в Google Kubernetes Engine

Я развертываю веб-приложение с помощью Google Kubernetes Engine, и я хочу сделать его доступным через балансировщик нагрузки на существующем статическом IP-адресе, который я контролирую как часть того же проекта в Google Cloud Platform, потому что имя домена, которое я хочу использовать уже указывает на этот IP.

Я использовал yaml-файл для модуля:

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
  labels:
    app: my-app
spec:
  containers:
  - name: my-container
    image: gcr.io/my-project/my-app:latest

Я могу настроить балансировщик нагрузки, используя:

apiVersion: v1
kind: Service
metadata:
  name: my-load-balancer
spec:
  ports:
  - port: 80
    targetPort: 80
  selector:
    app: my-app
  type: LoadBalancer

Это обеспечивает внешний IP-адрес, по которому приложение доступно, но я не могу найти способ настроить его для использования нужного IP-адреса. В документация по услугам упоминает настройку spec.clusterIP, но, похоже, это не связано с внешним IP. Аналогичным образом, после настройки балансировщика нагрузки в поле status.loadBalancer.ingress.ip службы устанавливается внешний IP-адрес, но это не похоже на настраиваемый параметр.

В качестве альтернативы я попытался вручную создать правило переадресации в консоли Google Compute Engine, чтобы направлять трафик с моего статического IP-адреса в целевой пул, настроенный Kubernetes, но когда я пытаюсь подключиться, в соединении отказывается.

Есть ли способ сделать то, что я хочу - открыть модуль Kubernetes (или контроллер репликации) в движке Google Kubernetes на выбранном статическом IP-адресе?

TL; DR Google Container Engine с Kubernetes v1.1 поддерживает loadBalancerIP просто отметьте автоматически назначенный IP как статический первый.

Kubernetes v1.1 поддерживает внешние IP:

apiVersion: v1
kind: Service
spec:
  type: LoadBalancer
  loadBalancerIP: 10.10.10.10
  ...

Пока нет действительно хорошей последовательной документации о том, как использовать его на GCE. Несомненно, этот IP-адрес должен быть одним из ваших заранее выделенных статический IP-адреса.

В межрегиональная балансировка нагрузки документация в основном предназначена для Compute Engine, а не для Kubernetes / Container Engine, но все же полезна, особенно в части «Настройка службы балансировки нагрузки».

Если вы просто создаете Kubernetes LoadBalancer на GCE, он создаст сетевой Compute Engine> Сеть> Балансировка сетевой нагрузки> Правило пересылки, указывающее на целевой пул, состоящий из ваших машин в вашем кластере (обычно только те, на которых запущены модули, соответствующие селектору служб) . Похоже, что удаление пространства имен плохо очищает созданные правила.


Обновить

На самом деле теперь это поддерживается (хотя и не задокументировано):

  1. Убедитесь, что вы используете Kubernetes 1.1 или новее (под GKE отредактируйте свой кластер и отметьте «Версия узла»)
  2. Под Сеть> Внешние IP-адреса у тебя уже должно быть немного Эфемерный помечены как указывающие на экземпляр виртуальной машины вашего кластера (если нет или не уверены, разверните один раз без loadBalancerIP, дождитесь выделения внешнего IP-адреса при запуске kubectl get svc, и найдите этот IP-адрес в списке на этой странице). Отметьте один из них как статический, скажем это Внешний адрес является 10.10.10.10.
  3. Отредактируйте свой LoadBalancer иметь loadBalancerIP=10.10.10.10 как указано выше (адаптируйтесь к IP, предоставленному вам Google).

Теперь, если вы удалите LoadBalancer или даже пространство имен, он должен сохранить этот IP-адрес при повторном развертывании в этом кластере. Если вам нужно сменить кластер, можно немного повозиться вручную:

  1. Под Раздел «Балансировка сетевой нагрузки», вкладка «Целевые пулы», нажмите кнопку «Создать целевой пул»:
    • Название: cluster-pool (или любое другое имя)
    • Регион: выберите регион одного из ваших кластеров.
    • Проверка здоровья: необязательно, если хотите
    • Выберите существующие группы экземпляров: ваш кластер Kubernetes
  2. Под Раздел «Балансировка сетевой нагрузки», вкладка «Правила переадресации», нажмите кнопку «Создать правило переадресации»:
    • Название: http-cross-region-gfr (или любое другое имя)
    • Регион: выберите регион одного из ваших кластеров.
    • Внешний IP-адрес: выберите loadbalancer-ip-crossregion ты только что зарезервировал
    • Целевой пул: Выбрать cluster-pool ты только что создал

Хорошие новости. Это будет исправлено в Kubernetes v1.1. Вы можете установить service.spec.loadBalancerIP на IP-адрес, который, как вам известно, принадлежит вам.


Предыдущий:

Это особенность, которая провалилась в трещины. Он должен был работать (и, возможно, даже работал в какой-то момент), но не был хорошо протестирован и сломался по ходу дела, а затем как бы случайно спроектирован (временно).

Это в моем списке вещей, которые нужно исправить после 1.0.

https://github.com/GoogleCloudPlatform/kubernetes/issues/10323