132 lines
3.2 KiB
Markdown
132 lines
3.2 KiB
Markdown
---
|
|
reviewers:
|
|
- rickypai
|
|
- thockin
|
|
title: Adding entries to Pod /etc/hosts with HostAliases
|
|
content_template: templates/concept
|
|
weight: 60
|
|
---
|
|
|
|
{{< toc >}}
|
|
|
|
{{% capture overview %}}
|
|
Adding entries to a Pod's /etc/hosts file provides Pod-level override of hostname resolution when DNS and other options are not applicable. In 1.7, users can add these custom entries with the HostAliases field in PodSpec.
|
|
|
|
Modification not using HostAliases is not suggested because the file is managed by Kubelet and can be overwritten on during Pod creation/restart.
|
|
{{% /capture %}}
|
|
|
|
{{% capture body %}}
|
|
|
|
## Default Hosts File Content
|
|
|
|
Lets start an Nginx Pod which is assigned a Pod IP:
|
|
|
|
```shell
|
|
kubectl run nginx --image nginx --generator=run-pod/v1
|
|
```
|
|
|
|
```shell
|
|
pod/nginx created
|
|
```
|
|
|
|
Examine a Pod IP:
|
|
|
|
```shell
|
|
kubectl get pods --output=wide
|
|
```
|
|
|
|
```shell
|
|
NAME READY STATUS RESTARTS AGE IP NODE
|
|
nginx 1/1 Running 0 13s 10.200.0.4 worker0
|
|
```
|
|
|
|
The hosts file content would look like this:
|
|
|
|
```shell
|
|
kubectl exec nginx -- cat /etc/hosts
|
|
```
|
|
|
|
```none
|
|
# 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.200.0.4 nginx
|
|
```
|
|
|
|
By default, the `hosts` file only includes IPv4 and IPv6 boilerplates like
|
|
`localhost` and its own hostname.
|
|
|
|
## Adding Additional Entries with HostAliases
|
|
|
|
In addition to the default boilerplate, we can add additional entries to the
|
|
`hosts` file to resolve `foo.local`, `bar.local` to `127.0.0.1` and `foo.remote`,
|
|
`bar.remote` to `10.1.2.3`, we can by adding HostAliases to the Pod under
|
|
`.spec.hostAliases`:
|
|
|
|
{{< codenew file="service/networking/hostaliases-pod.yaml" >}}
|
|
|
|
This Pod can be started with the following commands:
|
|
|
|
```shell
|
|
kubectl apply -f hostaliases-pod.yaml
|
|
```
|
|
|
|
```shell
|
|
pod/hostaliases-pod created
|
|
```
|
|
|
|
Examine a Pod IP and status:
|
|
|
|
```shell
|
|
kubectl get pod -o=wide
|
|
```
|
|
|
|
```shell
|
|
NAME READY STATUS RESTARTS AGE IP NODE
|
|
hostaliases-pod 0/1 Completed 0 6s 10.200.0.5 worker0
|
|
```
|
|
|
|
The `hosts` file content would look like this:
|
|
|
|
```shell
|
|
kubectl logs hostaliases-pod
|
|
```
|
|
|
|
```none
|
|
# 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.200.0.5 hostaliases-pod
|
|
|
|
# Entries added by HostAliases.
|
|
127.0.0.1 foo.local
|
|
127.0.0.1 bar.local
|
|
10.1.2.3 foo.remote
|
|
10.1.2.3 bar.remote
|
|
```
|
|
|
|
With the additional entries specified at the bottom.
|
|
|
|
## Why Does Kubelet Manage the Hosts File?
|
|
|
|
Kubelet [manages](https://github.com/kubernetes/kubernetes/issues/14633) the
|
|
`hosts` file for each container of the Pod to prevent Docker from
|
|
[modifying](https://github.com/moby/moby/issues/17190) the file after the
|
|
containers have already been started.
|
|
|
|
Because of the managed-nature of the file, any user-written content will be
|
|
overwritten whenever the `hosts` file is remounted by Kubelet in the event of
|
|
a container restart or a Pod reschedule. Thus, it is not suggested to modify
|
|
the contents of the file.
|
|
|
|
{{% /capture %}}
|
|
|