5

Ich habe einen Dienst auf Kubernetes GKE wie folgt:Warum kann ich nicht über die IP-Adresse auf meinen Kubernetes-Service zugreifen?

$ kubectl describe service staging 
Name:   staging 
Namespace:  default 
Labels:   <none> 
Selector:  app=jupiter 
Type:   NodePort 
IP:    10.11.246.27 
Port:   <unnamed> 80/TCP 
NodePort:  <unnamed> 31683/TCP 
Endpoints:  10.8.0.33:1337 
Session Affinity: None 
No events. 

ich den Dienst von einer VM über einen seiner Endpunkte direkt zugreifen kann (10.8.0.21:1337) oder über den Knotenport (10.240.251.174:31683 in meinem Fall). Wenn ich jedoch versuche, auf 10.11.246.27:80 zuzugreifen, bekomme ich nichts. Ich habe auch Ports 1337 und 31683 probiert.

Warum kann ich den Dienst nicht über seine IP zugreifen? Brauche ich eine Firewall-Regel oder etwas?

Antwort

9

Service-IPs sind virtuelle IP-Adressen, die von kube-proxy verwaltet werden. Damit diese IP-Adresse aussagekräftig ist, muss der Client auch ein Teil des "Overlay" -Netzwerkes von kube-proxy sein (lassen Sie den kube-proxy laufen, der auf den gleichen API-Server zeigt).

Pod-IPs auf GCE/GKE werden von GCE Routes verwaltet, was eher einer "Unterlagerung" aller VMs im Netzwerk entspricht.

Es gibt mehrere Möglichkeiten, von außerhalb des Clusters auf nicht öffentliche Dienste zuzugreifen. Here sie sind ausführlicher, aber kurz:

  1. Erstellen Sie eine Bastion GCE Route für Ihre Cluster-Dienste.
  2. Installieren Sie den Kube-Proxy Ihres Clusters überall dort, wo Sie auf die Dienste des Clusters zugreifen möchten.