--- title: Namespace content_type: concept weight: 30 --- Kubernetes mendukung banyak klaster virtual di dalam satu klaster fisik. Klaster virtual tersebut disebut dengan *namespace*. ## Kapan menggunakan banyak Namespace *Namespace* dibuat untuk digunakan di *environment* dengan banyak pengguna yang berada di dalam banyak tim ataupun proyek. Untuk sebuah klaster dengan beberapa pengguna saja, kamu tidak harus membuat ataupun memikirkan tentang *namespace*. Mulai gunakan *namespace* saat kamu membutuhkan fitur dari *namespace* itu sendiri. *Namespace* menyediakan ruang untuk nama objek. Nama dari *resource* atau objek harus berbeda di dalam sebuah *namespace*, tetapi boleh sama jika berbeda *namespace*. *Namespace* tidak bisa dibuat di dalam *namespace* lain dan setiap *resource* atau objek Kubernetes hanya dapat berada di dalam satu *namespace*. *Namespace* merupakan cara yang digunakan untuk memisahkan *resource* klaster untuk beberapa pengguna (dengan [*resource quota*](/id/docs/concepts/policy/resource-quotas/)). Dalam versi Kubernetes yang akan datang, objek di dalam satu *namespace* akan mempunyai *access control policies* yang sama secara *default*. Tidak perlu menggunakan banyak *namespace* hanya untuk memisahkan sedikit perbedaan pada *resource*, seperti perbedaan versi dari perangkat lunak yang sama: gunakan [label](/docs/user-guide/labels) untuk membedakan *resource* di dalam *namespace* yang sama. ## Bekerja dengan Namespace Pembuatan dan penghapusan *namespace* dijelaskan di [dokumentasi panduan admin untuk *namespace*](/docs/admin/namespaces). ### Melihat namespace Kamu dapat melihat daftar *namespace* di dalam klaster menggunakan: ```shell kubectl get namespace ``` ``` NAME STATUS AGE default Active 1d kube-system Active 1d kube-public Active 1d ``` Kubernetes berjalan dengan tiga *namespace* awal: * `default`, *namespace default* untuk objek yang dibuat tanpa mencantumkan *namespace* pada spesifikasinya. * `kube-system`, *namespace* yang digunakan untuk objek yang dibuat oleh sistem Kubernetes. * `kube-public`, *namespace* ini dibuat secara otomatis dan dapat diakses oleh semua pengguna (termasuk yang tidak diautentikasi). *Namespace* ini disediakan untuk penggunaan klaster, jika beberapa *resouce* harus terlihat dan dapat dibaca secara publik di seluruh klaster. Aspek publik dari *namespace* ini hanya sebuah konvensi, bukan persyaratan. ### Mengkonfigurasi namespace untuk request Untuk mengkonfigurasi sementara *request* untuk menggunakan *namespace* tertentu, gunakan `--namespace` *flag*. Sebagai contoh: ```shell kubectl --namespace= run nginx --image=nginx kubectl --namespace= get pods ``` ### Mengkonfigurasi preferensi namespace Kamu dapat menyimpan konfigurasi *namespace* untuk semua perintah `kubectl` dengan perintah: ```shell kubectl config set-context --current --namespace= # Cek namespace kubectl config view | grep namespace: ``` ## Namespace dan DNS Saat kamu membuat sebuah [Service](/docs/user-guide/services), Kubernetes membuat [Entri DNS](/id/docs/concepts/services-networking/dns-pod-service/) untuk *service* tersebut. Entri *DNS* ini berformat `..svc.cluster.local`, yang berarti jika sebuah kontainer hanya menggunakan ``, kontainer tersebut akan berkomunikasi dengan *service* yang berada di dalam satu *namespace*. Ini berguna untuk menggunakan konfigurasi yang sama di beberapa *namespace* seperti *Development*, *Staging*, dan *Production*. Jika kamu ingin berkomunikasi antar *namespace*, kamu harus menggunakan seluruh *fully qualified domain name (FQDN)*. ## Tidak semua objek di dalam Namespace Kebanyakan *resource* di Kubernetes (contohnya *pod*, *service*, *replication controller*, dan yang lain) ada di dalam *namespace*. Namun *resource namespace* sendiri tidak berada di dalam *namespace*. Dan *low-level resource* seperti [node](/docs/admin/node) dan *persistentVolume* tidak berada di *namespace* manapun. Untuk melihat *resource* di dalam kubernetes yang berada di dalam *namespace* ataupun tidak: ```shell # Di dalam namespace kubectl api-resources --namespaced=true # Tidak di dalam namespace kubectl api-resources --namespaced=false ```