O Kind é uma ferramenta para executar clusters Kubernetes em contêineres Docker. Ele foi projetado para uso em testes, CI e desenvolvimento. O Kind foi criado para ser uma alternativa leve e fácil de usar para executar clusters Kubernetes.
O Cilium é uma solução de rede e segurança para Kubernetes baseada em eBPF. Ele fornece uma solução de rede e segurança de alto desempenho, escalável e confiável para Kubernetes. O Cilium é uma alternativa ao kube-proxy e ao iptables.
Neste tutorial, você aprenderá como criar um cluster Kubernetes com o Kind e instalar o Cilium para gerenciar a rede e a segurança do cluster.
- Docker
- Kubectl
- Kind
- Helm
kind create cluster --config kind.yaml
kind get kubeconfig > ~/.kube/config
kubectl get nodes
kubectl get pods -n kube-system
Os nós workers não estarão prontos até que o Cilium seja instalado, visto que o Cilium será o responsável pela rede do cluster.
helm upgrade --install --namespace kube-system --repo https://helm.cilium.io cilium cilium --values - <<EOF
kubeProxyReplacement: true
k8sServiceHost: kind-control-plane
k8sServicePort: 6443
hostServices:
enabled: false
externalIPs:
enabled: true
nodePort:
enabled: true
hostPort:
enabled: true
image:
pullPolicy: IfNotPresent
ipam:
mode: kubernetes
hubble:
enabled: true
relay:
enabled: true
ui:
enabled: true
ingress:
enabled: true
annotations:
kubernetes.io/ingress.class: nginx
hosts:
- hubble-ui.127.0.0.1.nip.io
EOF
Agora verifique o namespace kube-system
para ver se os pods do Cilium estão em execução.
kubectl get pods -n kube-system
Execute o comando abaixo para instalar a cli do Cilium.
chmod +x install-cilium-cli.sh
./install-cilium-cli.sh
cilium status --wait
O MetalLB é um controlador de balanceamento de carga de metal para Kubernetes. Ele fornece uma solução de balanceamento de carga de camada 2 para clusters Kubernetes. O MetalLB é uma alternativa ao serviço LoadBalancer do Kubernetes.
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.14.3/config/manifests/metallb-native.yaml
Agora vamos verificar a configuração de endereçamento IP (IPAM) da rede docker chamada kind.
docker network inspect -f '{{.IPAM.Config}}' kind
A saída será algo como:
[{fc00:f853:ccd:e793::/64 map[]} {172.18.0.0/16 172.18.0.1 map[]}]
E com base nessa saída definimos o range de IPs para utilizar no arquivo de configuração do MetalLB.
kubectl apply -f metallb-config.yaml
Agora vamos criar um service do tipo LoadBalancer para testar o MetalLB.
kubectl create service loadbalancer my-lbs --tcp=80:8080
Agora vamos verificar se o serviço foi criado e se o IP foi atribuído.
kubectl get svc my-lbs
A saída será algo como:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 68m
my-lbs LoadBalancer 10.96.187.92 172.18.255.150 80:30225/TCP 40s
O Ingress Controller é responsável por gerenciar o tráfego de entrada para o cluster Kubernetes. O Ingress Controller é um componente essencial para permitir o acesso externo aos serviços em execução no cluster.
helm upgrade --install --namespace ingress-nginx --create-namespace --repo https://kubernetes.github.io/ingress-nginx ingress-nginx ingress-nginx --values - <<EOF
defaultBackend:
enabled: true
EOF
LB_IP=$(kubectl get svc -n ingress-nginx ingress-nginx-controller -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
helm upgrade --namespace kube-system --repo https://helm.cilium.io cilium cilium --reuse-values --values - <<EOF
hubble:
ui:
enabled: true
ingress:
enabled: true
annotations:
kubernetes.io/ingress.class: nginx
hosts:
- hubble-ui.${LB_IP}.nip.io
EOF
echo "http://hubble-ui.${LB_IP}.nip.io"