Ein Kubernetes Service
kann ein targetPort
und port
in der Service-Definition haben:
kind: Service
apiVersion: v1
metadata:
name: my-service
spec:
selector:
app: MyApp
ports:
- protocol: TCP
port: 80
targetPort: 9376
Was ist der Unterschied zwischen port
und targetPort
?
service
kubernetes
port
Jacob
quelle
quelle
Antworten:
Service: Dies leitet den Verkehr zu einem Pod.
TargetPort: Dies ist der tatsächliche Port, auf dem Ihre Anwendung im Container ausgeführt wird.
Port: Manchmal stellt Ihre Anwendung im Container verschiedene Dienste an einem anderen Port bereit.
Beispiel: Die eigentliche Anwendung kann ausgeführt werden,
8080
und Integritätsprüfungen für diese Anwendung können am8089
Port des Containers ausgeführt werden. Wenn Sie also den Dienst ohne Port erreichen, weiß er nicht, an welchen Port des Containers er die Anforderung umleiten soll. Der Dienst muss über eine Zuordnung verfügen, damit er den spezifischen Port des Containers erreichen kann.Wenn Sie die Taste drücken, wird
my-service:8089
der Datenverkehr an8080
den Container (targetPort) weitergeleitet. Wenn Sie drücken, wird es ebenfalls zum Container (targetPort)my-service:8443
umgeleitet8085
. Diesmyservice:8089
ist jedoch intern im Kubernetes-Cluster und kann verwendet werden, wenn eine Anwendung mit einer anderen Anwendung kommunizieren möchte. Um den Dienst von außerhalb des Clusters zu erreichen, muss jemand den Port auf dem Hostcomputer verfügbar machen, auf dem kubernetes ausgeführt wird, damit der Datenverkehr zu einem Port des Containers umgeleitet wird. Dies istnode port
(Port auf dem Host-Computer verfügbar). Im obigen Beispiel können Sie den Dienst von außerhalb des Clusters (Postbote oder ein beliebiger Rest-Client) über aufrufenhost_ip:nodePort
Sagen Sie Ihre Host - Maschine ip ist ,
10.10.20.20
um die http treffen kann, Metriken, Gesundheitsdienste durch10.10.20.20:30475
,10.10.20.20:31261
,10.10.20.20:30013
.Änderungen: Bearbeitet gemäß Raedwald- Kommentar.
quelle
port
undtargetPort
anders zu sein? Wenn Sie sich zum Beispiel Ihrhealth
Beispiel ansehen , warum machen Sie dasport
8443
statt8085
? Warum gibt es grundsätzlich zwei Parameter, anstatt nur alletargetPort
s des Dienstes verfügbar zu machen?Es hilft mir, Dinge aus der Perspektive des Dienstes zu betrachten .
nodePort
: Der Port auf dem Knoten, an dem externer Datenverkehr eingehtport
: Der Port dieses DienstestargetPort
Der Zielport auf dem Pod, an den der Datenverkehr weitergeleitet werden sollDer
nodePort
Datenverkehr wird weitergeleitet undport
an den Dienst weitergeleitet, der danntargetPort
an die Pods weitergeleitet wird.Es lohnt sich, mehr
nodePort
für den externen Verkehr zu betonen . Andere Pods im Cluster, die möglicherweise auf den Dienst zugreifen müssen, werden nur verwendetport
, nicht,nodePort
da es sich nur um internen Zugriff auf den Dienst handelt.Beachten Sie auch, dass wenn
targetPort
nicht festgelegt, standardmäßig derselbe Wert wie verwendet wirdport
. ZB80:80
für Service-Port-80
Targeting-Container-Port80
.quelle
port
und kennentargetPort
. Sie haben die Verwirrung wirklich beseitigt.Die oben von @Manikanta P gegebene Antwort ist richtig. Die Erklärung von "Port" könnte jedoch in der ersten Lesung etwas unklar sein. Ich werde mit einem Beispiel erklären:
Betrachten Sie eine Webanwendung mit ihrem statischen Inhalt (Startseite, Bilder usw.), der von httpd gehostet wird, und dem dynamischen Inhalt (z. B. Antwort auf Anfragen usw.), der von Tomcat gehostet wird. Der Webserver (oder der statische Inhalt) wird von httpd am Port
80
bereitgestellt, während der Appserver (oder der dynamische Inhalt) von tomcat am Port bereitgestellt wird8080
.Was ein Entwickler möchte: Der Benutzer sollte von außerhalb auf den Webserver zugreifen können, ABER nicht von außen auf den Appserver.
Lösung: Der Diensttyp des Webservers in seiner service.yml ist NodePort, während der Diensttyp des Appservers in seiner service.yml ClusterIP ist.
Code für die service.yml des Webservers:
Code für Appservers service.yml
Beachten Sie auch,
httpd.conf
dass wir in die Datei des Webservers die IP schreiben, die die Anforderung eines Benutzers an den Appserver umleitet. Diese IP lautet :host_IP:5050
.Was genau passiert hier? Ein Benutzer schreibt
hostIP:30475
und sieht die Seite des Webservers. Dies liegt daran, dass es von httpd am Port80
(Zielport) bereitgestellt wird. Wenn ein Benutzer auf eine Schaltfläche klickt, wird eine Anfrage gestellt. Diese Anforderung wird an den Appserver umgeleitet, da in derhttpd.conf
Datei der Port5050
erwähnt wird und dies der Port ist, an dem der Container des Appservers und der Conatainer des Webservers intern kommunizieren. Wenn der App-Server die Anforderung empfängt, kann er die Anforderung bearbeiten, da Tomcat am Port ausgeführt wird8080
.quelle
httpd.conf
in "weil in der httpd.conf-Datei der Port 5050 erwähnt wird"Diese Antwort bezieht sich zusätzlich zu den anderen Antworten auf die Dokumentation von Kubernetes:
https://kubernetes.io/docs/concepts/services-networking/connect-applications-service/ :
https://kubernetes.io/docs/concepts/services-networking/connect-applications-service/ :
quelle
"Zielport" ist der Port, auf dem Ihr Container ausgeführt wird.
Port: Port leitet den Datenverkehr vom Dienst zum Container um.
Bereitstellung der Bereitstellung
NodePort: ist der Port, über den der Dienst extern auf den Port zugreifen kann.
Hoffe das antwortet.
quelle
Kurz gesagt
nodeport:
Lauscht externe Anforderungen auf allen Worker-Knoten auf nodeip: port und leitet die Anforderung an port weiter.port:
Interner Cluster-Service-Port für Container und überwacht eingehende Anforderungen vom Nodeport und leitet sie an targetPort weiter.targetPort:
Empfangen Sie die Anfrage vom Port und leiten Sie sie an den Container Pod (Port) weiter, wo sie abgehört wird. Selbst wenn Sie dies nicht angeben, werden standardmäßig dieselben Portnummern wie der Port zugewiesen.quelle
Wenn der Container Port 9376 überwacht, ist targetPort : 9376
Wenn ein Dienst Port 80 abhört, dann Port : 80
Dann sieht die Konfiguration der Service-Ports wie folgt aus
Schließlich wurde die Anforderung an den Port des Dienstes empfangen und an den Zielport des Pods weitergeleitet.
quelle