Как развернуть Nginx в кластере Kubernetes
В нашей последней статье мы обсудили, как настроить и запустить кластер 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
Мы запустим это развертывание с главного узла.
Начнем с проверки состояния кластера. Все ваши узлы должны находиться в состоянии ГОТОВО.
kubectl get nodes
Мы создаем развертывание NGINX, используя образ NGINX.
kubectl create deployment nginx --image=nginx
Теперь вы можете увидеть состояние вашего развертывания.
kubectl get deployments
Если вы хотите просмотреть более подробную информацию о своем развертывании, вы можете запустить команду describe. Например, можно определить, сколько реплик развертывания запущено. В нашем случае мы ожидаем увидеть работающую реплику 1 (т. е. реплики 1/1).
kubectl describe deployment nginx
Теперь, когда ваше развертывание Nginx активно, вы можете предоставить сервису NGINX общедоступный IP-адрес, доступный в Интернете.
Публикация вашего сервиса Nginx в общедоступной сети
Kubernetes предлагает несколько вариантов предоставления вашего сервиса на основе функции, называемой типами сервисов Kubernetes, а именно:
- ClusterIP – этот тип службы обычно предоставляет службу по внутреннему IP-адресу, доступному только внутри кластера и, возможно, только внутри узлов кластера.
- NodePort. Это самый простой вариант предоставления доступа к вашей службе за пределами вашего кластера через определенный порт (называемый NodePort) на каждом узле кластера. Вскоре мы проиллюстрируем этот вариант.
- LoadBalancer. Этот параметр использует внешние службы балансировки нагрузки, предлагаемые различными поставщиками, для обеспечения доступа к вашей службе. Это более надежный вариант, когда речь идет о высокой доступности вашего сервиса, и он имеет больше функций, помимо доступа по умолчанию.
- ExternalName – эта служба перенаправляет трафик на службы за пределами кластера. Таким образом, служба сопоставляется с DNS-именем, которое может размещаться за пределами вашего кластера. Важно отметить, что при этом не используется прокси.
Тип службы по умолчанию — ClusterIP.
В нашем сценарии мы хотим использовать Тип службы NodePort, поскольку у нас есть как общедоступный, так и частный IP-адрес, и на данный момент нам не нужен внешний балансировщик нагрузки. При использовании этого типа службы Kubernetes назначит эту службу портам в диапазоне 30000+.
kubectl create service nodeport nginx --tcp=80:80
Запустите команду get svc, чтобы просмотреть сводную информацию о службе и открытых портах.
kubectl get svc
Теперь вы можете убедиться, что страница Nginx доступна на всех узлах, с помощью команды curl.
curl master-node:30386
curl node-1:30386
curl node-2:30386
Как видите, страница «ДОБРО ПОЖАЛОВАТЬ В NGINX!» доступна.
Достижение эфемерных ПУБЛИЧНЫХ IP-адресов
Как вы, возможно, заметили, Kubernetes сообщает, что у меня нет зарегистрированного активного публичного IP-адреса или, скорее, не зарегистрирован ВНЕШНИЙ IP-адрес.
kubectl get svc
Давайте проверим, действительно ли это правда, что у меня нет ВНЕШНЕГО IP-адреса, подключенного к моим интерфейсам, с помощью команды IP.
ip a
Как видите, публичного IP-адреса нет.
Как упоминалось ранее, в настоящее время я запускаю это развертывание на виртуальной машине, предлагаемой поставщиком общедоступного облака. Таким образом, хотя общедоступный IP-адрес не назначен конкретному интерфейсу, провайдер виртуальной машины выдал эфемерный внешний IP-адрес.
Эфемерный внешний IP-адрес — это временный IP-адрес, который остается прикрепленным к виртуальной машине до тех пор, пока виртуальный экземпляр не будет остановлен. При перезапуске виртуального экземпляра назначается новый внешний IP-адрес. По сути, это простой способ для поставщиков услуг использовать простаивающие общедоступные IP-адреса.
Проблема здесь, помимо того факта, что ваш общедоступный IP-адрес не является статическим, заключается в том, что Эфемерный общедоступный IP-адрес является просто расширением (или прокси-сервером) частного IP-адреса, и по этой причине служба будет Доступен только через порт 30386. Это означает, что доступ к службе будет осуществляться по URL-адресу
, то есть 104.197.170.99:30386, если вы отметите этот флажок браузере, вы сможете увидеть страницу приветствия.
Таким образом, мы успешно развернули NGINX в нашем трехузловом кластере Kubernetes.