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