Kubernetes: get real client source IP of incoming packet

1/13/2016

I want to get the actual IP using which the client sent out the packet in my app sitting in a kubernetes pod.

I did some searches and found that this was not supported earlier but supported later.

I ungraded my setup and here is the current setup version:

$ kubectl version
Client Version: version.Info{Major:"1", Minor:"1", GitVersion:"v1.1.3", GitCommit:"6a81b50c7e97bbe0ade075de55ab4fa34f049dc2", GitTreeState:"clean"}
Server Version: version.Info{Major:"1", Minor:"1", GitVersion:"v1.1.3", GitCommit:"6a81b50c7e97bbe0ade075de55ab4fa34f049dc2", GitTreeState:"clean"}

$ kubectl api-versions
extensions/v1beta1
v1

I also ran:

$ for node in $(kubectl get nodes -o name); do kubectl annotate $node net.beta.kubernetes.io/proxy-mode=iptables; done

This now gives:

error: --overwrite is false but found the following declared annotation(s): 'net.beta.kubernetes.io/proxy-mode' already has a value (iptables)

error: --overwrite is false but found the following declared annotation(s): 'net.beta.kubernetes.io/proxy-mode' already has a value (iptables)

I also rebooted all the boxes.

However, I still get IP of docker0 interface of the worker node when the packet is received inside my application.

Here, I read:

But that will not expose external client IPs, just intra cluster IPs.

So, the question is how to get the real, external client IP when I get a packet.

The packets are not http/websocket packets, but plain TCP packets if this is relevant to get an answer.

I also tried following this comment but did not get lucky. App continued to get packets with docker0 interface IP as source IP. May be I could not copy-paste the stuff. I don't know how to get kube-proxy IP and just used worker machine IP there. I am just getting started with Kubernetes and CoreOS.

-- Ashish Vyas
coreos
iptables
kubernetes

0 Answers