Le contexte.
Je suis l'installation de base de Kubernetes. aquí (dans le nuage de Hetzner, si nécessaire). 1 contrôleur et 1 travailleur.
Tout va bien apparemment.
-
les serveurs ont une interface IP externe (Ipv4 publique) et une interface interne (normalement 10.0.0.2 ou 10.0.0.3).
-
Le contrôleur monte
-
J'installe la flanelle
-
J'ai défini des options avec
kubeadm init
et je change le kubectl config pour n'utiliser que l'ip interne (sinon il affiche l'ip externe comme "ip interne" des noeuds). A savoirprivate_ipaddr=$( ifconfig eth1 | grep -i inet | head -1 | awk '{print $2}' ) #eth0 is the public Ipv4 echo "KUBELET_EXTRA_ARGS='--node-ip ${private_ipaddr}'" > /etc/sysconfig/kubelet systemctl daemon-reload systemctl restart kubelet
kubeadm init --apiserver-advertise-address=$private_ipaddr --pod-network-cidr=10.244.0.0/16
-
puis je rejoins le travailleur, et l'adresse annoncée pour l'api est bien interne (10.0.0.3 par exemple).
-
kubectl get nodes -o wide
montre que deux noeuds sont prêts après quelques minutes. -
puis je commence à déployer un pod. Le pod est un simple busybox ou alpine.
-
le pod est déployé sur le seul travailleur.
-
J'essaie d'atteindre depuis le pod déployé le fqdn du pod coredns. Il ne fonctionne pas .
-
Il n'y a pas de pare-feu sur le système à part les chaînes de kubernetes. Entre les systèmes, il n'y a pas de pare-feu si l'on utilise le réseau interne, tandis que le trafic sur l'ipv4 public est protégé par un pare-feu (sauf le port 22).
-
Ce que j'ai découvert est : si j'ouvre le pare-feu entre les deux ipv4 publiques des serveurs, alors la connexion entre le pod et le pod core-dns fonctionne. Sinon, elle ne fonctionne pas.
Cela m'amène à réaliser que malgré le fait que l'ip du nœud est défini sur l'ip interne, pour les communications kubernetes passe toujours par l'interface publique ipv4, plutôt que de communiquer via le réseau interne. .
D'où la question. Comment puis-je dire à kubernetes d'utiliser uniquement le réseau interne et non le réseau externe ?