How to see which node/pod served a Kubernetes Ingress request?

3/26/2019

I have a Deployment with three replicas, everyone started on a different node, behing an ingress. For tests and troubleshooting, I want to see which pod/node served my request. How is this possible?

The only way I know is to open the logs on all of the pods, do my request and search for the pod that has my request in the access log. But this is complicated and error prune, especially on productive apps with requests from other users.

I'm looking for something like a HTTP Response header like this:

X-Kubernetes-Pod: mypod-abcdef-23874
X-Kubernetes-Node: kubw02
-- Daniel
http-headers
kubernetes
kubernetes-ingress
nginx-ingress
replication

1 Answer

3/26/2019

AFAIK, there is no feature like that out of the box.

The easiest way I can think of, is adding these information as headers yourself from your API.

You technically have to Expose Pod Information to Containers Through Environment Variables and get it from code to add the headers to the response.

Would be something like this:

apiVersion: v1
kind: Pod
metadata:
  name: dapi-envars-fieldref
spec:
  containers:
    - name: test-container
      image: k8s.gcr.io/busybox
      command: [ "sh", "-c"]
      args:
      - while true; do
          echo -en '\n';
          printenv MY_NODE_NAME MY_POD_NAME MY_POD_NAMESPACE;
          printenv MY_POD_IP MY_POD_SERVICE_ACCOUNT;
          sleep 10;
        done;
      env:
        - name: MY_NODE_NAME
          valueFrom:
            fieldRef:
              fieldPath: spec.nodeName
        - name: MY_POD_NAME
          valueFrom:
            fieldRef:
              fieldPath: metadata.name
        - name: MY_POD_NAMESPACE
          valueFrom:
            fieldRef:
              fieldPath: metadata.namespace
        - name: MY_POD_IP
          valueFrom:
            fieldRef:
              fieldPath: status.podIP
        - name: MY_POD_SERVICE_ACCOUNT
          valueFrom:
            fieldRef:
              fieldPath: spec.serviceAccountName
  restartPolicy: Never

And from the API you get the information and insert into the header.

-- Diego Mendes
Source: StackOverflow