# Menambahkan Entry pada /etc/hosts Pod dengan HostAliases

LLMS index: [llms.txt](/llms.txt)

---

HAHAHUGOSHORTCODE0TOC0HBHB

<!-- overview -->
Menambahkan entri pada berkas /etc/hosts Pod akan melakukan _override_
resolusi _hostname_ pada level Pod ketika DNS dan opsi lainnya tidak tersedia.
Pada versi 1.7, pengguna dapat menambahkan entri yang diinginkan beserta _field_ HostAliases
pada PodSpec.

Modifikasi yang dilakukan tanpa menggunakan HostAliases tidaklah disarankan
karena berkas ini diatur oleh Kubelet dan dapat di-_override_ ketika Pod dibuat/di-_restart_.


<!-- body -->

## Isi Default pada Berkas `Hosts`

Misalnya saja kamu mempunyai sebuah Pod Nginx yang memiliki sebuah IP Pod:

```shell
kubectl run nginx --image nginx --generator=run-pod/v1
```

```shell
pod/nginx created
```

Perhatikan IP Pod tersebut:

```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
```

_File_ `hosts` yang ada akan tampak sebagai berikut:

```shell
kubectl exec nginx -- cat /etc/hosts
```

```none
# Berkas hosts yang dikelola Kubernetes
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
```

Secara default, berkas `hosts` hanya berisikan _boilerplate_ alamat IP IPv4 and IPv6 seperti
`localhost` dan hostname dari Pod itu sendiri.

## Menambahkan Entri Tambahan dengan HostAliases

Selain _boilerplate default_, kita dapat menambahkan entri pada berkas
`hosts` untuk melakukan resolusi `foo.local`, `bar.local` pada `127.0.0.1` dan `foo.remote`,
`bar.remote` pada `10.1.2.3`, kita dapat melakukannya dengan cara menambahkan
HostAliases pada Pod di bawah _field_ `.spec.hostAliases`:

















<div class="highlight code-sample">
    <div class="copy-code-icon">
    <a href="https://raw.githubusercontent.com/kubernetes/website/main/content/id/examples/service/networking/hostaliases-pod.yaml" download="service/networking/hostaliases-pod.yaml"><code>service/networking/hostaliases-pod.yaml</code>
    </a><img src="/images/copycode.svg" class="icon-copycode" onclick="copyCode('service-networking-hostaliases-pod-yaml')" title="Copy service/networking/hostaliases-pod.yaml to clipboard"></img></div>
    <div class="includecode" id="service-networking-hostaliases-pod-yaml"><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">apiVersion</span><span class="p">:</span><span class="w"> </span><span class="l">v1</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">kind</span><span class="p">:</span><span class="w"> </span><span class="l">Pod</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">metadata</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">hostaliases-pod</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">spec</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">restartPolicy</span><span class="p">:</span><span class="w"> </span><span class="l">Never</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">hostAliases</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span>- <span class="nt">ip</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;127.0.0.1&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">hostnames</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span>- <span class="s2">&#34;foo.local&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span>- <span class="s2">&#34;bar.local&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span>- <span class="nt">ip</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;10.1.2.3&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">hostnames</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span>- <span class="s2">&#34;foo.remote&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span>- <span class="s2">&#34;bar.remote&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">containers</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">cat-hosts</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">image</span><span class="p">:</span><span class="w"> </span><span class="l">busybox</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">command</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span>- <span class="l">cat</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">args</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span>- <span class="s2">&#34;/etc/hosts&#34;</span><span class="w">
</span></span></span></code></pre></div></div>
</div>

Pod ini kemudian dapat dihidupkan dengan perintah berikut:

```shell
kubectl apply -f hostaliases-pod.yaml
```

```shell
pod/hostaliases-pod created
```

Perhatikan IP dan status Pod tersebut:

```shell
kubectl get pod --output=wide
```

```shell
NAME                           READY     STATUS      RESTARTS   AGE       IP              NODE
hostaliases-pod                0/1       Completed   0          6s        10.200.0.5      worker0
```

_File_ `hosts` yang ada akan tampak sebagai berikut:

```shell
kubectl logs hostaliases-pod
```

```none
# Berkas hosts yang dikelola Kubernetes
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	bar.local
10.1.2.3	foo.remote	bar.remote
```

Dengan tambahan entri yang telah dispesifikasikan sebelumnya.

## Kenapa Kubelet Melakukan Mekanisme Manajemen Berkas `Hosts`?

Kubelet [melakukan proses manajemen](https://github.com/kubernetes/kubernetes/issues/14633)
berkas `hosts` untuk setiap container yang ada pada Pod untuk mencegah Docker melakukan
[modifikasi](https://github.com/moby/moby/issues/17190) pada berkas tersebut
setelah kontainer dihidupkan.

Karena sifat dari berkas tersebut yang secara otomatis di-_manage_,
semua hal yang didefinisikan oleh pengguna akan ditimpa (_overwrite_) ketika berkas
`hosts` di-_mount_ kembali oleh Kubelet ketika ada kontainer yang di-_restart_
atau Pod di-_schedule_ ulang. Dengan demikian tidak dianjurkan untuk
memodifikasi berkas tersebut secara langsung.
