☸️ Определение пода Kubernetes в качестве службы NodePort |

☸️ Определение пода Kubernetes в качестве службы NodePort

Мануал

Не так давно я начал собирать кластер Kubernetes в своей локальной сети, где у меня нет OpenStack или OpenShift, которые могли бы предоставить мне IP балансировщика нагрузки.

Большинство облачных платформ имеют уже написанную логику балансировки нагрузки, которая может предоставлять IP-адрес при создании сервиса с типом LoadBalancer.

В моем сценарии я предоставлю свой сервис приложений через тип NodePort, который предоставит порт на всех рабочих узлах и перенаправит трафик на правильный под.

ПРИМЕЧАНИЕ. Вам нужно будет вручную ввести NODE IP: EXPOSE PORT в свой предварительный балансировщик нагрузки. Если у вас есть автоматизация, которая может сделать за вас, это здорово!
Чтобы открыть ваш под за пределами кластера Kubernetes, вам нужно создать файл yaml, а затем развернуть его на главном узле.
Есть и другие способы предоставления сервиса пода через командную строку.

Я дойду  до этого в конце этого раздела.

Сначала я создам под, а затем перейду к службам.

Если вы уже знаете, как создавать поды с метками, вы можете пропустить этот раздел.
kubectl run nginx-demo --image=nginx --port=80 --labels="name=nginx-demo"
Выполните kubectl get pods, чтобы получить статус только что созданного pod.
$ kubectl get pods
NAME                             READY     STATUS    RESTARTS   AGE
nginx-demo-74df6b89b6-lkjvq      1/1       Running   0          1m
Как только под создан и находится в рабочем состоянии, мы продолжим работу и начнем с сервисов для создания NodePort.

Создадим сервис NodePort

Сервис NodePort предоставляет порт на каждом сервере, который будет перенаправлять трафик на ваш под.

Вы можете динамически генерировать порт или назначать статический порт, пока он доступен.

Сгенерируем файл yaml для создания NodePort.

vi nginx-demo-nodeport-svc.yaml

Вставьте содержимое, показанное ниже в файл, указанный выше.

apiVersion: v1
kind: Service
metadata:
  name: nginx-demo
  labels:
    name: nginx-demo-nodeport-svc
spec:
  type: NodePort
  ports:
    - port: 80
      nodePort: 30180
      name: http
    - port: 443
      nodePort: 31443
      name: https
  selector:
    name: nginx-demo
Давайте создадим  службу NodePort.
kubectl create -f nginx-demo-nodeport-svc.yaml
Выполните kubectl get services, чтобы отобразить сервисы
$ kubectl get services
NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                      AGE
kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP                      4d
nginx-demo   NodePort    10.98.148.146   <none>        80:30180/TCP,443:31443/TCP   1m
После того, как вы создали сервис, вы должны увидеть nginx-demo, созданный с портами, которые были определены в файле yaml.
Теперь давайте получим IP-адрес узла, где находится наш под.
Затем мы можем выполнить curl или просмотреть его в браузере.
kubectl get pods -o wide
Вывод:
$ kubectl get pods -o wide
NAME                             READY     STATUS    RESTARTS   AGE       IP            NODE
nginx-demo-74df6b89b6-lkjvq      1/1       Running   0          44m       10.244.1.15   k8s-worker-node1
Проверим по DNS
$ nslookup k8s-worker-node1

Address: 192.168.0.151

Выполнение тестирования

Используя Curl:

$ curl 192.168.0.151:30180
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>
Просмотр через браузер:

Использование командной строки для создания сервиса NodePort

kubectl expose deployment nginx-demo --port=80 --type=NodePort

Вывод:

 kubectl get services
NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP        4d
nginx-demo   NodePort    10.100.95.81    <none>        80:32546/TCP   4s
ПРИМЕЧАНИЕ. Когда вы создаете развертывание для NodePort через командную строку, вы не можете назначить порт вручную. Кластер автоматически назначит один динамически. Если вы должны назначить порт вручную, используйте шаблон yaml и создайте развертывание.

Пожалуйста, не спамьте и никого не оскорбляйте. Это поле для комментариев, а не спамбокс. Рекламные ссылки не индексируются!
Добавить комментарий

  1. Mr.K8s

    Спасибо за доступное объяснение ! Сервис заработал!

    Ответить
    1. cryptoparty автор

      Всегда пожалуйста!

      Ответить