Kubernetes: nodePort ne répond pas sur toutes les nodeIPs

Créé le 28 févr. 2017  ·  1Commentaire  ·  Source: kubernetes/kubernetes

Version de Kubernetes :
Version du client : version.Info{Major :"1", Minor :"5", GitVersion :"v1.5.2", GitCommit :"08e099554f3c31f6e6f07b448ab3ed78d0520507", GitTreeState :"clean", BuildDate :"2017-01-12T04:57 : 25Z", GoVersion :"go1.7.4", Compilateur :"gc", Plate-forme :"darwin/amd64"}
Version du serveur : version.Info{Major :"1", Minor :"5", GitVersion :"v1.5.3", GitCommit :"029c3a408176b55c30846f0faedf56aae5992e9b", GitTreeState :"clean", BuildDate :"2017-02-15T06:34 : 56Z", GoVersion :"go1.7.4", Compilateur :"gc", Plate-forme :"linux/amd64"}

Version Docker sur master et minions :
$ docker -v
Docker version 1.13.1, build 092cba3

Environnement :

  • Noyau (par exemple uname -a ):
    Linux knode-master 4.4.0-45-generic #66-Ubuntu SMP Mer 19 Oct 14:12:37 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
  • Installer les outils :
    kubeadm

  • Autres :

Que s'est-il passé :
À l'aide de la page kubeadm , j'ai installé un cluster à trois nœuds.

$ kc describe nodes | awk '/Addresses/ {print $2}' | awk -F',' '{print $3}' 
knode-0
knode-1
knode-master

Réseau de pods canal installé :

kubectl create -f https://raw.githubusercontent.com/tigera/canal/master/k8sinstall/kubeadm/canal.yaml

Les nœuds, les services et les pods étaient sains à ce moment-là. Alors procédé au tableau de bord

kubectl create -f https://rawgit.com/kubernetes/dashboard/master/src/deploy/kubernetes-dashboard.yaml

$ kubectl get -n kube-system services
NAME                   CLUSTER-IP       EXTERNAL-IP   PORT(S)         AGE
canal-etcd             10.96.232.136    <none>        6666/TCP        5m
kube-dns               10.96.0.10       <none>        53/UDP,53/TCP   13h
kubernetes-dashboard   10.110.163.186   <nodes>       80:31699/TCP    1m

Ce à quoi vous vous attendiez :
La section nodePort dans la documentation des services indique que nodePort doit être visible sur toutes les nodeIP.

Dans mon cas, tous les nœuds IP ne répondent pas aux demandes sur le nodePort 31699 du tableau de bord et ne les transmettent pas au pod du tableau de bord.
Seul le nœud (ou minion) hébergeant le pod semble répondre aux requêtes du navigateur. Les autres nœuds (ou minions) ne répondent pas.

Comment le reproduire (le moins et le plus précisément possible) :

_De knode-1 (un serviteur) :_

$ sudo docker ps -a | grep dashboard
79e23eff2c26        gcr.io/google_containers/kubernetes-dashboard-amd64:v1.5.1   "/dashboard --port..."   44 minutes ago      Up 43 minutes 

_accès curl au tableau de bord en dehors du cluster :_

La connexion a expiré à _knode-0:31699

$ curl -m 2 -O http://knode-0:31699/#/workload?namespace=default
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:--  0:00:01 --:--:--     0curl: (28) Connection timed out after 2003 milliseconds

Téléchargé avec succès depuis knode-1:31699

$ curl -m 2 -O http://knode-1:31699/#/workload?namespace=default
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   811  100   811    0     0  18097      0 --:--:-- --:--:-- --:--:-- 18431

*iptables * :

_Depuis knode-1 (nodePort 31699 accessible) :_

$ sudo iptables-save | grep dashboard
-A KUBE-NODEPORTS -p tcp -m comment --comment "kube-system/kubernetes-dashboard:" -m tcp --dport 31699 -j KUBE-MARK-MASQ
-A KUBE-NODEPORTS -p tcp -m comment --comment "kube-system/kubernetes-dashboard:" -m tcp --dport 31699 -j KUBE-SVC-XGLOHA7QRQ3V22RZ
-A KUBE-SEP-4CN2KLL64AIMJOUC -s 192.168.92.6/32 -m comment --comment "kube-system/kubernetes-dashboard:" -j KUBE-MARK-MASQ
-A KUBE-SEP-4CN2KLL64AIMJOUC -p tcp -m comment --comment "kube-system/kubernetes-dashboard:" -m tcp -j DNAT --to-destination 192.168.92.6:9090
-A KUBE-SERVICES -d 10.110.163.186/32 -p tcp -m comment --comment "kube-system/kubernetes-dashboard: cluster IP" -m tcp --dport 80 -j KUBE-SVC-XGLOHA7QRQ3V22RZ
-A KUBE-SVC-XGLOHA7QRQ3V22RZ -m comment --comment "kube-system/kubernetes-dashboard:" -j KUBE-SEP-4CN2KLL64AIMJOUC

_Depuis knode-0 (nodePort 31699 inaccessible) :_

$ sudo iptables-save | grep dashboard
-A KUBE-NODEPORTS -p tcp -m comment --comment "kube-system/kubernetes-dashboard:" -m tcp --dport 31699 -j KUBE-MARK-MASQ
-A KUBE-NODEPORTS -p tcp -m comment --comment "kube-system/kubernetes-dashboard:" -m tcp --dport 31699 -j KUBE-SVC-XGLOHA7QRQ3V22RZ
-A KUBE-SEP-4CN2KLL64AIMJOUC -s 192.168.92.6/32 -m comment --comment "kube-system/kubernetes-dashboard:" -j KUBE-MARK-MASQ
-A KUBE-SEP-4CN2KLL64AIMJOUC -p tcp -m comment --comment "kube-system/kubernetes-dashboard:" -m tcp -j DNAT --to-destination 192.168.92.6:9090
-A KUBE-SERVICES -d 10.110.163.186/32 -p tcp -m comment --comment "kube-system/kubernetes-dashboard: cluster IP" -m tcp --dport 80 -j KUBE-SVC-XGLOHA7QRQ3V22RZ
-A KUBE-SVC-XGLOHA7QRQ3V22RZ -m comment --comment "kube-system/kubernetes-dashboard:" -j KUBE-SEP-4CN2KLL64AIMJOUC

Tout ce que nous devons savoir :

Le même comportement est reproductible sur RHEL 7.3.

sinetwork

Commentaire le plus utile

J'ai rencontré le même problème.
Exécutez iptables -P FORWARD ACCEPT peut résoudre votre problème. Mais pas sûr que ce soit un bogue lorsqu'il est intégré à docker v1.13.1

>Tous les commentaires

J'ai rencontré le même problème.
Exécutez iptables -P FORWARD ACCEPT peut résoudre votre problème. Mais pas sûr que ce soit un bogue lorsqu'il est intégré à docker v1.13.1

Cette page vous a été utile?
0 / 5 - 0 notes