Сетевая подсистема
Стартовая информация
Сетевой плагин выбирается во время установки кластера.
Документация, сетевая модель K8s Выдержки:
- Сетевая подсистема используется только подами (не нодами).
- У каждой node свой пул ip адресов для запущенных у них pod.
- Каждый Pod в кластере имеет собственный уникальный в пределах кластера IP адрес.
- У каждого Pod свое частное сетевое пространство, общее для всех контейнеров внутри Pod. Контейнеры внутри Pod взаимодействуют через localhost.
- Pod'ы взаимодействуют с Pod на других нодах при помощи сетевого плагина (CNI).
- Служба - это метод предоставления доступа к Pod в кластере (внутренний и внешний)
Вот вроде просто, но нихера не понятно. Поэтому дальше начинается самое веселое)
Следствия пункта 1. Связность между нодами и контроллером не зависит от сетевого взаимодействия подов. Поэтому вопрос сети при управлении - один вопрос, вопрос сети подов - второй вопрос.
Первый вопрос относительно простой: сетевая видимость точка - точка между IP адресами. Необходимые порты при настройке port-forwarding:
На мастер нодах:
TCP 6443* Kubernetes API Server
TCP 2379-2380 etcd server client API
TCP 10250 Kubelet API
TCP 10251 kube-scheduler
TCP 10252 kube-controller-manager
TCP 10255 Read-Only Kubelet API
На воркерах:
TCP 10250 Kubelet API
TCP 10255 Read-Only Kubelet API
TCP 30000-32767 NodePort Services
Открываем порты и управление начнет работать. Теперь нужна сетевая связность между подами.

Для использования службы типа LoadBalancer необходимо установить балансировщик, например MetalLB
Настройка MetalLB
Примените манифест для установки MetalLB
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.13.7/config/manifests/metallb-native.yaml
Дождаться запуска контейнеров
kubectl get pods -n metallb-system
Создайте конфигурационный файл для MetalLB. Например, metallb-config.yaml
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
name: first-pool
namespace: metallb-system
spec:
addresses:
- 192.168.1.240-192.168.1.250 # Укажите диапазон IP-адресов, доступных в вашей сети
---
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
name: l2advert
namespace: metallb-system
spec:
ipAddressPools:
- first-pool
Применить конфигурацию:
kubectl apply -f metallb-config.yaml