1. 程式人生 > >《kubernetes官方文件》用暴露的ip地址去訪問叢集中的一個應用

《kubernetes官方文件》用暴露的ip地址去訪問叢集中的一個應用

本頁面展示瞭如何建立一個Kubernetes服務物件,該服務物件暴露一個外部IP地址

目標

  • 執行5個Hello World例項.
  • 建立一個公開外部IP地址的服務物件.
  • 使用服務物件來訪問正在執行的應用程式.

準備工作

  • 使用像Google Kubernetes引擎或Amazon Web Services這樣的雲服務提供商來建立Kubernetes叢集。本教程建立一個外部負載平衡器 external load balancer,它需要一個雲提供程式。
  • 配置kubectl,與您的Kubernetes API伺服器進行通訊。有關說明,請參閱雲提供商的文件.

為執行在5個pod中的應用建立一個服務

  1. 在叢集中執行Hello World應用程式:
    kubectl run hello-world --replicas=5 --labels="run=load-balancer-example" --image=gcr.io/google-samples/node-hello:1.0  --port=8080
    

    The preceding command creates a Deployment object and an associated ReplicaSet object. The ReplicaSet has five Pods, each of which runs the Hello World application.

  2. 顯示關於部署的資訊:
    kubectl get deployments hello-world
    kubectl describe deployments hello-world
    
  3. 顯示關於你的副本集物件的資訊:
    kubectl get replicasets
    kubectl describe replicasets
    
  4. 建立一個公開部署的服務物件:
    kubectl expose deployment hello-world --type=LoadBalancer --name=my-service
    
  5. 顯示關於服務的資訊:
    kubectl get services my-service
    

    輸出類似於:

     NAME         CLUSTER-IP     EXTERNAL-IP      PORT(S)    AGE
     my-service   10.3.245.137   104.198.205.71   8080/TCP   54s
    

    注意:如果外部IP地址顯示為<pending>,等待一分鐘,然後再次輸入相同的命令。

  6. 顯示關於服務的詳細資訊:
    kubectl describe services my-service
    

    輸出類似於:

     Name:           my-service
     Namespace:      default
     Labels:         run=load-balancer-example
     Annotations:    <none>
     Selector:       run=load-balancer-example
     Type:           LoadBalancer
     IP:             10.3.245.137
     LoadBalancer Ingress:   104.198.205.71
     Port:           <unset> 8080/TCP
     NodePort:       <unset> 32377/TCP
     Endpoints:      10.0.0.6:8080,10.0.1.6:8080,10.0.1.7:8080 + 2 more...
     Session Affinity:   None
     Events:         <none>
    

    請注意由您的服務暴露的外部IP地址(LoadBalancer Ingress)。在這個例子中,外部IP地址是104.198.205.71。還要注意PortNodePort的值。在本例中,Port是8080,而NodePort是32377

  7. 在前面的輸出中,您可以看到幾個服務端點:10.0.0.6:8080 10.0.1.6:8080 10.0.1.7:8080 + 2。這些是執行Hello World應用程式的pods的內部地址。要驗證這些是pod地址,輸入:
    kubectl get pods --output=wide
    

    輸出類似於:

     NAME                         ...  IP         NODE
     hello-world-2895499144-1jaz9 ...  10.0.1.6   gke-cluster-1-default-pool-e0b8d269-1afc
     hello-world-2895499144-2e5uh ...  10.0.1.8   gke-cluster-1-default-pool-e0b8d269-1afc
     hello-world-2895499144-9m4h1 ...  10.0.0.6   gke-cluster-1-default-pool-e0b8d269-5v7a
     hello-world-2895499144-o4z13 ...  10.0.1.7   gke-cluster-1-default-pool-e0b8d269-1afc
     hello-world-2895499144-segjf ...  10.0.2.5   gke-cluster-1-default-pool-e0b8d269-cpuc
    
  8. 使用外部IP地址(LoadBalancer Ingress)來訪問Hello World:
    curl http://<external-ip>:<port>
    

    <external-ip>是您的服務的外部IP地址(LoadBalancer Ingress),<port>是您服務描述中的NodePort的值。如果你使用minikube,輸入minikube service my-service將自動開啟在瀏覽器中開啟Hello World。

  9. 對成功請求的響應是一個hello訊息:
     Hello Kubernetes!
    

清理

要刪除服務,請輸入以下命令:

kubectl delete services my-service

要刪除部署、副本集和執行Hello World程式的Pod,請輸入以下命令:

kubectl delete deployment hello-world

下一節