Kubernetes 中的集群 IP 是多少?

What is the cluster IP in Kubernetes?

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

集群IP只分配给service,是Kubernetes的内网ip。

ClusterIP 可能意味着两件事:一种只能在 Kubernetes 集群中访问的服务类型,或 Kubernetes 中组件的内部 ("virtual") 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 通过本地主机路由到我的集群):

    $ 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 容器中的 $<NAME>_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 服务类型。

运行这个

$ kubectl cluster-info

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

集群IP是K8s分配给服务的虚拟IP。是K8s的内网IP。

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

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

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