How to add custom host entries to kubernetes Pods?

12,865

Solution 1

This works and also looks simpler:

kind: Service
apiVersion: v1 
metadata:
    name: {HOST_NAME} 
    spec:
      ports:
        - protocol: TCP
          port: {PORT}
          targetPort: {PORT}
      type: ExternalName
      externalName: {EXTERNAL_IP}

Now you can use the HOST_NAME from the pod directly to access the external machine.

Solution 2

From k8s 1.7 you can add hostAliases. Example from the docs:

apiVersion: v1
kind: Pod
metadata:
  name: hostaliases-pod
spec:
  restartPolicy: Never
  hostAliases:
  - ip: "127.0.0.1"
    hostnames:
    - "foo.local"
    - "bar.local"
  - ip: "10.1.2.3"
    hostnames:
    - "foo.remote"
    - "bar.remote"

Solution 3

Host files are going to give you problems, but if you really need to, you could use a configmap.

Add a configmap like so

apiVersion: v1
kind: ConfigMap
metadata:
  name: my-app-hosts-file-configmap
data:
  hosts: |-
    192.168.0.1 gateway
    127.0.0.1 localhost

Then mount that inside your pod, like so:

  volumeMounts:
    - name: my-app-hosts-file
      mountPath: /etc/
volumes:
  - name: my-app-hosts-file
    configMap:
    name: my-app-hosts-file-configmap
Share:
12,865
Karthik
Author by

Karthik

Passionate about Distributed systems. I have worked on building a service-oriented architecture from scratch of an existing monolith system. Building softwares at startup and enterprise scale. When away from work one can find me meddling with my Rasberry-pi, or trying hands on on some trending projects on Github. Building prototype on blockchain platform. Sometimes you can find me cycling on the countryside or conquering the mountains.

Updated on June 15, 2022

Comments

  • Karthik
    Karthik almost 2 years

    My application communicates to some services via hostnames. When running my application as a docker container i used to add hostnames to the /etc/hosts of the hostmachine and run the container using --net=host.

    Now I'm running my containers in kubernetes cluster. I would like to know how can i add the /etc/hosts entries to the pod via yaml.

    I'm using kubernetes v1.5.3.