Ответ
Ingress — это лишь один уровень абстракции для управления входящим HTTP/HTTPS трафиком. Вся сетевая модель Kubernetes строится на других фундаментальных компонентах:
-
Service — базовая абстракция для доступа к набору подов.
- ClusterIP (по умолчанию): внутренний IP сервиса внутри кластера. Используется для связи между микросервисами.
apiVersion: v1 kind: Service metadata: name: backend-service spec: selector: app: backend ports: - port: 80 # Порт сервиса targetPort: 8080 # Порт пода type: ClusterIP - NodePort: открывает статический порт на каждом узле кластера. Использую для дебага или когда нет LoadBalancer.
- LoadBalancer: интегрируется с облачным провайдером (AWS ELB, GCP LB) для создания внешнего балансировщика нагрузки.
- ClusterIP (по умолчанию): внутренний IP сервиса внутри кластера. Используется для связи между микросервисами.
-
CNI (Container Network Interface) Plugin — реализует саму сетевую связность между подами и узлами. Выбор плагина (Calico, Cilium, Flannel) определяет возможности сети, производительность и политики.
- Calico/Cilium: часто используются для
NetworkPolicy. - Flannel: простой overlay-сеть "из коробки".
- Calico/Cilium: часто используются для
-
NetworkPolicy — "брандмауэр" на уровне пода. Позволяет изолировать трафик между микросервисами.
apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: allow-frontend-to-backend spec: podSelector: matchLabels: app: backend ingress: - from: - podSelector: matchLabels: app: frontend ports: - protocol: TCP port: 8080 -
CoreDNS — встроенный DNS-сервер кластера. Сервисы доступны по имени
<service-name>.<namespace>.svc.cluster.local. Это основа для service discovery. -
kube-proxy — работает на каждом узле, отвечает за маршрутизацию трафика к сервисам (режимы: iptables, ipvs).
В моей работе настройка сети — это выбор CNI, определение Services для доступа, применение NetworkPolicies для безопасности и настройка Ingress-контроллера (Nginx, Traefik) для внешнего трафика.