Skip to Content

K8s – Node IPs vs Pod IPs vs Cluster IPs vs NodePort

In a Kubernetes environment, understanding the different types of IP addresses and how they are used is crucial for managing communication within and outside the cluster.

understanding  different types of IP addresses in Kubernetes

To illustrate these concepts, let’s consider a scenario with a Kubernetes cluster consisting of 3 nodes, 3 Pods, each part of different applications or services.

1. Node IPs

Each of the 3 nodes in the cluster has its own unique Node IP. These are the IP addresses assigned to the nodes (physical or virtual machines) by the underlying network.

  • Usage: Node IPs are used for external communication with the cluster, for administrative access, and for services exposed directly on the nodes.
  • Example: Node 1 has an IP 192.168.1.1, Node 2 has 192.168.1.2, and Node 3 has 192.168.1.3.

2. Pod IPs

Each Pod in the cluster, residing on a different node, receives a unique Pod IP from the cluster’s internal Pod network range. These IPs are used for inter-Pod communication within the cluster.

Get Your Free Linux training!

Join our free Linux training and discover the power of open-source technology. Enhance your skills and boost your career! Learn Linux for Free!
  • Usage: Pods use these IPs to communicate with each other, regardless of which node they are on, as long as they are within the same Kubernetes cluster.
  • Example: The Pod on Node 1 has an IP 10.244.0.1, the Pod on Node 2 has 10.244.0.2, and the Pod on Node 3 has 10.244.0.3.

3. ClusterIP

If a service is created in the cluster to group these Pods, it will be assigned a ClusterIP. This is an internal IP address used by the service to balance incoming requests to its Pods.

  • Usage: ClusterIP allows in-cluster services and Pods to communicate with the service without knowing the individual Pod IPs, providing a stable internal interface.
  • Example: A ClusterIP service created to balance traffic between the three Pods might have an IP 10.100.10.1.

4. NodePort

To expose one of the services externally, a NodePort service can be used. This type of service opens a specific port on all nodes’ IPs, and any traffic sent to this port is forwarded to the service.

  • Usage: External clients can access the service by sending requests to any of the node’s IPs at the designated NodePort. Kubernetes routes these requests to the appropriate Pod.
  • Example: If a NodePort service is configured with port 32000, external clients can access the service using 192.168.1.1:32000, 192.168.1.2:32000, or 192.168.1.3:32000.

5. External IPs

If a service needs to be exposed with an external IP without using a LoadBalancer, it can be assigned an External IP. This is less common and typically requires additional routing or NAT configuration on the network.

  • Usage: Directly access a service from outside the Kubernetes cluster using an externally routable IP.
  • Example: A service could be manually assigned an external IP like 203.0.113.5 that routes directly to one of the nodes, which then forwards traffic to the service.

6. LoadBalancer IP

In cloud environments, using a LoadBalancer type service will provision an external IP from the cloud provider’s load balancer, offering a robust and scalable way to expose services.

  • Usage: Automatically handles incoming traffic, distributing it across the Pods of the service, and provides a single access point via the LoadBalancer IP.
  • Example: The cloud provider assigns an IP 203.0.113.10 to the LoadBalancer, which then routes external traffic to the service.

How to retrieve various IP addresses in a Kubernetes environment

To retrieve various IP addresses in a Kubernetes environment, you can use kubectl, the command-line interface for Kubernetes. Here’s how to find different types of IP addresses using kubectl commands:

1. Node IPs

To get the IP addresses of all nodes in the cluster:

kubectl get nodes -o wide

This command lists all nodes along with additional information.

2. Pod IPs

To list all Pods in a specific namespace along with their IP addresses:

kubectl get pods -n <namespace> -o wide

Replace <namespace> with the name of your namespace. This command displays all Pods in the specified namespace, including their IP addresses in the IP column.

3. ClusterIP

To find the ClusterIP of a specific service:

kubectl get svc <service-name> -n <namespace>

Replace <service-name> with your service’s name and <namespace> with the namespace where the service is deployed. The ClusterIP will be listed in the CLUSTER-IP column.

4. NodePort

To find the NodePort of a service along with its ClusterIP:

kubectl get svc <service-name> -n <namespace>

This command shows the details of the specified service, including its NodePort (if available) under the PORT(S) column, typically displayed as 80:30007/TCP, where 30007 would be the NodePort.

5. External IPs (for Services with External IPs)

If you have services with manually assigned external IPs or services of type LoadBalancer:

kubectl get svc -n <namespace>

This lists all services, including those with external IPs under the EXTERNAL-IP column.

6. LoadBalancer IP

For services of type LoadBalancer, especially in cloud environments:

kubectl get svc <service-name> -n <namespace>

The IP assigned by the LoadBalancer will be visible under the EXTERNAL-IP column.

Example Commands

  • To get all node IPs:
    kubectl get nodes -o wide
    
  • To get Pod IPs in the default namespace:
    kubectl get pods -o wide
    
  • To get the ClusterIP of a service named frontend:
    kubectl get svc frontend

These commands are essential tools for navigating and managing the network aspects of a Kubernetes cluster, allowing you to access and troubleshoot connectivity issues effectively.

Conclusion

In this 3-node Kubernetes cluster setup, each component—nodes, Pods, and services—utilizes specific IP types for different communication needs, ensuring efficient and scalable networking both within the cluster and for external access. Understanding these IP types and their uses is fundamental to managing and troubleshooting network connectivity in Kubernetes environments.