Я развертываю веб-приложение с помощью 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-адресе?
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> Сеть> Балансировка сетевой нагрузки> Правило пересылки, указывающее на целевой пул, состоящий из ваших машин в вашем кластере (обычно только тех, на которых работают поды, соответствующие селектору служб). Похоже, что удаление пространства имен плохо очищает созданные правила.
На самом деле теперь оно поддерживается (хотя и не задокументировано):
loadBalancerIP
, дождитесь выделения внешнего IP-адреса при запуске kubectl get svc
и найдите этот IP-адрес в список на этой странице). Отметьте один из них как static , скажем, Внешний адрес - 10.10.10.10
. loadBalancerIP = 10.10.10.10
, как указано выше (адаптировать к IP-адресу, предоставленному вам Google). Теперь, если вы удалите LoadBalancer или даже пространство имен, он должен сохранить этот IP-адрес при повторном использовании на этом кластере. Если вам необходимо сменить кластер, возможно выполнение некоторых действий вручную:
пул кластера
(или любое другое имя) http-cross-region-gfr
(или любое другое имя) loadbalancer-ip -crossregion
, который вы только что зарезервировали кластерный пул
, который вы только что создали Хорошие новости. Это будет исправлено в Kubernetes v1.1. Вы можете установить в поле service.spec.loadBalancerIP
IP-адрес, который вам известен.
Предыдущий:
Это функция, которая провалилась. Он должен был работать (и, возможно, даже работал в какой-то момент), но не был хорошо протестирован и сломался по ходу дела, а затем как бы случайно спроектирован (временно).
Это в моем коротком списке вещей исправить после 1.0.
https://github.com/GoogleCloudPlatform/kubernetes/issues/10323