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

Я развертываю веб-приложение с помощью Google Kubernetes Engine, и я хочу сделать его доступным через подсистему балансировки нагрузки на существующем статическом IP-адресе, которым я управляю как часть того же проекта в Платформе Google Cloud, потому что доменное имя я хочу уже использовать точки для этого 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-адресе?

16
задан 14 May 2018 в 16:54
2 ответа

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

Kubernetes v1.1 поддерживает externalIPs :

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-адрес в список на этой странице). Отметьте один из них как static , скажем, Внешний адрес - 10.10.10.10 .
  3. Измените свой LoadBalancer , чтобы он имел loadBalancerIP = 10.10.10.10 , как указано выше (адаптировать к IP-адресу, предоставленному вам Google).

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

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

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


Предыдущий:

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

Это в моем коротком списке вещей исправить после 1.0.

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

8
ответ дан 2 December 2019 в 20:42

Теги

Похожие вопросы