《kubernetes官方文件》使用服務訪問叢集中的應用
阿新 • • 發佈:2018-12-22
目標
- 執行兩個Hello World例項。
- 建立一個服務物件暴露節點埠。
- 使用服務物件訪問執行的應用。
準備工作
您需要有一個Kubernetes叢集,並且必須配置kubectl命令列工具來與您的叢集通訊。如果您還沒有叢集,您可以使用Minikube建立一個叢集,或者您可以使用這些Kubernetes平臺:
檢查版本號, 輸入 kubectl version
.
為執行在兩個Pods中的應用程式建立一個服務
- 在叢集中執行Hello World:
kubectl run hello-world --replicas=2 --labels="run=load-balancer-example" --image=gcr.io/google-samples/node-hello:1.0 --port=8080
前面的命令建立一個部署 物件和一個相關的ReplicaSet物件。ReplicaSet有兩個Pod,每一個都執行Hello World。
- 顯示關於部署的資訊:
kubectl get deployments hello-world kubectl describe deployments hello-world
- 顯示關於您的副本集(ReplicaSet )物件的資訊:
kubectl get replicasets kubectl describe replicasets
- 建立一個暴露部署的服務物件:
kubectl expose deployment hello-world --type=NodePort --name=example-service
- 顯示關於服務的資訊:
kubectl describe services example-service
輸出資訊類似於:
Name: example-service Namespace: default Labels: run=load-balancer-example Annotations: <none> Selector: run=load-balancer-example Type: NodePort IP: 10.32.0.16 Port: <unset> 8080/TCP Endpoints: 10.200.1.4:8080,10.200.2.5:8080 Session Affinity: None Events: <none>
請注意該服務的NodePort值。例如,在前面的輸出中,NodePort值是31496.
- 列出執行Hello World程式的Pod:
kubectl get pods --selector="run=load-balancer-example" --output=wide
輸出資訊類似於:
NAME READY STATUS ... IP NODE hello-world-2895499144-bsbk5 1/1 Running ... 10.200.1.4 worker1 hello-world-2895499144-m1pwt 1/1 Running ... 10.200.2.5 worker2
- 獲取一個正在執行Hello World pod的節點的公共IP地址。如何獲得這個地址取決於您如何設定叢集。例如,如果您正在使用Minikube,您可以通過執行
kubectl cluster-info
來檢視節點地址。如果您使用的是Google Compute Engine例項,您可以使用gcloud compute instances list
命令來檢視節點的公共地址。有關此命令的更多資訊,請參閱GCE documentation.。 - 在您選擇的節點上,建立一個允許在節點埠上傳輸TCP通訊的防火牆規則。例如,如果您的服務NodePort值為31568,則建立一個允許TCP在埠31568上傳輸的防火牆規則。不同的雲提供商提供了不同的配置防火牆規則的方法。例如,檢視關於防火牆規則的 the GCE documentation on firewall rules, 。
- 使用節點地址和節點埠來訪問Hello World應用:
curl http://<public-node-ip>:<node-port>
<public-node-ip>
是您的節點的公共IP地址,<node-port>
是您的服務的節點NodePort 值。對成功請求的響應是一個hello訊息:
Hello Kubernetes!
使用服務配置檔案
清理
要刪除服務,輸入以下命令:
kubectl delete services example-service
要刪除部署、副本集(ReplicaSet)和執行Hello World應用的Pods,請輸入以下命令:
kubectl delete deployment hello-world