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 exec
o kubectl port-forward
en 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.192
está 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-endpoint
con el hecho de que necesito que Kubernetes salga con el tun0
adaptador 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 tun0
es 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.