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
訪問。