Kubernetes HostPort: How to Expose Pods on Node Ports with Examples

Kubernetes HostPort

Table of Contents

Get up to 50% off now

Become a partner with CyberPanel and gain access to an incredible offer of up to 50% off on CyberPanel add-ons. Plus, as a partner, you’ll also benefit from comprehensive marketing support and a whole lot more. Join us on this journey today!

In Kubernetes, exposing applications to users, whether they are internal or external is one of the critical parts of deploying workloads. While you can use services like NodePort, ClusterIP, and LoadBalancer, another method known as Kubernetes HostPort is pretty useful as well. 

HostPort enables you to bind a container port directly to a specific port on the host node’s IP, which makes the application accessible from outside the pod and sometimes within the cluster without creating the service

In this guide, we shall walk through how the Kubernetes HostPort works, when to use it, and how to compare with other services. 

How HostPort Works in a Kubernetes Cluster

In Kubernetes, every pod has their own isolated network namespace. By default, the pods can only communicate with the outside world through the Kubernetes Services. However, whenever you use Kubernetes HostPort, you expose your pod’s container port directly on the node’s network interface. This allows the external traffic to access the container as if they were running directly on the host. 

For example, if a container listens on port 8080 and you set hostPort: 8080, that port will be accessible via the node’s IP address:

http://<node-ip>:8080

Tech Delivered to Your Inbox!

Get exclusive access to all things tech-savvy, and be the first to receive 

the latest updates directly in your inbox.

This mapping works only on the node where the pod is running, which means:

  • You must make sure that the port is not already used by another pod or process. 
  • You need to manage scheduling so that the pods that are using the same Kubernetes HostPort do not land on the same node. 

When to Use HostPort Instead of NodePort or LoadBalancer

You can use the Kubernetes HostPort in the following conditions: 

  • You need low-level access to the node’s stack, such as running VPS, DNS, or logging agents. 
  • You want to expose certain ports without creating a new Kubernetes Services, often for performance or simplicity. 
  • You are working in bare-metal clusters without the cloud load balancers and need to expose services manually. 
  • You are doing local development or testing, where simplicity matters more than scalability. 

Avoid HostPort if:

  • You need scalable, multi-node services.
  • You’re already using Kubernetes-native networking and want service discovery.
  • You don’t want to manually manage ports across nodes.

Related Article: How to Create a Single Node Kubernetes Cluster: A Complete Beginner’s Guide

HostPort vs NodePort vs ClusterIP

Here is a quick comparison to help you understand when you need to use each one of them: 

FeatureHostPortNodePortClusterIP
PurposeExpose pod on specific node’s IP and portExpose service on all nodes at a fixed portInternal-only service for cluster access
Network ScopeSpecific node IPAll node IPsWithin the cluster only
External AccessYes (to that node only)Yes (any node IP + NodePort)No (needs port-forward or ingress)
Load BalancingNoYes, limitedNo (used with kube-proxy)
Use CaseSystem agents, local access, special appsSmall-scale external servicesApp-to-app internal communication
Setup SimplicityEasyEasyVery easy
ScalabilityLow (port conflict risk)ModerateHigh

How to Use HostPort in a Kubernetes Deployment

To use Kubernetes HostPort, you need to specify the pod’s container spec alongside the container’s pod. This maps the container port to a port on the host node’s IP address. You can add the Kubernetes HostPort configuration to any pod or deployment, but you must manage it carefully to avoid the port conflicts across nodes. 

You typically define:

  • containerPort: The port your app listens to inside the container
  • hostPort: The port to expose on the node
  • hostIP (optional): The specific IP address of the node (rarely needed)

Here’s how to apply it in a real deployment YAML file.

Kubernetes HostPort YAML Example

apiVersion: apps/v1

kind: Deployment

Enhance Your CyerPanel Experience Today!
Discover a world of enhanced features and show your support for our ongoing development with CyberPanel add-ons. Elevate your experience today!

metadata:

  name: hostport-example

spec:

  replicas: 1

  selector:

    matchLabels:

      app: myapp

  template:

    metadata:

      labels:

        app: myapp

    spec:

      containers:

      – name: myapp-container

        image: nginx

        ports:

        – containerPort: 80

          hostPort: 8080

In this example:

  • The container runs NGINX on port 80.
  • That port is exposed on the host’s port 8080.
  • Access it via http://<node-ip>:8080.

Limitations and Considerations of Using Kubernetes HostPort

