在Kubernetes中,Service是用於將運行在一組Pod上的應用程式公開為網路服務的抽象概念,本文以Nginx無狀態應用為例,介紹如何在ACK Edge叢集中使用NodePort類型的Service暴露應用。
使用NodePort類型的Service
由於在邊緣側無負載平衡,因此常見的對叢集外服務暴露的方式常常採用NodePort類型的Service。在ACK Edge叢集中使用NodePort Service如圖所示。部署NodePort類型的Service並選擇好後端Pod後,您可以直接通過節點地址和節點連接埠訪問後端服務。更多Service類型以及介紹詳情,請參見Service管理。
注意事項
由於ACK Edge叢集中的節點常分布在不同的網路域中,多個網路域中的節點、容器無法相互訪問。
為確保訪問流量僅轉寄到本節點池或本節點上的後端Pod,可配置Service服務拓撲,以避免流量被轉寄到其他網路域的Pod後端而導致的網路不通問題。具體操作,請參見節點池服務拓撲管理。
為方便您在各個網路域中監聽節點連接埠,並確保不同網路域之間的連接埠不發生衝突,建議配置連接埠隔離。具體操作,請參見NodePort連接埠監聽隔離。
操作步驟
步驟一:部署樣本應用
使用以下樣本的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執行以下命令,部署樣本應用。
kubectl apply -f nginx.yaml執行以下命令,查看樣本狀態。
kubectl get deployment nginx預期輸出:
NAME READY UP-TO-DATE AVAILABLE AGE nginx 2/2 2 2 43s
步驟二:使用NodePort類型的Service
使用以下樣本服務的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執行以下命令,建立名為nginx-svc.yaml的Service,並且公開應用。
kubectl apply -f nginx-svc.yaml執行以下命令,確認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執行以下命令,訪問樣本應用。
curl <Node-IP>:31309 # 請將<Node-IP>替換為您需要訪問的節點地址。