使用NodePort類型的Service暴露應(yīng)用
在Kubernetes中,Service是用于將運行在一組Pod上的應(yīng)用程序公開為網(wǎng)絡(luò)服務(wù)的抽象概念,本文以Nginx無狀態(tài)應(yīng)用為例,介紹如何在ACK Edge集群中使用NodePort類型的Service暴露應(yīng)用。
使用NodePort類型的Service
由于在邊緣側(cè)無負(fù)載均衡,因此常見的對集群外服務(wù)暴露的方式常常采用NodePort類型的Service。在ACK Edge集群中使用NodePort Service如圖所示。部署NodePort類型的Service并選擇好后端Pod后,您可以直接通過節(jié)點地址和節(jié)點端口訪問后端服務(wù)。更多Service類型以及介紹詳情,請參見Service快速入門。
注意事項
由于ACK Edge集群中的節(jié)點常分布在不同的網(wǎng)絡(luò)域中,多個網(wǎng)絡(luò)域中的節(jié)點、容器無法相互訪問。
為確保訪問流量僅轉(zhuǎn)發(fā)到本節(jié)點池或本節(jié)點上的后端Pod,可配置Service服務(wù)拓?fù)?,以避免流量被轉(zhuǎn)發(fā)到其他網(wǎng)絡(luò)域的Pod后端而導(dǎo)致的網(wǎng)絡(luò)不通問題。具體操作,請參見節(jié)點池服務(wù)拓?fù)涔芾?/a>。
為方便您在各個網(wǎng)絡(luò)域中監(jiān)聽節(jié)點端口,并確保不同網(wǎng)絡(luò)域之間的端口不發(fā)生沖突,建議配置端口隔離。具體操作,請參見NodePort端口監(jiān)聽隔離。
操作步驟
步驟一:部署示例應(yīng)用
使用以下示例的YAML內(nèi)容,創(chuàng)建名為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
執(zhí)行以下命令,部署示例應(yīng)用。
kubectl apply -f nginx.yaml
執(zhí)行以下命令,查看示例狀態(tài)。
kubectl get deployment nginx
預(yù)期輸出:
NAME READY UP-TO-DATE AVAILABLE AGE nginx 2/2 2 2 43s
步驟二:使用NodePort類型的Service
使用以下示例服務(wù)的YAML內(nèi)容,創(chuàng)建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對應(yīng)上文中nginx.yaml的spec.selector.matchLabels對應(yīng)標(biāo)簽。 app: nginx type: NodePort
執(zhí)行以下命令,創(chuàng)建名為nginx-svc.yaml的Service,并且公開應(yīng)用。
kubectl apply -f nginx-svc.yaml
執(zhí)行以下命令,確認(rèn)NodePort類型的Service成功創(chuàng)建。
kubectl get svc my-nginx-svc
預(yù)期輸出:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nginx-svc NodePort 192.168.xxx.xxx <none> 80:31309/TCP 3s
執(zhí)行以下命令,訪問示例應(yīng)用。
curl <Node-IP>:31309 # 請將<Node-IP>替換為您需要訪問的節(jié)點地址。