Я создаю контейнерный кластер с использованием CoreOs и Kubernetes в DigitalOcean, и я видел, что для того, чтобы представить Pod миру, вам нужно создать Service с Type: LoadBalancer. Я думаю, что это оптимальное решение, так что вам не нужно добавлять внешний балансировщик нагрузки вне кубернетов, таких как nginx или haproxy. Мне было интересно, можно ли создать это, используя плавающий IP-адрес DO.
Служба внешней балансировки нагрузки Kubernetes в DigitalOcean
Ответы (3)
Тип сервиса LoadBalancer реализуется путем добавления кода в мастер кубернетов, специфичный для каждого облачного провайдера. Для Digital Ocean нет облачного провайдера (поддерживается облачные провайдеры), поэтому тип LoadBalancer не сможет использовать плавающие IP-адреса Digital Ocean.
Вместо этого вам следует рассмотреть возможность использования службы NodePort или прикрепления ExternalIP к вашей службе и сопоставление открытого IP-адреса с DO плавающий IP.
Все изменилось, 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 вместо того, чтобы беспокоиться о большой части инфраструктуры (это мое понимание службы, давайте посмотрим, как она будет работать, когда она станет доступной ...)
Фактически можно выставить сервис через плавающий 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