Ответ
NodePort — это тип Service в Kubernetes, который открывает статический порт на каждой Node кластера. Любой трафик, приходящий на этот порт любой Node, перенаправляется в Service, а затем в Pod.
Основные характеристики:
- Порт назначается из диапазона 30000-32767 (по умолчанию), но можно указать конкретный.
- Доступ к приложению возможен по схеме:
<IP_любой_Nodes>:<NodePort>. - Для маршрутизации трафика с NodePort на Pod используется kube-proxy (режим iptables или ipvs).
Когда использовать:
- Для доступа к сервису извне кластера в тестовых или dev-средах.
- Когда LoadBalancer недоступен (например, в bare-metal окружениях).
- Как промежуточный шаг перед настройкой Ingress.
Пример манифеста:
apiVersion: v1
kind: Service
metadata:
name: my-nodeport-service
spec:
type: NodePort
selector:
app: my-app
ports:
- port: 80 # Порт самого Service (внутри кластера)
targetPort: 8080 # Порт контейнера в Pod
nodePort: 30080 # Статический порт на Node (опционально)
Недостатки для production:
- Необходимо управлять доступом по IP-адресам Nodes.
- При падении Node, её IP становится недоступным.
- Обычно используется в связке с внешним балансировщиком нагрузки или Ingress-контроллером.