Служба внешней балансировки нагрузки Kubernetes в DigitalOcean

Я создаю контейнерный кластер с использованием CoreOs и Kubernetes в DigitalOcean, и я видел, что для того, чтобы представить Pod миру, вам нужно создать Service с Type: LoadBalancer. Я думаю, что это оптимальное решение, так что вам не нужно добавлять внешний балансировщик нагрузки вне кубернетов, таких как nginx или haproxy. Мне было интересно, можно ли создать это, используя плавающий IP-адрес DO.


person mateeyow    schedule 09.03.2016    source источник


Ответы (3)


Тип сервиса LoadBalancer реализуется путем добавления кода в мастер кубернетов, специфичный для каждого облачного провайдера. Для Digital Ocean нет облачного провайдера (поддерживается облачные провайдеры), поэтому тип LoadBalancer не сможет использовать плавающие IP-адреса Digital Ocean.

Вместо этого вам следует рассмотреть возможность использования службы NodePort или прикрепления ExternalIP к вашей службе и сопоставление открытого IP-адреса с DO плавающий IP.

person Robert Bailey    schedule 09.03.2016
comment
Значит ли это, что мне нужно создать внешний балансировщик нагрузки вне кластера Kubernetes? - person mateeyow; 09.03.2016
comment
NodePorts предназначены для использования с балансировщиками нагрузки вне кластера. Тип Loadbalancer помогает автоматизировать настройку внешних балансировщиков нагрузки на поддерживаемых облачных платформах. Поскольку похоже, что Digital Ocean может не предлагать балансировщики нагрузки, вы также можете использовать ExternalIPs и сопоставление открытого IP-адреса с плавающим IP-адресом DO. - person Robert Bailey; 09.03.2016
comment
Вы можете использовать входной контроллер NGINX и указать LB DigitalOcean на хост, на котором развернут контроллер. Поправившись, вы, вероятно, могли бы сделать эту установку высокодоступной. Ссылка: github.com/hobby-kube/guide#bringing- трафик в кластер - person pstadler; 19.04.2017

Все изменилось, DigitalOcean создала собственную реализацию облачного провайдера, как указано здесь и они поддерживают Kubernetes "Cloud Controller Manager" реализация:

Kubernetes Cloud Controller Manager для DigitalOcean

В настоящее время digitalocean-cloud-controller-manager реализует:

  • nodecontroller - обновляет узлы с помощью ярлыков и адресов облачного провайдера, а также удаляет кубернетические узлы при удалении на облачном провайдере.

  • servicecontroller - отвечает за создание LoadBalancer, когда в Kubernete создается служба типа: LoadBalancer.

Чтобы попробовать, клонируйте проект на своем главном узле.

Затем получите ключ токена из https://cloud.digitalocean.com/settings/api/tokens и запустите:

export DIGITALOCEAN_ACCESS_TOKEN=abc123abc123abc123
scripts/generate-secret.sh
kubectl apply -f do-cloud-controller-manager/releases/v0.1.6.yml

Дополнительные примеры можно найти здесь

Что произойдет, когда вы сделаете это? Облачный менеджер DO создаст балансировщик нагрузки (у которого есть готовый механизм аварийного переключения, подробнее об этом в документации по балансировщику нагрузки

Вскоре все снова изменится, поскольку DigitalOcean подхватит Kubernetes, проверьте здесь и у вас будет выбор позволить им управлять вашим кластером Kuberentes вместо того, чтобы беспокоиться о большой части инфраструктуры (это мое понимание службы, давайте посмотрим, как она будет работать, когда она станет доступной ...)

person Dawid Gorczyca    schedule 09.07.2018

Фактически можно выставить сервис через плавающий ip. Единственная загвоздка в том, что внешний IP-адрес, который вам нужно использовать, немного неинтуитивен.

Судя по всему, у DO есть какая-то наложенная сеть для их службы с плавающим IP. Чтобы получить фактический IP-адрес, который вам нужно раскрыть, вам нужно ввести ssh в каплю шлюза и найти его привязанный IP-адрес, нажав службу метаданных:

curl -s http://169.254.169.254/metadata/v1/interfaces/public/0/anchor_ipv4/address

и вы получите что-то вроде

10.x.x.x

Это адрес, который вы можете использовать в качестве внешнего ip в службе типа LoadBalancer в кубернетах.

Пример:

kubectl expose rc my-nginx --port=80 --public-ip=10.x.x.x --type=LoadBalancer
person OlegForzane    schedule 20.05.2016
comment
Я получаю сообщение об ошибке: неизвестный флаг: --public-ip с k8s 1.5.2 - person rjdkolb; 23.05.2017