Kamu sedang menampilkan dokumentasi untuk Kubernetes versi: v1.32
Kubernetes v1.32 dokumentasi sudah tidak dirawat lagi. Versi yang kamu lihat ini hanyalah snapshot statis. Untuk dokumentasi terkini, lihat versi terbaru.
Menambahkan Entry pada /etc/hosts Pod dengan HostAliases
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.
Isi Default pada Berkas Hosts
Misalnya saja kamu mempunyai sebuah Pod Nginx yang memiliki sebuah IP Pod:
kubectl run nginx --image nginx --generator=run-pod/v1 pod/nginx created Perhatikan IP Pod tersebut:
kubectl get pods --output=wide 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:
kubectl exec nginx -- cat /etc/hosts # 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:
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" Pod ini kemudian dapat dihidupkan dengan perintah berikut:
kubectl apply -f hostaliases-pod.yaml pod/hostaliases-pod created Perhatikan IP dan status Pod tersebut:
kubectl get pod --output=wide 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:
kubectl logs hostaliases-pod # 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 berkas hosts untuk setiap container yang ada pada Pod untuk mencegah Docker melakukan modifikasi 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.