NodePort is a basic Service type in Kubernetes. It adds node port mapping to intra-cluster access. This means the Service is exposed on each node's IP address at a static port. When you create a NodePort Service, Kubernetes automatically allocates a cluster-scoped IP address (ClusterIP). When clients outside the cluster access <node-IP>:<node-port>, the traffic will be forwarded to the target pod through the ClusterIP of the NodePort Service.
Если pod‑ам требуется временный доступ или трафик низкий, вы можете создать Service типа NodePort. Например, в тестовой среде можно использовать Service типа NodePort при развертывании и отладке веб‑приложения.
Figure 1 NodePort Service access

Параметр | Description |
|---|---|
Service Name | Введите имя, которое может совпадать с именем рабочей нагрузки. |
Service Type | Выберите NodePort. |
Namespace | Выберите namespace, к которому относится рабочая нагрузка. |
Service Affinity | Определяет, направлять ли внешний трафик на локальный узел или на конечную точку уровня кластера. Подробнее см. Service Affinity (externalTrafficPolicy). |
Selector | Service будет связан с pod‑ами рабочей нагрузки на основе метки и будет направлять трафик к pod‑ам с этой меткой. Вы можете добавить ключ и значение для метки pod и нажать Confirm. Вы также можете нажать Reference Workload Label, чтобы использовать метку существующей рабочей нагрузки. В отображённом диалоговом окне выберите рабочую нагрузку и нажмите OK. |
IPv6 | Эта функция отключена по умолчанию. После её включения кластерный IP‑адрес Service меняется на IPv6‑адрес. Эта опция доступна только в кластерах версии v1.15 и выше с включённым IPv6 (устанавливается при создании кластера). |
Port |
|
Вы можете настроить доступ к Service с помощью kubectl. В этом разделе в качестве примера используется нагрузка Nginx, чтобы описать, как настроить NodePort Service с помощью kubectl.
vi nginx-deployment.yaml
Содержимое файла:
vi nginx-nodeport-svc.yaml
Содержимое файла:
apiVersion: v1kind: Servicemetadata:labels:app: nginxname: nginx-nodeportspec:ports:- name: servicenodePort: 30000 # Node port. The value ranges from 30000 to 32767.port: 8080 # Port for accessing a Serviceprotocol: TCP # Protocol used for accessing a Service. The value can be TCP or UDP .targetPort: 80 # Port used by a Service to access the target container. This port is closely related to the applications running in a container. In this example, the Nginx image uses port 80 by default.selector: # Label selector. A Service selects a pod based on the label and forwards the requests for accessing the Service to the pod. In this example, select the pod with the app:nginx label.app: nginxtype: NodePort # Service type. NodePort indicates that the Service is accessed through a node port.
kubectl create -f nginx-deployment.yaml
Если отображается информация, аналогичная следующей, рабочая нагрузка создана:
deployment/nginx created
Проверьте созданную рабочую нагрузку.
kubectl get pod
Если отображается информация, аналогичная следующей, рабочая нагрузка работает:
NAME READY STATUS RESTARTS AGEnginx-2601814895-znhbr 1/1 Running 0 15s
kubectl create -f nginx-nodeport-svc.yaml
Если отображается информация, аналогичная следующей, Service создаётся:
service/nginx-nodeport created
Проверьте созданный Service.
kubectl get svc
Если отображается информация, аналогичная следующей, Service создан.
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEkubernetes ClusterIP 10.247.0.1 <none> 443/TCP 4d8hnginx-nodeport NodePort 10.247.30.40 <none> 8080:30000/TCP 18s
Создайте контейнер в кластере и получите к нему доступ, используя IP-address-of-the-node:node-port.
kubectl get node -owide
Вывод команды:
NAME STATUS ROLES AGE INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME10.100.0.136 Ready <none> 152m 10.100.0.136 <none> CentOS Linux 7 (Core) 3.10.0-1160.25.1.el7.x86_64 docker://18.9.010.100.0.5 Ready <none> 152m 10.100.0.5 <none> CentOS Linux 7 (Core) 3.10.0-1160.25.1.el7.x86_64 docker://18.9.0
kubectl run -i --tty --image nginx:alpine test --rm /bin/sh
curl 10.100.0.136:30000
Вывод команды: