Як вибрати зовнішню IP-адресу балансира навантаження Kubernetes в Google Kubernetes Engine


16

Я розгортаю веб-додаток за допомогою Google Kubernetes Engine і хочу зробити його доступним через балансир завантаження на існуючій статичній IP-адресі, яку я контролюю в рамках одного проекту в хмарній платформі Google, оскільки доменне ім’я я хочу використовувати вже вказує на цю IP.

Ямл-файл, який я використовував для стручка:

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 стручок (або контролер реплікації) в двигуні Kubernetes Google на вибрану статичну IP-адресу?

Відповіді:


9

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, він створить мережевий обчислювальний механізм> Мережа> Мережеве балансування навантаження> Правило переадресації, що вказує на цільовий пул, зроблений з ваших машин у вашому кластері (як правило, лише ті, хто працює на Pods, що відповідає селектору служби) . Схоже, що видалення простори імен не дуже добре очищає створені правила.


Оновлення

Зараз він фактично підтримується (навіть не маючи документального підтвердження):

  1. Перевірте, чи працює ви Kubernetes 1.1 або пізнішої версії (в GKE відредагуйте кластер і поставте прапорець "Версія вузла")
  2. У розділі Мережа> Зовнішні IP-адреси ви повинні мати вже ефемерні позначки, що вказують на екземпляр VM кластеру (якщо немає або не впевнені, розгорніть один раз без 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щойно створений вами

Це все ще актуально?
Бен

8

Гарні новини. Це буде виправлено у Kubernetes v1.1. Ви можете встановити service.spec.loadBalancerIPполе для IP, який ви знаєте.


Попередній:

Це особливість, яка потрапила через щілини. Це повинно було попрацювати (і, можливо, навіть попрацювало в якийсь момент), але не було добре випробувано і його зламали по дорозі, а потім начебто випадково розробили (тимчасово).

Це в моєму короткому списку, щоб виправити речі після 1,0.

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


Це, мабуть, має бути коментар, а не відповідь.
Уорд - Відновити Моніку

5
@ Ward: "Це неможливо" від розробника - це відповідь, IMHO, і вона була прийнята як така.
Свен
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.