操作場景
節點訪問( NodePort )是指在每個節點的IP上開放一個靜態端口,通過靜態端口對外暴露服務。節點訪問 ( NodePort )會路由到ClusterIP服務,這個ClusterIP服務會自動創建。通過請求 :,可以從集群的外部訪問一個NodePort服務。
圖 NodePort訪問

約束與限制
- “節點訪問 ( NodePort )”默認為VPC內網訪問,如果需要使用彈性IP通過公網訪問該服務,請提前在集群的節點上綁定彈性IP。
- 創建service后,如果服務親和從集群級別切換為節點級別,連接跟蹤表將不會被清理,建議用戶創建service后不要修改服務親和屬性,如需修改請重新創建service。
- VPC網絡模式下,當某容器A通過NodePort類型服務發布時,且服務親和設置為節點級別(即externalTrafficPolicy為local),部署在同節點的容器B將無法通過節點IP+NodePort訪問容器A。
創建NodePort類型Service
步驟 1 登錄CCE控制臺,單擊集群名稱進入集群。
步驟 2 在左側導航欄中選擇“服務發現”,在右上角單擊“創建服務”。
步驟 3 設置集群內訪問參數。
-
Service名稱: 自定義服務名稱,可與工作負載名稱保持一致。
-
訪問類型 :選擇“節點訪問 NodePort”。
-
命名空間:工作負載所在命名空間。
-
服務親和: 詳情請參見externalTrafficPolicy(服務親和)。
- 集群級別:集群下所有節點的IP+訪問端口均可以訪問到此服務關聯的負載,服務訪問會因路由跳轉導致一定性能損失,且無法獲取到客戶端源IP。
- 節點級別:只有通過負載所在節點的IP+訪問端口才可以訪問此服務關聯的負載,服務訪問沒有因路由跳轉導致的性能損失,且可以獲取到客戶端源IP。
-
選擇器: 添加標簽,Service根據標簽選擇Pod,填寫后單擊“添加”。也可以引用已有工作負載的標簽,單擊“引用負載標簽”,在彈出的窗口中選擇負載,然后單擊“確定”。
-
IPv6: 默認不開啟,開啟后服務的集群內IP地址(ClusterIP)變為IPv6地址。該功能僅在1.15及以上版本的集群創建時開啟了IPv6功能才會顯示。
-
端口配置:
- 協議:請根據業務的協議類型選擇。
- 服務端口:Service使用的端口,端口范圍為1-65535。
- 容器端口:工作負載程序實際監聽的端口,需用戶確定。例如nginx默認使用80端口。
- 節點端口:即NodePort,建議選擇“自動生成”;也可以指定端口,默認范圍為30000-32767。
步驟 4 單擊“確定”,創建Service。
externalTrafficPolicy(服務親和)
NodePort類型的Service接收請求時先從訪問到節點,然后轉到Service,再由Service選擇一個Pod轉發到該Pod,選擇的Pod不一定在接收請求的節點上。默認情況下,從任意節點IP+服務端口都能訪問到后端工作負載,當Pod不在接收請求的節點上時,請求會在跳轉到Pod所在的節點,帶來一定性能損失。
Service有一個配置參數externalTrafficPolicy,如下所示。
apiVersion: v1
kind: Service
metadata:
name: nginx-nodeport
spec:
externalTrafficPolicy: local
ports:
- name: service
nodePort: 30000
port: 80
protocol: TCP
targetPort: 80
selector:
app: nginx
type: NodePort
當externalTrafficPolicy取值為local時,通過節點IP:服務端口的請求只會轉發給本節點上的Pod,如果節點沒有Pod的話請求會掛起。
externalTrafficPolicy還有一個取值是 cluster ,也是默認取值,就是前面說的請求會在集群內轉發。
在CCE 控制臺創建NodePort類型Service時也可以配置該參數。

總結externalTrafficPolicy兩個取值。
- cluster(集群級別):集群下所有節點的IP+訪問端口均可以訪問到此服務關聯的負載,服務訪問會因路由跳轉導致一定性能損失,且無法獲取到客戶端源IP。
- local(節點級別):只有通過負載所在節點的IP+訪問端口才可以訪問此服務關聯的負載,服務訪問沒有因路由跳轉導致的性能損失,且可以獲取到客戶端源IP。