Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Adding entries to Pod /etc/hosts with HostAliases for ID localization. #16009

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,131 @@
---
title: Menambahkan Entry pada /etc/hosts Pod dengan HostAliases
irvifa marked this conversation as resolved.
Show resolved Hide resolved
content_template: templates/concept
weight: 60
---

{{< toc >}}

{{% capture 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_.
{{% /capture %}}

{{% capture 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`:

{{< codenew file="service/networking/hostaliases-pod.yaml" >}}

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.

{{% /capture %}}

22 changes: 22 additions & 0 deletions content/id/examples/service/networking/hostaliases-pod.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
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"
containers:
- name: cat-hosts
image: busybox
command:
- cat
args:
- "/etc/hosts"