How to add entries to a pod's /etc/hosts file

2 min read

The /etc/hosts file is a Kubernetes-managed file so we cannot add entries freely to it. If we want to add entries to it we will have to use the hostAliases field in the Pod's spec.

$ kubectl exec -it demo-pod -- cat /etc/hosts
# Kubernetes-managed hosts file.
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
fe00::0 ip6-mcastprefix
fe00::1 ip6-allnodes
fe00::2 ip6-allrouters
10.103.198.74 demo-pod

Adding entries on the pod's /etc/hosts comes really handy when we want to override some domains just for the given pod. To do so we just need to include the entry on the Pod's spec.

The /etc/hosts format is the following:

IP_address canonical_hostname [aliases...]

The hostAliases format allows us to define as many aliases as we want using the hostnames array:

apiVersion: v1
kind: Pod
metadata:
  name: demo-pod
spec:
  containers:
  - command:
    - sh
    - /code/apply.sh
    image: alpine
    name: demo
  hostAliases:
  - hostnames:
    - example.pet2cattle.com
    ip: 1.2.3.4

Checking on the running pod we will see how it generates the following /etc/hosts file:

$ kubectl exec -it demo-pod -- cat /etc/hosts
# Kubernetes-managed hosts file.
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
fe00::0 ip6-mcastprefix
fe00::1 ip6-allnodes
fe00::2 ip6-allrouters
10.103.198.74 demo-pod

# Entries added by HostAliases.
1.2.3.4 example.pet2cattle.com

For more details you can check the kubernetes documenentation about hostAliases


Posted on 11/05/2021