Сервис внешних балансировщиков нагрузки 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