Как взаимодействуют между собой запущенные приложения в Kubernetes?

«Как взаимодействуют между собой запущенные приложения в Kubernetes?» — вопрос из категории Kubernetes, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В Kubernetes взаимодействие между приложениями абстрагировано через объекты Service и Ingress, которые обеспечивают стабильную сетевую идентификацию для динамически создаваемых и уничтожаемых Pod'ов.

Основные механизмы:

  1. Service (ClusterIP): Создает стабильный внутренний IP-адрес и DNS-имя для группы Pod'ов. Трафик балансируется между Pod'ами по метке (selector). Это основной способ связи внутри кластера.

    apiVersion: v1
    kind: Service
    metadata:
      name: backend-service
    spec:
      selector:
        app: backend
      ports:
      - port: 80        # Порт, на котором Service доступен внутри кластера
        targetPort: 8080 # Порт контейнера в Pod

    Приложение frontend обращается к backend по DNS-имени http://backend-service.default.svc.cluster.local:80.

  2. Service (LoadBalancer / NodePort): Для доступа извне кластера. LoadBalancer автоматически создает внешний балансировщик в облачном провайдере (AWS ELB, GCP Load Balancer).

  3. Ingress: Управляет внешним HTTP(S) трафиком, обеспечивая маршрутизацию на основе хоста или пути, SSL-терминацию. Работает вместе с Ingress Controller (nginx, Traefik).

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: app-ingress
    spec:
      rules:
      - host: myapp.example.com
        http:
          paths:
          - path: /api
            pathType: Prefix
            backend:
              service:
                name: backend-service
                port:
                  number: 80

Важные аспекты с точки зрения DevOps:

  • Сетевая политика (NetworkPolicy): Для изоляции трафика и соблюдения принципа наименьших привилегий между неймспейсами или командами.
  • Service Mesh (Istio/Linkerd): В сложных средах для добавления продвинутых возможностей: observability (трейсы, метрики), безопасность (mTLS), управление трафиком (canary-развертывания).