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

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

3 ответа

Решение

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

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

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

Диспетчер облачных контроллеров Kubernetes для DigitalOcean

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

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

  • servicecontroller - отвечает за создание LoadBalancer при создании службы типа: LoadBalancer в Kubernete s.

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

Затем получите ключ токена с 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 вместо того, чтобы беспокоиться о большой части инфраструктуры (это мое понимание сервиса, давайте посмотрим как это работает, когда становится доступным...)

Фактически возможно выставить сервис через плавающий 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 в kubernetes.

Пример:

kubectl expose rc my-nginx --port=80 --public-ip=10.x.x.x --type=LoadBalancer
Другие вопросы по тегам