Cluster Kubernetes em redes separadas

Cluster Kubernetes em redes separadas

Quero criar um cluster Kubernetes em 4 máquinas. Um deles tem um endereço IP público e pode ser acessado pela Internet (vamos chamar isso de Master). O Master também tem um nome de domínio atribuído a ele (digamos que seja master.foo).

Três máquinas estão na mesma rede privada (192.168.5.0), atrás de um roteador (vamos chamá-las de Worker A/B/C).

Configurei com sucesso um cluster entre estas máquinas:

$ kubectl get nodes

NAME           STATUS   ROLES    AGE     VERSION
Master       Ready    master   5d20h   v1.17.1
WorkerA      Ready    <none>   21h     v1.17.1
WorkerB      Ready    <none>   21h     v1.17.1
WorkerC      Ready    <none>   5d17h   v1.17.1

Também tenho pods em execução em diferentes trabalhadores sem erros.

Inicializei meu cluster com:

sudo kubeadm init --control-plane-endpoint=master.foo --pod-network-cidr=10.244.0.0/16

(Usando Flannel como rede de sobreposição.)

O problema é que executar kubectl execou kubectl port-forwardno master resulta em erro:

paulb@galaxy:~$ kubectl -n pgo port-forward svc/postgres-operator 8443:8443 
error: error upgrading connection: error dialing backend: dial tcp 192.168.5.192:10250: i/o timeout

Onde 192.168.5.192está o IP privado de um dos trabalhadores, claro. Acho que isso está relacionado ao que é afirmado aqui:https://kubernetes.io/docs/concepts/cluster-administration/networking/#the-kubernetes-network-model

pods on a node can communicate with all pods on all nodes without NAT

Então, devo configurar uma rede OpenVPN entre todas essas máquinas? Se sim, então como eu combinaria kubeadm init --control-plane-endpointcom o fato de que não preciso de kubernetes saindo no tun0adaptador OpenVPN? Perdi algo? Parece estranho que os contêineres estejam sendo executados nos trabalhadores, mas não consigo executar comandos ( kubectl exec) neles do mestre.

Responder1

Quando você corre kubectl port-forward(ou exec),kubectlestá se conectando aservidor APIque então está se conectando akubeletque está sendo executado em todos os nós na porta 10250.

Como o seu nó mestre não está na mesma rede que os trabalhadores e os trabalhadores não são acessíveis de fora, o api-server (que está em execução nos nós mestres) não consegue se conectar a eles.

Sim, a VPN pode resolver o seu problema. E para usar o kubelet tun0você precisa anunciar seu endereço IP com--node-ip opção para kubelet

--node-ip string
Endereço IP do nó. Se definido, o kubelet usará este endereço IP para o nó

Presumo que o nó mestre seja o único ponto de entrada externo para o seu cluster, portanto, para poder expor e acessar pods de fora, você precisa de uma conexão de rede completa entre todos os seus nós e, especialmente, do mestre para o trabalhador neste caso.

Deixe-me saber se foi útil.

informação relacionada