【问题标题】:What is the cluster IP in Kubernetes?Kubernetes 中的集群 IP 是什么?
【发布时间】:2016-01-29 04:56:02
【问题描述】:

我创建了一个由三个节点组成的集群:一个主节点,两个小节点。 如何在 Kubernetes 中查看集群 IP? 是主节点的IP吗?

【问题讨论】:

标签: kubernetes google-kubernetes-engine kubernetes-networking


【解决方案1】:

集群IP只分配给服务,是Kubernetes的内部ip。

【讨论】:

    【解决方案2】:

    ClusterIP 可能意味着两件事:一种只能在 Kubernetes 集群内访问的服务,或者 Kubernetes 集群内组件的内部(“虚拟”)IP。假设您要查找集群的内部 IP,可以通过 3 种方式访问​​它(使用 simple-nginx example):

    1. 通过命令行kubectl 实用程序:

      $ kubectl describe service my-nginx
      Name:           my-nginx
      Namespace:      default
      Labels:         run=my-nginx
      Selector:       run=my-nginx
      Type:           LoadBalancer
      IP:         10.123.253.27
      LoadBalancer Ingress:   104.197.129.240
      Port:           <unnamed>   80/TCP
      NodePort:       <unnamed>   30723/TCP
      Endpoints:      10.120.0.6:80
      Session Affinity:   None
      No events.
      
    2. 通过 kubernetes API(这里我使用 kubectl proxy 来通过 localhost 路由到我的集群):

      $ kubectl proxy &
      $ curl -G http://localhost:8001/api/v1/namespaces/default/services/my-nginx
      {
        "kind": "Service",
        "apiVersion": "v1",
        "metadata": <omitted>,
        "spec": {
          "ports": [
            {
              "protocol": "TCP",
              "port": 80,
              "targetPort": 80,
              "nodePort": 30723
            }
          ],
          "selector": {
            "run": "my-nginx"
          },
          "clusterIP": "10.123.253.27",
          "type": "LoadBalancer",
          "sessionAffinity": "None"
        },
        "status": {
          "loadBalancer": {
            "ingress": [
              {
                "ip": "104.197.129.240"
              }
            ]
          }
        }
      }
      
    3. 通过 Kubernetes 容器中的 $&lt;NAME&gt;_SERVICE_HOST 环境变量(在本例中,my-nginx-yczg9 是集群中的 pod 的名称):

      $ kubectl exec my-nginx-yczg9 -- sh -c 'echo $MY_NGINX_SERVICE_HOST'
      10.123.253.27
      

    有关服务 IP 的更多详细信息,请参阅 Services in Kubernetes 文档,前面提到的 simple-nginx example 是使用 LoadBalancer 服务类型在集群外部公开服务的一个很好的示例。

    【讨论】:

    【解决方案3】:

    运行这个

    $ kubectl cluster-info
    

    它显示这样的结果,您可以在其中看到 Kubernetes 主 IP

    【讨论】:

    • 这个答案是我的期望之一。谢谢!
    【解决方案4】:

    Cluster IP 是 K8s 分配给服务的虚拟 IP。是K8s内部IP。

    集群 IP 使其可以从任何 Kubernetes 集群的节点访问。为此目的使用虚拟 IP 地址可以让多个 pod 在同一个节点上公开相同的端口——所有这些 pod 都可以通过唯一的 IP 地址访问。

    这个 IP 是稳定的,在服务生命周期内永远不会改变(除非明确删除)。

    2 个不同的 pod 可以使用此 IP 进行通信,但我建议使用集群 DNS 服务。

    【讨论】:

    • 我们可以在不购买外部 dns 名称的情况下为集群 IP 分配名称吗?能否建议您实现这一目标?
    • 我尝试从我在 minikube 中的一个 pod ping & traceroute 到 cluster-ip,但两个命令都没有成功。我也尝试过“minikube ssh”,然后运行 ​​ping 和 traceroute(在安装 iputils-ping 和 traceroute 包之后),但也没有成功。我在这里有什么遗漏吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-04
    • 2017-01-02
    • 2020-07-28
    • 2018-12-11
    • 2018-05-05
    • 2019-02-28
    • 1970-01-01
    相关资源
    最近更新 更多