forked from kubernetes/website
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Initialize DNS Pod Service for ID Localization. (kubernetes#16707)
Co-Authored-By: Giri Kuncoro <[email protected]> Co-Authored-By: Tim Bannister <[email protected]>
- Loading branch information
1 parent
2a75e3e
commit 1956499
Showing
2 changed files
with
288 additions
and
0 deletions.
There are no files selected for viewing
268 changes: 268 additions & 0 deletions
268
content/id/docs/concepts/services-networking/dns-pod-service.md
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,268 @@ | ||
--- | ||
title: DNS untuk Service dan Pod | ||
content_template: templates/concept | ||
weight: 20 | ||
--- | ||
{{% capture overview %}} | ||
Laman ini menyediakan ikhtisar dari dukungan DNS oleh Kubernetes. | ||
{{% /capture %}} | ||
|
||
{{% capture body %}} | ||
|
||
## Pendahuluan | ||
|
||
Kubernetes DNS melakukan _scheduling_ DNS Pod dan Service yang ada pada kluster, serta | ||
melakukan konfigurasi kubelet untuk memberikan informasi bagi setiap Container | ||
untuk menggunakan DNS Service IP untuk melakukan resolusi DNS. | ||
|
||
### Apa Sajakah yang Mendapatkan Nama DNS? | ||
|
||
Setiap Service yang didefinisikan di dalam kluster (termasuk server DNS itu sendiri) | ||
memiliki nama DNS. Secara default, sebuah _list_ pencarian DNS pada Pod klien | ||
akan mencantumkan _namespace_ Pod itu sendiri serta domain _default_ kluster. Hal ini dapat diilustrasikan | ||
dengan contoh berikut: | ||
|
||
Asumsikan sebuah Service dengan nama `foo` pada Kubernetes dengan _namespace_ `bar`. | ||
Sebuah Pod yang dijalankan di _namespace_ `bar` dapat melakukan resolusi | ||
terhadap Service ini dengan melakukan _query_ DNS | ||
untuk `foo`. Sebuah Pod yang dijalankan pada namespace `quux` dapat melakukan | ||
resolusi Service ini dengan melakukan _query_ DNS untuk `foo.bar`. | ||
|
||
Bagian di bawah ini akan menampilkan detail tipe rekaman serta _layout_ yang didukung. | ||
_Layout_ atau nama _query_ lain yang dapat digunakan dianggap sebagai detail implementasi | ||
yang bisa saja berubah tanpa adanya pemberitahuan sebelumnya. Untuk informasi spesifikasi | ||
terbaru kamu dapat membaca [Service Discovery pada Kubernetes berbasis DNS](https://github.com/kubernetes/dns/blob/master/docs/specification.md). | ||
|
||
## Service | ||
|
||
### A record | ||
|
||
Service "Normal" (bukan _headless_) akan diberikan sebuah A _record_ untuk sebuah nama dalam bentuk | ||
`my-svc.my-namespace.svc.cluster-domain.example`. Inilah yang kemudian digunakan untuk melakukan | ||
resolusi IP kluster dari Service tersebut. | ||
|
||
Service "Headless" (tanpa IP kluster) juga memiliki sebuah A _record_ DNS dengan format | ||
`my-svc.my-namespace.svc.cluster-domain.example`. Tidak seperti halnya Service normal, | ||
DNS ini akan melakukan resolusi pada serangkauan IP dari Pod yang dipilih oleh Service tadi. | ||
Klien diharapkan untuk mengkonsumsi serangkaian IP ini atau cara lain yang digunakan adalah pemilihan | ||
menggunakan penjadwalan Round-Robin dari set yang ada. | ||
|
||
### SRV _record_ | ||
|
||
SRV _record_ dibuat untuk port bernama yang merupakan bagian dari Service normal maupun [Headless | ||
Services](/docs/concepts/services-networking/service/#headless-services). | ||
Untuk setiap port bernama, SRV _record_ akan memiliki format | ||
`_my-port-name._my-port-protocol.my-svc.my-namespace.svc.cluster-domain.example`. | ||
Untuk sebuah Service normal, ini akan melakukan resolusi pada nomor port dan | ||
nama domain: `my-svc.my-namespace.svc.cluster-domain.example`. | ||
Untuk Service headless, ini akan melakukan resolusi pada serangkaian Pod yang merupakan _backend_ dari Service | ||
tersebut yang memiliki format: `auto-generated-name.my-svc.my-namespace.svc.cluster-domain.example`. | ||
|
||
## Pod | ||
|
||
### Hostname Pod dan _Field_ Subdomain | ||
|
||
Saat ini ketika sebuah Pod dibuat, _hostname_-nya adalah nilai dari `metadata.name`. | ||
|
||
Spek Pod memiliki _field_ opsional `hostname`, yang dapat digunakan untuk menspesifikasikan | ||
_hostname_ Pod. Ketika dispesifikasikan, maka nama ini akan didahulukan di atas nama Pod . | ||
Misalnya, sebuah Pod dengan `hostname` yang diberikan nilai "`my-host`", maka _hostname_ Pod tersebut akan menjadi "`my-host`". | ||
|
||
Spek Pod juga memiliki _field_ opsional `subdomain` yang dapat digunakan untuk menspesifikasikan | ||
subdomain Pod tersebut. Misalnya saja sebuah Pod dengan `hostname` yang diberi nilai "`foo`", dan `subdomain` | ||
yang diberi nilai "`bar`", pada _namespace_ "`my-namespace`", akan memiliki _fully qualified | ||
domain name_ (FQDN) "`foo.bar.my-namespace.svc.cluster-domain.example`". | ||
|
||
Contoh: | ||
|
||
```yaml | ||
apiVersion: v1 | ||
kind: Service | ||
metadata: | ||
name: default-subdomain | ||
spec: | ||
selector: | ||
name: busybox | ||
clusterIP: None | ||
ports: | ||
- name: foo # Actually, no port is needed. | ||
port: 1234 | ||
targetPort: 1234 | ||
--- | ||
apiVersion: v1 | ||
kind: Pod | ||
metadata: | ||
name: busybox1 | ||
labels: | ||
name: busybox | ||
spec: | ||
hostname: busybox-1 | ||
subdomain: default-subdomain | ||
containers: | ||
- image: busybox:1.28 | ||
command: | ||
- sleep | ||
- "3600" | ||
name: busybox | ||
--- | ||
apiVersion: v1 | ||
kind: Pod | ||
metadata: | ||
name: busybox2 | ||
labels: | ||
name: busybox | ||
spec: | ||
hostname: busybox-2 | ||
subdomain: default-subdomain | ||
containers: | ||
- image: busybox:1.28 | ||
command: | ||
- sleep | ||
- "3600" | ||
name: busybox | ||
``` | ||
Jika terdapat sebuah Service _headless_ memiliki nama yang sama dengan | ||
subdomain dari suatu Pod pada _namespace_ yang sama, server KubeDNS kluster akan mengembalikan | ||
A _record_ untuk FQDN Pod. | ||
Sebagai contoh, misalnya terdapat sebuah Pod dengan _hostname_ "`busybox-1`" dan | ||
subdomain "`default-subdomain`", serta sebuah Service _headless_ dengan nama "`default-subdomain`" | ||
berada pada suatu _namespace_ yang sama, maka Pod tersebut akan menerima FQDN dirinya sendiri | ||
sebagai "`busybox-1.default-subdomain.my-namespace.svc.cluster-domain.example`". DNS mengembalikan | ||
A _record_ pada nama tersebut dan mengarahkannya pada IP Pod. Baik Pod "`busybox1`" dan | ||
"`busybox2`" bisa saja memiliki A _record_ yang berbeda. | ||
|
||
Objek Endpoint dapat menspesifikasikan `hostname` untuk alamat _endpoint_ manapun | ||
beserta dengan alamat IP-nya. | ||
|
||
{{< note >}} | ||
Karena A _record_ tidak dibuat untuk sebuah Pod, maka `hostname` diperlukan | ||
agar sebuah Pod memiliki A _record_. Sebuah Pod yang tidak memiliki `hostname` | ||
tetapi memiliki `subdomain` hanya akan membuat sebuah A _record_ untuk Service _headless_ | ||
(`default-subdomain.my-namespace.svc.cluster-domain.example`), yang merujuk pada IP dari | ||
Pod tersebut. Pod juga harus dalam status _ready_ agar dapat memiliki A _record_ kecuali | ||
_field_ `publishNotReadyAddresses=True` diaktifkan pada Service. | ||
{{< /note >}} | ||
|
||
### Kebijakan DNS Pod | ||
|
||
Kebijakan DNS dapat diaktifkan untuk setiap Pod. Kubernetes saat ini mendukung | ||
kebijakan DNS spesifik Pod (_pod-specific DNS policies_). Kebijakan ini | ||
dispesifikasikan pada _field_ `dnsPolicy` yang ada pada spek Pod. | ||
|
||
- "`Default`": Pod akan mewarisi konfigurasi resolusi yang berasal dari Node | ||
dimana Pod tersebut dijalankan. | ||
Silakan baca [diskusi terkait](/docs/tasks/administer-cluster/dns-custom-nameservers/#inheriting-dns-from-the-node) | ||
untuk detailnya. | ||
- "`ClusterFirst`": _Query_ DNS apa pun yang tidak sesuai dengan sufiks domain kluster yang sudah dikonfigurasi | ||
misalnya "`www.kubernetes.io`", akan di-_forward_ ke _nameserver_ _upstream_ yang diwarisi dari Node. | ||
Administrator kluster bisa saja memiliki _stub-domain_ atau DNS _usptream_ lain yang sudah dikonfigurasi. | ||
Silakan lihat [diskusi terkait](/docs/tasks/administer-cluster/dns-custom-nameservers/#impacts-on-pods) | ||
untuk detail lebih lanjut mengenai bagaimana _query_ DNS melakukan hal tersebut. | ||
- "`ClusterFirstWithHostNet`": Untuk Pod yang dijalankan dengan menggunakan `hostNetwork`, kamu harus | ||
secara eksplisit mengaktifkan kebijakan DNS-nya menjadi "`ClusterFirstWithHostNet`". | ||
- "`None`": Hal ini mengisikan sebuah Pod untuk mengabaikan konfigurasi DNS dari _environment_ Kubernetes | ||
Semua pengaturan DNS disediakan menngunakan _field_ `dnsConfig` yang ada pada spek Pod. | ||
Silakan lihat [konfigurasi DNS Pod](#konfigurasi-dns-pod) di bawah. | ||
|
||
{{< note >}} | ||
"Default" bukan merupakan nilai _default_ kebijakan DNS. | ||
Jika `dnsPolicy` tidak secara eksplisit dispesifikasikan, maka “ClusterFirst” akan digunakan. | ||
{{< /note >}} | ||
|
||
|
||
Contoh di bawah ini menunjukkan sebuah Pod dengan kebijakan | ||
DNS yang diubah menjadi "`ClusterFirstWithHostNet`" karena _field_ `hostNetwork` | ||
diubah menjadi `true`. | ||
|
||
```yaml | ||
apiVersion: v1 | ||
kind: Pod | ||
metadata: | ||
name: busybox | ||
namespace: default | ||
spec: | ||
containers: | ||
- image: busybox:1.28 | ||
command: | ||
- sleep | ||
- "3600" | ||
imagePullPolicy: IfNotPresent | ||
name: busybox | ||
restartPolicy: Always | ||
hostNetwork: true | ||
dnsPolicy: ClusterFirstWithHostNet | ||
``` | ||
|
||
### Konfigurasi DNS Pod | ||
|
||
Konfigurasi DNS Pod mengizinkan pengguna untuk memiliki | ||
lebih banyak kontrol terhadap pengaturan DNS pada Pod. | ||
|
||
_Field_ `dnsConfig` bersifat opsional dan dapat digunakan dengan | ||
pengaturan `dnsPolicy` apa pun. | ||
Meskipun begitu, ketika _field_ `dnsPolicy` pada sebuah Pod diubah menjadi "`None`", | ||
maka _field_ `dnsConfig` harus dispesifikasikan. | ||
|
||
Berikut merupakan properti yang dapat dispesifikasikan oleh pengguna | ||
pada _field_ `dnsConfig`: | ||
|
||
- `nameservers`: serangkaian alamat IP yang akan digunakan sebagai server DNS bagi Pod. | ||
Jumlah maksimum dari IP yang dapat didaftarkan pada _field_ ini adalah tiga buah IP. | ||
Ketika sebuah `dnsPolicy` pada Pod diubah menjadi "`None`", maka list ini setidaknya | ||
harus mengandung sebuah alamat IP, selain kasus tersebut properti ini bersifat opsional. | ||
Server yang didaftarkan akan digabungkan di dalam _nameserver_ dasar yang dihasilkan dari | ||
kebijakan DNS yang dispesifikasikan, apabila terdapat duplikat terhadap alamat yang didaftarkan | ||
maka alamat tersebut akan dihapus. | ||
- `searches`: merupakan serangkaian domain pencarian DNS yang digunakan untuk proses _lookup_ pada Pod. | ||
Properti ini bersifat opsional. Ketika dispesifikasikan, list yang disediakan akan digabungkan dengan | ||
nama domain pencarian dasar yang dihasilkan dari kebijakan DNS yang dipilih. Alamat yang duplikat akan dihapus. | ||
Nilai maksimum domain pencarian yang dapat didaftarkan adalah 6 domain. | ||
- `options`: merupakan sebuah list opsional yang berisikan objek dimana setiap objek | ||
bisa saja memiliki properti `name` (yang bersifat wajib). Isi dari properti ini | ||
akan digabungkan dengan opsi yang dihasilkan kebijakan DNS yang digunakan. | ||
Alamat yang duplikat akan dihapus. | ||
|
||
Di bawah ini merupakan contoh sebuah Pod dengan pengaturan DNS kustom: | ||
|
||
{{< codenew file="service/networking/custom-dns.yaml" >}} | ||
|
||
Ketika Pod diatas dibuat, maka Container `test` | ||
memiliki isi berkas `/etc/resolv.conf` sebagai berikut: | ||
|
||
``` | ||
nameserver 1.2.3.4 | ||
search ns1.svc.cluster-domain.example my.dns.search.suffix | ||
options ndots:2 edns0 | ||
``` | ||
|
||
Untuk pengaturan IPv6, _path_ pencarian dan name server harus dispesifikasikan sebagai berikut: | ||
|
||
```shell | ||
kubectl exec -it dns-example -- cat /etc/resolv.conf | ||
``` | ||
Keluaran yang dihasilkan akan menyerupai: | ||
```shell | ||
nameserver fd00:79:30::a | ||
search default.svc.cluster-domain.example svc.cluster-domain.example cluster-domain.example | ||
options ndots:5 | ||
``` | ||
|
||
### Keberadaan Fitur (_Feature Availability_) {#keberadaan-fitur} | ||
|
||
Keberadaan Pod DNS Config dan DNS Policy "`None`"" diilustrasikan pada tabel di bawah ini. | ||
|
||
| versi k8s | Dukungan Fitur | | ||
| :---------: |:--------------:| | ||
| 1.14 | Stable | | ||
| 1.10 | Beta (aktif secara default)| | ||
| 1.9 | Alpha | | ||
|
||
{{% /capture %}} | ||
|
||
{{% capture whatsnext %}} | ||
|
||
Untuk petunjuk lebih lanjut mengenai administrasi konfigurasi DNS, kamu dapat membaca | ||
[Cara Melakukan Konfigurasi Service DNS](/docs/tasks/administer-cluster/dns-custom-nameservers/) | ||
|
||
{{% /capture %}} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
apiVersion: v1 | ||
kind: Pod | ||
metadata: | ||
namespace: default | ||
name: dns-example | ||
spec: | ||
containers: | ||
- name: test | ||
image: nginx | ||
dnsPolicy: "None" | ||
dnsConfig: | ||
nameservers: | ||
- 1.2.3.4 | ||
searches: | ||
- ns1.svc.cluster-domain.example | ||
- my.dns.search.suffix | ||
options: | ||
- name: ndots | ||
value: "2" | ||
- name: edns0 |