Обзор внешней связи в Kubernetes
По умолчанию поды могут инициировать исходящие соединения во внешний мир. Однако входящий трафик снаружи кластера требует явной конфигурации. Kubernetes предоставляет несколько механизмов для открытия подов и сервисов снаружи.
Основные методы открытия сервисов
NodePort
- Открывает конкретный порт на каждом узле кластера
- Позволяет внешнему трафику попадать на сервисы через
<node-ip>:<nodeport>
- Подходит для окружений разработки и тестирования
- Работает на транспортном уровне
Load Balancer
- Обеспечивает балансировку нагрузки на L4 (транспортном уровне) через TCP/IP
- Распределяет внешний трафик между несколькими узлами
- Интегрируется с балансировщиками нагрузки облачных провайдеров
- Лучший вариант для продакшн-окружений, требующих внешнего доступа
Ingress
- Реализует маршрутизацию на L7 (уровне приложения) через HTTP/HTTPS
- Позволяет маршрутизировать по пути и имени хоста
- Предоставляет TLS termination и расширенные правила маршрутизации
- Рекомендуется для сложных развёртываний с несколькими сервисами
Альтернативный метод доступа
kubectl proxy
Для локальной разработки и отладки kubectl proxy даёт прямой доступ к сервисам кластера:
kubectl proxy --port=8080
Эта команда открывает сервисы с ClusterIP на твоей локальной машине, позволяя обращаться через:
http://localhost:8080/api/v1/proxy/namespaces/<namespace>/services/<service-name>/
Важные моменты
- NodePort и LoadBalancer открывают сервисы напрямую внешнему трафику
- Ingress предоставляет расширенные возможности маршрутизации и предпочтителен для продакшна
- kubectl proxy ограничен локальным доступом и сценариями разработки
- Выбирай метод в зависимости от твоих задач, требований безопасности и масштабируемости