J'ai mis en place un cluster Kubernetes fonctionnel à l'aide de Rancher qui définit deux réseaux :
-
10.42.0.0/16
pour les adresses IP des pods -
10.43.0.0./16
pour les points de service
Je veux utiliser mon proxy inverse Caddy existant pour accéder à ces points d'extrémité de service, j'ai donc défini une route ( 10.10.10.172
est l'un de mes nœuds kubernetes) :
sudo route add -net 10.43.0.0 netmask 255.255.0.0 gw 10.10.10.172
Ma table de routage sur le serveur web du Caddy :
arturh@web:~$ sudo route
[sudo] password for arturh:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default DD-WRT.local 0.0.0.0 UG 0 0 0 eth0
10.10.10.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
10.43.0.0 rancherkube1.lo 255.255.0.0 UG 0 0 0 eth0
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
En utilisant cette configuration, je peux accéder et utiliser 10.43.0.1:443
sans aucun problème (c'est le principal point d'accès à l'API de Kubernetes) :
arturh@web:~$ nmap 10.43.0.1 -p 443 | grep 443
443/tcp open https
arturh@web:~$ curl -k https://10.43.0.1
Unauthorized
Mais l'accès à toute autre adresse IP du réseau 10.43.0.0/16 échoue et je n'arrive pas à comprendre pourquoi :
arturh@web:~$ kubectl get svc | grep prometheus-server
prometheus-prometheus-server 10.43.115.122 <none> 80/TCP 1d
arturh@web:~$ curl 10.43.115.122
curl: (7) Failed to connect to 10.43.115.122 port 80: No route to host
arturh@web:~$ traceroute 10.43.115.122
traceroute to 10.43.115.122 (10.43.115.122), 30 hops max, 60 byte packets
1 rancherkube1.local (10.10.10.172) 0.348 ms 0.341 ms 0.332 ms
2 rancherkube1.local (10.10.10.172) 3060.710 ms !H 3060.722 ms !H 3060.716 ms !H
Je peux accéder à tout depuis le nœud Kubernetes lui-même :
[rancher@rancherkube1 ~]$ wget -qO- 10.43.115.122
<!DOCTYPE html>
<html lang="en">...
qui fonctionne grâce aux règles NAT d'iptable :
[rancher@rancherkube1 ~]$ sudo iptables -t nat -L -n | grep 10.43
KUBE-SVC-NGLRF5PTGH2R7LSO tcp -- 0.0.0.0/0 10.43.115.122 /* default/prometheus-prometheus-server:http cluster IP */ tcp dpt:80
KUBE-SVC-NPX46M4PTMTKRN6Y tcp -- 0.0.0.0/0 10.43.0.1 /* default/kubernetes:https cluster IP */ tcp dpt:443
Je suis confus parce que les entrées pour 10.43.0.1
qui fonctionne semble identique aux autres qui ne fonctionnent pas... Je me dis que je dois ajouter une règle iptables pour permettre l'accès à l'adresse 10.43.0.0/16
sous-réseau, mais je ne suis pas familier avec iptables.
Je suis assez nouveau dans le domaine de Kubernetes, est-ce la bonne façon de procéder pour accéder à vos points de terminaison de service ? Si oui, quelqu'un peut-il m'aider à trouver la bonne commande iptables ?