全部產品
Search
文件中心

Container Service for Kubernetes:使用NodePort類型的Service暴露應用

更新時間:Dec 26, 2025

在Kubernetes中,Service是用於將運行在一組Pod上的應用程式公開為網路服務的抽象概念,本文以Nginx無狀態應用為例,介紹如何在ACK Edge叢集中使用NodePort類型的Service暴露應用。

使用NodePort類型的Service

由於在邊緣側無負載平衡,因此常見的對叢集外服務暴露的方式常常採用NodePort類型的Service。在ACK Edge叢集中使用NodePort Service如圖所示。部署NodePort類型的Service並選擇好後端Pod後,您可以直接通過節點地址和節點連接埠訪問後端服務。更多Service類型以及介紹詳情,請參見Service管理

image

注意事項

由於ACK Edge叢集中的節點常分布在不同的網路域中,多個網路域中的節點、容器無法相互訪問。

  • 為確保訪問流量僅轉寄到本節點池或本節點上的後端Pod,可配置Service服務拓撲,以避免流量被轉寄到其他網路域的Pod後端而導致的網路不通問題。具體操作,請參見節點池服務拓撲管理

  • 為方便您在各個網路域中監聽節點連接埠,並確保不同網路域之間的連接埠不發生衝突,建議配置連接埠隔離。具體操作,請參見NodePort連接埠監聽隔離

操作步驟

步驟一:部署樣本應用

  1. 使用以下樣本的YAML內容,建立名為nginx.yaml檔案。

    apiVersion: apps/v1 
    kind: Deployment
    metadata:
      name: nginx   
      labels:
        app: nginx
    spec:
      replicas: 2     
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
            ports:
            - containerPort: 80           
  2. 執行以下命令,部署樣本應用。

    kubectl apply -f nginx.yaml
  3. 執行以下命令,查看樣本狀態。

    kubectl get deployment nginx

    預期輸出:

    NAME       READY   UP-TO-DATE   AVAILABLE   AGE
    nginx      2/2     2            2           43s

步驟二:使用NodePort類型的Service

  1. 使用以下樣本服務的YAML內容,建立nginx-svc.yaml的檔案。

    apiVersion: v1
    kind: Service
    metadata:
      labels:
        app: nginx
      name: nginx-svc
      namespace: default
    spec:
      ports:
      - port: 80
        protocol: TCP
        targetPort: 80
      selector:                # 其中spec.selector對應上文中nginx.yaml的spec.selector.matchLabels對應標籤。
        app: nginx
      type: NodePort
  2. 執行以下命令,建立名為nginx-svc.yaml的Service,並且公開應用。

    kubectl apply -f nginx-svc.yaml
  3. 執行以下命令,確認NodePort類型的Service成功建立。

    kubectl get svc nginx-svc

    預期輸出:

    NAME         TYPE        CLUSTER-IP        EXTERNAL-IP   PORT(S)        AGE
    nginx-svc    NodePort    192.168.xxx.xxx   <none>        80:31309/TCP   3s
  4. 執行以下命令,訪問樣本應用。

    curl <Node-IP>:31309 # 請將<Node-IP>替換為您需要訪問的節點地址。