Clúster de Kubernetes en redes separadas

Clúster de Kubernetes en redes separadas

Quiero crear un clúster de Kubernetes en 4 máquinas. Uno tiene una dirección IP pública y se puede acceder a él desde Internet (llamémoslo Master). El Maestro también tiene un nombre de dominio asignado (digamos que es master.foo).

Tres máquinas están en la misma red privada (192.168.5.0), detrás de un enrutador (llamémoslas Worker A/B/C).

He configurado con éxito un clúster 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

También tengo pods ejecutándose en los diferentes trabajadores sin errores.

He inicializado mi clúster con:

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

(Usando franela como red superpuesta).

El problema es que al ejecutar kubectl execo kubectl port-forwarden el maestro se produce un error:

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

Dónde 192.168.5.192está la IP privada de uno de los trabajadores, claro. Creo que esto está relacionado con lo que se dice aquí: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

Entonces, ¿debería configurar una red OpenVPN entre todas estas máquinas? En caso afirmativo, ¿cómo lo combinaría kubeadm init --control-plane-endpointcon el hecho de que necesito que Kubernetes salga con el tun0adaptador OpenVPN? ¿Me he perdido algo? Parece extraño que se estén ejecutando contenedores en los trabajadores, pero no puedo ejecutar comandos ( kubectl exec) en ellos desde el maestro.

Respuesta1

Cuando corres kubectl port-forward(o exec),kubectlse está conectando aservidor APIque luego se conecta akubeletque se ejecuta en cada nodo en el puerto 10250.

Dado que su nodo maestro no está en la misma red que los trabajadores y no se puede acceder a los trabajadores desde el exterior, el servidor API (que se ejecuta en los nodos maestros) no puede conectarse a ellos.

Sí, una VPN podría resolver tu problema. Y para utilizar kubelet tun0es necesario anunciar su dirección IP con--node-ip opción para kubelet

--node-ip cadena
Dirección IP del nodo. Si se configura, kubelet usará esta dirección IP para el nodo

Supongo que el nodo maestro es el único punto de entrada a su clúster desde el exterior, por lo que para poder exponer y acceder a los pods desde el exterior necesita una conexión de red completa entre todos sus nodos, y especialmente de maestro a trabajador en este caso.

Déjame saber si fue útil.

información relacionada