==== MetalLB come loadBalancer ==== La pagina ufficiale dell'installazione: https://metallb.universe.tf/installation/ Ho eseguito l'operazione preliminare "If you’re using kube-proxy in IPVS mode, since Kubernetes v1.14.2 you have to enable strict ARP mode." Edito la configMap di kube-proxy: ubuntu@kubectl:~$ kubectl edit configmap -n kube-system kube-proxy apiVersion: v1 data: config.conf: |- apiVersion: kubeproxy.config.k8s.io/v1alpha1 ... ... #mode: "iptables" mode: "ipvs" ipvs: strictARP: true kind: KubeProxyConfiguration A questo punto è tutto abbastanza semplice, usando il deploy tramite ''manifest'': https://metallb.universe.tf/installation/#installation-by-manifest kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.14.8/config/manifests/metallb-native.yaml Adesso che è installato nel suo namespace: ubuntu@kubectl:~$ kubectl get all -n metallb-system NAME READY STATUS RESTARTS AGE pod/controller-8694df9d9b-8b9zc 1/1 Running 0 145m pod/speaker-9wxnp 1/1 Running 0 145m NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/metallb-webhook-service ClusterIP 10.105.26.211 443/TCP 145m NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE daemonset.apps/speaker 1 1 1 1 1 kubernetes.io/os=linux 145m NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/controller 1/1 1 1 145m NAME DESIRED CURRENT READY AGE replicaset.apps/controller-8694df9d9b 1 1 1 145m creiamo un pool di IP (in questo caso 2, per test) ubuntu@kubectl:~$ cat metalLB/metallb-pool.yaml apiVersion: metallb.io/v1beta1 kind: IPAddressPool metadata: name: public-pool namespace: metallb-system spec: addresses: - 185.91.188.40-185.91.188.41 Ci sono due modi di utilizzo di questo Load Balancer: Layer 2 e BGP. Il Layer 2 funziona con il protocollo ''arp'' ed è di gestione più semplice. ubuntu@kubectl:~$ cat metalLB/metallb-L2.yaml apiVersion: metallb.io/v1beta1 kind: L2Advertisement metadata: name: ingress namespace: metallb-system spec: ipAddressPools: - public-pool a questo punto è immediato un test: ubuntu@kubectl:~$ kubectl create deploy nginx1 --image nginx:latest ubuntu@kubectl:~$ kubectl expose deploy nginx1 --port 80 --type LoadBalancer ubuntu@kubectl:~$ kubectl create deploy nginx2 --image nginx:latest ubuntu@kubectl:~$ kubectl expose deploy nginx2 --port 80 --type LoadBalancer ubuntu@kubectl:~$ kubectl get all NAME READY STATUS RESTARTS AGE pod/nginx1-c95765fd4-wxkds 1/1 Running 0 1m pod/nginx2-774db4988c-m2vh5 1/1 Running 0 1m NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/nginx1 LoadBalancer 10.109.150.219 185.91.188.40 80:31721/TCP 3m ^^^^^^^^^^^^ ^^^^^^^^^^^^^ service/nginx2 LoadBalancer 10.109.150.219 185.91.188.41 80:31721/TCP 3m ATTENZIONE: Il ping non risponde perché metalLB non gestisce le risposte ICMP.