《kubernetes官方文档》用暴露的ip地址去访问集群中的一个应用

本页面展示了如何创建一个Kubernetes服务对象,该服务对象暴露一个外部IP地址

目标

  • 运行5个Hello World实例.
  • 创建一个公开外部IP地址的服务对象.
  • 使用服务对象来访问正在运行的应用程序.

准备工作

  • 安装kubectl.
  • 使用像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

下一节

了解更多关于 connecting applications with services.

  • Trackback 关闭
  • 评论 (0)
  1. 暂无评论

return top