Instale o metallb para obter LoadBalancers nos seus clusters
helm repo add metallb https://metallb.github.io/metallbhelm repo updatefor ctx in kind-demo kind-demo3; do helm install metallb -n metallb --create-namespace metallb/metallb --kube-context=${ctx}done
Crie um `ipaddresspool` para cada cluster baseado em sua rede docker kind, mas lembre-se para cada cluster, um `ipaddresspool` diferente, para evitar conflito.
Para isso, primeiro descubra o range de IP do seu kind network
docker network inspect kind -f '{{.IPAM.Config}}'{172.17.0.0/16 172.17.0.1 map[]} {fc00:f853:ccd:e793::/64 fc00:f853:ccd:e793::1 map[]}]
O meu é `172.17.0.16`, então vou utilizá-lo na configuração de IPs para meus services do tipo `LoadBalancer`.
kubectl --context=kind-demo apply -f - <<EOFapiVersion: metallb.io/v1beta1kind: IPAddressPoolmetadata: name: first-pool namespace: metallb-systemspec: addresses: - 172.17.0.61-172.17.0.70---apiVersion: metallb.io/v1beta1kind: L2Advertisementmetadata: labels: todos: verdade name: example namespace: metallb-systemEOF
E DEPOIS....
kubectl --context=kind-demo3 apply -f - <<EOFapiVersion: metallb.io/v1beta1kind: IPAddressPoolmetadata: name: first-pool namespace: metallb-systemspec: addresses: - 172.17.0.71-172.17.0.80---apiVersion: metallb.io/v1beta1kind: L2Advertisementmetadata: labels: todos: verdade name: example namespace: metallb-systemEOF
Essa é a hora de você validar se sua máquina consegue se conectar a um serviço nos clusters, do tipo `LoadBalancer`.
# crie um deploy simples:
kubectl create deploy web --image nginx --context=kind-demo
# expõe o deploy como LoadBalancer
kubectl expose deploy web --port 80 --target-port 80 --type LoadBalancer --context=kind-demo
# verifique o IP designado ao seu service
kubectl get service web --context=kind-demoNAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEdefault web LoadBalancer 10.101.106.156 172.17.0.61 80:31507/TCP 20s
# faça um teste pra ver se está no ar
curl 172.17.0.61<!DOCTYPE html><html><head><title>Welcome to nginx!</title><style>html { color-scheme: light dark; } .... bla bla bla bla```
# deu certo? Pode apagar
kubectl delete deploy,svc web --context=kind-demo
Faça o mesmo no outro cluster mudando o `--context=kind-demo3`
Em caso de problemas verifique:
firewall dentro da sua máquina
rede correta do docker network kind
se você distribuiu corretamente os `ipaddresspool` nos metallb, sem repeti-los nos clusters, a idéia é cada um com seu pool de IPs para LoadBalancers, hein.
Em breve publicaremos a parte 3! Fique ligado.