Kubernetes 服務定義中 targetPort 和 port 的區別
一、概述
Kubernetes 是一種流行的容器編排系統,用於部署和管理容器化應用程序。作為這個生態系統的重要組成部分, Kubernetes Service提供了一個穩定的端點,用於訪問在 Kubernetes 集群中運行的 pod。
Service消除了知道 IP 地址或端口的需要。但是,為了確保將流量正確路由到負責的 pod,在定義 Kubernetes 服務時了解port和targetPort字段之間的區別非常重要Service.儘管這些字段可能看起來相似,但它們有不同的用途,因此正確配置它們至關重要。
在本教程中,我們將討論port和targetPort之間的區別,並了解如何正確配置它們以確保Service和 pod 之間的有效通信。
2. 什麼是port ?
Service定義指定Service將使用port字段偵聽傳入流量的端口號。該Service使用此端口將流量路由到它負責的 pod。
以下是port字段設置為8080 Service的 YAML 定義示例:
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: my-app
ports:
- name: http
port: 8080
protocol: TCP
targetPort: 8080
我們將port字段設置為8080 ,它將傳入流量定向到此Service的端口8080 。同樣,我們也將targetPort字段設置為8080 ,這會將流量路由到該Service負責的 pod,具體到它們的端口8080 。
3. 什麼是targetPort ?
在Service定義中, targetPort字段在將流量路由到Service的 pod 中起著至關重要的作用。具體來說,該字段設置為Service負責將流量路由到的 pod 的端口號。通過這樣做,我們可以確保將流量定向到適當的 pod,並確保我們的Service按預期運行。
為了說明這一點,我們假設一個 pod 在端口8080上運行一個 Web 服務器。在這種情況下, Service定義中的targetPort字段將設置為8080 ,這使得流量能夠路由到該特定 pod。正確設置targetPort字段對於維護我們應用程序的可靠性和可用性至關重要。
以下是targetPort字段設置為8080 Service的 YAML 定義示例:
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: my-app
ports:
- name: http
port: 80
protocol: TCP
targetPort: 8080
targetPort字段將流量路由到Service的 pod 上的端口8080 。 port字段將傳入流量定向到Service上的端口80 。
4. port和targetPort的區別
port和targetPort之間的主要區別在於port指定Service的傳入流量的偵聽端口。 targetPort字段指定用於將流量路由到Service的 pod 的端口號。
簡單來說, port用於偵聽來自外部客戶端的傳入流量,而targetPort是Service與負責處理該流量的 pod 的內部通信端口。
5.結論
在本文中,我們了解了port和targetPort字段在 Kubernetes Service定義中的重要性。了解它們的差異對於有效地將流量路由到負責的 pod 至關重要。 targetPort應設置為 pod 的端口號和port到客戶端可訪問的外部端口以供Service訪問。