Ответ
Service в OpenShift (и Kubernetes) — это абстракция, которая определяет постоянную конечную точку для доступа к логической группе динамических Pod'ов. Он обеспечивает стабильное сетевое имя и IP-адрес, абстрагируясь от нестабильности отдельных Pod'ов (их перезапусков, масштабирования, перемещений).
Типы Service и их назначение:
-
ClusterIP (тип по умолчанию):
- Назначает Service внутренний IP-адрес из диапазона кластера.
- Доступен только внутри кластера.
- Используется для внутренней коммуникации между компонентами приложения.
-
NodePort:
- Расширяет
ClusterIP. - Открывает статический порт на каждой Node кластера.
- Внешний трафик может попасть в Service через
<NodeIP>:<NodePort>. - Используется для разработки или когда LoadBalancer недоступен.
- Расширяет
-
LoadBalancer:
- Расширяет
NodePort. - Автоматически создает внешний балансировщик нагрузки в облачном провайдере (AWS ELB, GCP Load Balancer).
- Назначает Service внешний IP-адрес.
- Стандартный способ для внешнего доступа в облачных средах.
- Расширяет
-
ExternalName:
- Маппит Service на внешнее DNS-имя (например,
my-service.default.svc.cluster.local→api.external.com). - Не имеет селектора и не создает прокси.
- Маппит Service на внешнее DNS-имя (например,
Пример манифеста Service (тип ClusterIP):
apiVersion: v1
kind: Service
metadata:
name: backend-service
spec:
selector: # Селектор определяет, какие Pod'ы входят в Service
app: backend
tier: api
ports:
- name: http
port: 80 # Порт, на котором Service доступен внутри кластера
targetPort: 8080 # Порт контейнера в Pod'е, на который направляется трафик
type: ClusterIP # Тип Service
Особенности в OpenShift:
- Route: OpenShift предоставляет объект Route (аналог Ingress в Kubernetes) как основной способ безопасного внешнего доступа по HTTP/HTTPS. Route направляет трафик на внутренний Service.
- Service Mesh: Глубокая интеграция с OpenShift Service Mesh (Istio) для расширенных возможностей: наблюдение, безопасность, управление трафиком.