While using Kubernetes HostPort, you must understand the limitations that comes with it: 

  1. Port conflicts: You cannot run multiple different pods using the same HostPort. 
  2. Node affinity required: You might need to control scheduling to avoid any conflicts. 
  3. Lack of load balancing: Kubernetes HostPort does not balance the traffic between multiple nodes automatically. 
  4. Security exposure: Binding directly to the host opens ports externally to increase the attack surfaces. 
  5. Scaling limitations: Kubernetes HostPort deployments do not scale well compared to the Service types like LoadBalancer or NodePort. 

Best Practices for Kubernetes HostPort Usage

To use Kubernetes HostPort effectively, keep a check of the following best practices: 

  • Use DaemonSets for one-per-node patterns: Great for system-level agents or logging containers. 
  • Limit replica counts: Use the HostPorts using single-replica deployments or schedule pods to different nodes. 
  • Avoid port conflicts: Assign specific ports per pods or use the dynamic scheduling logic. 
  • Use firewalls and security groups: Restrict traffic to the open host ports. 
  • Consider alternatives: Use NodePort or ClusterIP+Ingress when you need scalability or routing logic.

Troubleshooting Common HostPort Issues

Using the Kubernetes HostPort is simple in the concept but it often runs into practical challenges. Here are some common issues and how to resolve them: 

  1. Port Conflict Errors

Pods fail to start with errors like Error: listen tcp 0.0.0.0:8080: bind: address already in use.

This is because two pods are trying to use the same Kubernetes HostPort. You can fix this error by: 

  • Ensure only one pod per node is using that port.
  • Use a DaemonSet instead of a Deployment if only one instance is needed per node.
  • Manually assign unique hostPort values per replica — or avoid HostPort entirely if scaling is needed.
  1. Pod Fails to Bind HostPort

Pods fail to bind HostPort, which means that your pod is running, but the port is not accessible externally. You can fix this issue by:

  • Run sudo firewall-cmd –list-ports or check iptables/nftables when the firewall is blocking external traffic. 
  • The pod is running due to a pod with an internal/ private IP. Ensure that you are using the right node IP to access it. 
  • Network plugins (CNI) may restrict HostPort usage. Test with simpler network configurations or consult your CNI documentation.
  1. Traffic Not Reaching the Pod

If you can access the host IP and port, but then it returns a connection error or timeout since the traffic is not reaching the pod. This can be fixed by: 

  • Use curl localhost:<containerPort> from within the pod, this ensures that the container is listening on a certain port. 
  • Check for health check probes causing the pod to restart or stay in CrashLoopBackOff.
  • Confirm that the hostPort is mapped to the correct containerPort in your YAML.
  1. Unexpected Load Balancing Behavior

Kubernetes HostPort does not provide any load balancing, and each pod is only reachable through the specific node it runs on. If you need any traffic distribution, consider: 

  • Using a NodePort Service instead.
  • Deploying a LoadBalancer Service or an Ingress Controller on top of a ClusterIP Service.
  1. HostPort Not Working on Certain Cloud Providers

Cloud firewall rules or security groups are blocking inbound traffic. The cloud-native networking overlays would not expose HostPort in the same manner as on bare metal. This issue can be fixed by: 

  • Open the appropriate ports in your cloud provider’s networking settings.
  • Consider using cloud-native Service types like LoadBalancer instead.

Conclusion: Should You Use HostPort in Production?

While the Kubernetes HostPort offers a simple way to expose pods directly on the node’s IP address, it comes with significant limitations.  But by understanding the valid use cases and following the best practices, you can use it effectively. 

When should I use HostPort instead of NodePort or LoadBalancer?

HostPort is ideal for node-specific services or low-level networking tasks, but it lacks scalability and load balancing. Use it only when you don’t need multi-node access or service abstraction.

Is HostPort suitable for production environments?

Generally, no. HostPort is best for specific use cases like logging agents or single-node services. For production-grade networking, use NodePortLoadBalancer, or Ingress.

How do I expose a pod using HostPort?

In your pod or deployment YAML, specify hostPort alongside containerPort. Example:
ports: - containerPort: 80 hostPort: 8080
This exposes the container on the node’s IP at port 8080.

Marium Fahim
Hi! I am Marium, and I am a full-time content marketer fueled by an iced coffee. I mainly write about tech, and I absolutely love doing opinion-based pieces. Hit me up at [email protected].
Unlock Benefits

Become a Community Member

SIMPLIFY SETUP, MAXIMIZE EFFICIENCY!
Setting up CyberPanel is a breeze. We’ll handle the installation so you can concentrate on your website. Start now for a secure, stable, and blazing-fast performance!