Ответ
TCP (Transmission Control Protocol) является основным транспортным протоколом в Kubernetes для внутренней и внешней коммуникации, где требуется надежная, упорядоченная доставка данных.
Ключевые сценарии использования в K8s:
- Коммуникация между компонентами control plane:
- Соединения между
kube-apiserver,etcdиkube-controller-manager. - Надежность и порядок доставки команд здесь критичны для консистентности состояния кластера.
- Соединения между
- Сервисы (Service) типа ClusterIP и LoadBalancer: По умолчанию используют TCP для маршрутизации трафика к подам.
- 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, потоковое видео), где низкая задержка важнее надежности.