Для чего нужен TCP в Kubernetes?

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

Ответ

TCP (Transmission Control Protocol) является основным транспортным протоколом в Kubernetes для внутренней и внешней коммуникации, где требуется надежная, упорядоченная доставка данных.

Ключевые сценарии использования в K8s:

  1. Коммуникация между компонентами control plane:
    • Соединения между kube-apiserver, etcd и kube-controller-manager.
    • Надежность и порядок доставки команд здесь критичны для консистентности состояния кластера.
  2. Сервисы (Service) типа ClusterIP и LoadBalancer: По умолчанию используют TCP для маршрутизации трафика к подам.
  3. Ingress-контроллеры: Часто принимают внешний TCP/SSL трафик и проксируют его внутрь кластера.

Пример Service, использующего TCP:

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

Почему TCP, а не UDP? Для большинства сервисов приложений (веб-серверы, базы данных, API) важна гарантия доставки пакетов и их правильная последовательность, которую обеспечивает TCP. UDP используется для специфичных workload'ов (например, DNS, потоковое видео), где низкая задержка важнее надежности.