Поиск по сайту:

Как развернуть 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, а именно:

  1. ClusterIP – этот тип службы обычно предоставляет службу по внутреннему IP-адресу, доступному только внутри кластера и, возможно, только внутри узлов кластера.
  2. NodePort. Это самый простой вариант предоставления доступа к вашей службе за пределами вашего кластера через определенный порт (называемый NodePort) на каждом узле кластера. Вскоре мы проиллюстрируем этот вариант.
  3. LoadBalancer. Этот параметр использует внешние службы балансировки нагрузки, предлагаемые различными поставщиками, для обеспечения доступа к вашей службе. Это более надежный вариант, когда речь идет о высокой доступности вашего сервиса, и он имеет больше функций, помимо доступа по умолчанию.
  4. 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.