Инструменты пользователя

Инструменты сайта


k8s-install-flannel

Устанавливаем сетевой плагин flannel + MetalLB

Flannel

Это наверное самый простой вариант сетевого плагина (CNI) для кластера kubernet.

Flannel отвечает за предоставление сети 3 уровня между несколькими узлами в кластере. Flannel не контролирует, как контейнеры подключаются к хосту, а только то, как трафик передается между хостами. В нем отсутствуют сетевые политики и управления трафиком.

Трафик между нодами по умолчанию инкапсулируется в VXLAN. Но поддерживаются и другие типы инкапсуляции, включая WireGuard.

Скачиваем:

wget https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml

Смотрим, какая сеть у нас прописана в кластере для pods:

kubectl cluster-info dump | grep -m 1 cluster-cidr

«–cluster-cidr=10.244.0.0/16»
(мы ее явно указывали при создании кластера)

ищем в скаченном файле kube-flannel.yml раздел сетевой настройки и указываем ту же самую сеть, что в кластере:

net-conf.json: |
  {
    "Network": "10.244.0.0/16",
    "EnableNFTables": false,
    "Backend": {
      "Type": "vxlan"
    }
  }

там же, при желании, можно указать тип backend-а инкапсуляции трафика.

Теперь можно применить настройки:

kubectl apply -f kube-flannel.yml

после установки сетевого плагина кластер перейдет в состояние Ready:

kebectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-master-71 Ready control-plane 1h v1.31.1
k8s-master-72 Ready control-plane 1h v1.31.1
k8s-master-73 Ready control-plane 1h v1.31.1
k8s-worker-74 Ready <none> 1h v1.31.1
k8s-worker-75 Ready <none> 1h v1.31.1

MetalLB

Теперь, когда у нас есть сеть для подов внутри кластера, добавим поддержку load-balance-ра для доступа к подам из внешних сетей.
MetalLB самый простой (по моему мнению) вариант для кластеров kubernet.
Хотя он поддерживает BGP протокол, при котором достигается реальная балансировка (multipath) трафика между нодами, в простейшем случае мы будет использовать только L2.

Сначала подготовим arp кластера, что бы MetalLB мог слать ARP анонсы при изменении адреса:
Открываем конфиг кластера для редактирования:

kubectl edit configmap -n kube-system kube-proxy

Находим следующие строки и правим их как указано:

apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
ipvs:
  strictARP: true     <= вот это поправить

По другому, это можно сделать так:

kubectl get configmap kube-proxy -n kube-system -o yaml | \
sed -e "s/strictARP: false/strictARP: true/" | \
kubectl apply -f - -n kube-system

Теперь установим манифест:

kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/<VERSION>/config/manifests/metallb-native.yaml

<VERSION> - актуальную версию можно поглядеть на сайте: https://metallb.universe.tf/installation/

Ну и теперь, надо немного настроить MetalLB.
Создаем файлик со следующей конфигурацией:

Во первых, укажем ip pool из которого будем выдавать адреса и во вторых, укажем, что надо посылать ARP для этого пула адресов:

---
apiVersion: metallb.io/v1beta1
kind: IPAddressPool 
metadata:
  name: my-pool
  namespace: metallb-system
spec:
  addresses:
  - 192.168.254.230-192.168.254.235
---
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
  name: my-l2-advert
  namespace: metallb-system
spec:
  ipAddressPools:
  - my-pool

Про остальные параметры конфигурации (а так же, про конфигурацию анонсов BGP префиксов) можно почитать: https://metallb.universe.tf/configuration/

Применим этот файлик:

kubectl apply -f <ConfigFileName>

Проверяем работу сети кластера

kubectl create ns test
kubectl -n test create deployment nginx --image=nginx
kubectl -n test expose deployment nginx --type=LoadBalancer --port 80

Смотрим, какой адрес flannel выдал для нашего pod-а:

kubectl -n test get po -o wide
NAMEREADYSTATUSRESTARTSAGEIPNODENOMINATED NODEREADINESS GATES
nginx-676b6c5bbc-qzwkw 1/1 Running 0 77s 10.244.4.3 k8s-worker-74 <none> <none>

ip адрес для pod-а выдан верный.

Смотрим, какой адрес выдал MetalLB в качестве внешнего:

kubectl -n test get svc 
NAMETYPECLUSTER-IPEXTERNAL-IPPORT(S)AGE
nginx LoadBalancer 10.108.23.11 192.168.254.230 80:31402/TCP 1m

Все выдано правильно.

Далее установим Nginx-Ingress в созданный кластер.

k8s-install-flannel.txt · Последнее изменение: 2024/11/05 12:59 — admin

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki