Kubernetes: Can I read the Kubernetes namespace my pod / container is running on, from within the container?

i.e. without having to configure any variable in the spec of the container? I imagine there might be some environment variables where the name of the Kubernetes namespace is exposed but I did not see anything in the documentation.

Wondering if this is possible at all or I'd need to inject the name of the namespace as a variable in the container spec.


You can use field reference.

Take a look on the example:

apiVersion: v1
kind: Pod
metadata:
  name: envars-fieldref-example
spec:
  containers:
    - name: test
      image: k8s.gcr.io/busybox
      command: [ "sh", "-c"]
      args:
      - while true; do
          echo -en '\n';
          printenv YOUR_POD_NAMESPACE, YOUR_POD_IP;
          sleep 10;
        done;
      env:
        - name: YOUR_POD_NAMESPACE
          valueFrom:
            fieldRef:
              fieldPath: metadata.namespace
        - name: YOUR_POD_IP
          valueFrom:
            fieldRef:
              fieldPath: status.podIP

In the configuration file, you can see five environment variables. The env field is an array of EnvVars. The first element in the array specifies that the YOUR_POD_NAMESPACE environment variable gets its value from the Pod's metadata.namespace field. Similarly, the other environment variables get their names from Pod fields.

See more: env-pod.