Kubernetes : why is HostIP ignored in my pod manifest

2/15/2021

From what I understand from the documentation (though it is not quite clear) , the hostIP:hostPort couple can be used to expose a container in a cluster (meaning, other pods/services in the cluster can access my container via hostIP:hostPort). am I getting it right?

However, when I deploy a pod like this one for instance :

apiVersion: v1
kind: Pod
metadata:
  name: firstpod
spec:
  containers:
  - name: container
    image: hashicorp/http-echo
    args:
      - "-text=banana"
    ports:
      - containerPort: 5678
        hostIP: 192.168.150.201
        hostPort: 5678
  restartPolicy: Never
  terminationGracePeriodSeconds: 0

Where 192.168.150.201 is the ip address of a node in my cluster (lets call it node1) Most often, my pod does not get scheduled on node1. Evenmore, When I "force the pod to be scheduled on node1 (with nodeName for instance) I cant curl my app on hostIP:hostPort i.e.

curl 192.168.150.201:5678
curl: (7) Failed to connect to 192.168.150.201 port 5678: Connection refused

I have checked my pod is up and running (10.38.0.14 is firstpod ip address)

# curl 10.38.0.14:5678
banana

Any ideas?

-- Abdelghani
kubernetes
port

1 Answer

2/16/2021

You have to add hostNetwork= true so it the pod will share host's network space.

For example you can deploy following manifest:

apiVersion: v1
kind: Pod
metadata:
  name: secondpod
spec:
  containers:
  - name: container
    image: hashicorp/http-echo
    args:
      - "-text=banana"
    ports:
      - containerPort: 5678
        hostIP: 10.156.0.46
        hostPort: 5678
  restartPolicy: Never
  hostNetwork: true

Where 10.156.0.46 is my host's IP and once deployed:

$ kubectl get pod -o wide
NAME        READY   STATUS    RESTARTS   AGE   IP               NODE     NOMINATED NODE   READINESS GATES
secondpod   1/1     Running   0          10m   10.156.0.46      worker   <none>           <none>

you can successfully curl it:

$ curl 10.156.0.46:5678
banana
-- kool
Source: StackOverflow