Search code examples
kubernetesgoogle-kubernetes-enginekubernetes-networking

What is the cluster IP in Kubernetes?


I have created a cluster of three nodes: one master, two minions. How to check the cluster IP in Kubernetes? Is it the IP of the master node?


Solution

  • ClusterIP can mean 2 things: a type of service which is only accessible within a Kubernetes cluster, or the internal ("virtual") IP of components within a Kubernetes cluster. Assuming you're asking about finding the internal IP of a cluster, it can be accessed in 3 ways (using the simple-nginx example):

    1. Via command line kubectl utility:

      $ 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. Via the kubernetes API (here I've used kubectl proxy to route through localhost to my cluster):

      $ 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. Via the $<NAME>_SERVICE_HOST environment variable within a Kubernetes container (in this example my-nginx-yczg9 is the name of a pod in the cluster):

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

    More details on service IPs can be found in the Services in Kubernetes documentation, and the previously mentioned simple-nginx example is a good example of exposing a service outside your cluster with the LoadBalancer service type.