В нашей последней статье мы обсудили, как настроить и запустить кластер Kubernetes, давайте обсудим, как мы можем развернуть службу NGINX в нашем кластере.
Я буду запускать это развертывание на виртуальной машине, размещенной поставщиком общедоступного облака.
Как и во многих публичных облачных сервисах, многие обычно поддерживают схему публичных и частных IP для своих виртуальных машин.
Тестовая среда
Master Node - Public IP: 104.197.170.99 and Private IP: 10.128.15.195 Worker Node 1 - Public IP: 34.67.149.37 and Private IP: 10.128.15.196 Worker Node 2 - Public IP: 35.232.161.178 and Private IP: 10.128.15.197
Развертывание NGINX в кластере Kubernetes
Мы запустим это развертывание с мастер-узла.
Начнем с проверки состояния кластера.
Все ваши ноды должны быть в состоянии READY.
# kubectl get nodes
Мы создаем развертывание NGINX, используя образ NGINX.
# kubectl create deployment nginx --image=nginx
# kubectl get deployments
# kubectl describe deployment nginx
Предоставление вашего сервиса Nginx публичной сети
Kubernetes предлагает несколько вариантов предоставления вашего сервиса на основе функции под названием Kubernetes Service-types, и это:
- ClusterIP – этот тип службы обычно предоставляет службу по внутреннему IP-адресу, доступному только внутри кластера и, возможно, только внутри узлов кластера.
- NodePort – это наиболее простой вариант предоставления доступа к вашей службе за пределами вашего кластера через определенный порт (называемый NodePort) на каждом узле кластера. Мы проиллюстрируем этот вариант в ближайшее время.
- LoadBalancer – этот параметр использует внешние службы балансировки нагрузки, предлагаемые различными поставщиками, для предоставления доступа к вашей службе. Это более надежный вариант, когда вы думаете о высокой доступности для вашего сервиса, и он имеет больше возможностей, чем доступ по умолчанию.
- ExternalName – эта служба перенаправляет трафик на службы вне кластера. Таким образом, служба, таким образом, сопоставляется с DNS-именем, которое может быть размещено вне вашего кластера. Важно отметить, что тут не используется проксирование.
Тип службы по умолчанию – ClusterIP.
В нашем сценарии мы хотим использовать тип службы NodePort, поскольку у нас есть как открытый, так и закрытый IP-адрес, и нам пока не нужен внешний балансировщик нагрузки.
С этим типом сервиса Kubernetes назначит на эту службу порты в диапазоне 30000+.
# kubectl create service nodeport nginx --tcp=80:80
# kubectl get svc
# curl master-node:30386 # curl node-1:30386 # curl node-2:30386
Настройка эфемерного публичного IP-адреса
Как вы, возможно, заметили, Kubernetes сообщает, что у меня не зарегистрирован активный публичный IP, или, скорее, не зарегистрирован EXTERNAL-IP.
# kubectl get svc
# ip a
Как упоминалось ранее, в настоящее время я запускаю это развертывание на виртуальной машине, предлагаемой поставщиком общедоступного облака. Таким образом, хотя конкретный интерфейс не назначен общедоступному IP-адресу, поставщик виртуальных машин выдал временный внешний IP-адрес.
Эфемерный внешний IP-адрес – это временный IP-адрес, который остается подключенным к виртуальной машине, пока виртуальный экземпляр не будет остановлен.
Проблема здесь, за исключением того факта, что ваш общедоступный IP-адрес не является статичным, заключается в том, что Ephemeral Public IP является просто расширением (или прокси-сервером) частного IP-адреса, и по этой причине доступ к службе будет осуществляться только через порт 30386.