Проверяет понимание способов публикации сервисов Kubernetes наружу, что важно для эксплуатации приложений.
В Kubernetes поды изолированы от внешней сети, поэтому для доступа к сервису извне используются специальные объекты. Три основных подхода: NodePort, LoadBalancer и Ingress. Каждый решает задачу по-своему и применяется в зависимости от инфраструктуры.
NodePort открывает один и тот же порт (диапазон 30000-32767) на каждом узле кластера. Трафик, приходящий на этот порт, автоматически направляется на выбранные поды через Service. Это простой способ, но он не масштабируется для больших нагрузок и не предоставляет гибкой маршрутизации.
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
type: NodePort
selector:
app: my-app
ports:
- port: 80
targetPort: 8080
nodePort: 30080
В облачных средах (AWS, GCP, Azure) тип LoadBalancer автоматически создает внешний балансировщик, который распределяет трафик между узлами. Это удобно, но каждый сервис получает свой IP, что может быть дорого при множестве сервисов.
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
type: LoadBalancer
selector:
app: my-app
ports:
- port: 80
targetPort: 8080
Ingress — это контроллер, который маршрутизирует HTTP/HTTPS трафик по правилам, например, по домену или пути. Он работает как умный прокси и позволяет использовать один внешний IP для множества сервисов. Это стандарт для продакшн-приложений.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-ingress
spec:
rules:
- host: example.com
http:
paths:
- path: /api
pathType: Prefix
backend:
service:
name: api-service
port:
number: 80
Для простых тестов подойдет NodePort, для облачных сред — LoadBalancer, а для продакшена с несколькими сервисами лучше использовать Ingress, так как он экономит IP-адреса и предоставляет гибкие правила маршрутизации.