|
| 1 | +--- |
| 2 | +title: Komunikasi Master-Node |
| 3 | +content_template: templates/concept |
| 4 | +weight: 20 |
| 5 | +--- |
| 6 | + |
| 7 | +{{% capture overview %}} |
| 8 | + |
| 9 | +Dokumen ini menjelaskan tentang jalur-jalur komunikasi di antara kluster Kubernetes dan master yang sebenarnya hanya berhubungan dengan apiserver saja. |
| 10 | +Kenapa ada dokumen ini? Supaya kamu, para pengguna Kubernetes, punya gambaran bagaimana mengatur instalasi untuk memperketat konfigurasi jaringan di dalam kluster. |
| 11 | +Hal ini cukup penting, karena kluster bisa saja berjalan pada jaringan tak terpercaya (<i>untrusted network</i>), ataupun melalui alamat-alamat IP publik pada penyedia cloud. |
| 12 | + |
| 13 | +{{% /capture %}} |
| 14 | + |
| 15 | + |
| 16 | +{{% capture body %}} |
| 17 | + |
| 18 | +## Kluster menuju Master |
| 19 | + |
| 20 | +Semua jalur komunikasi dari kluster menuju master diterminasi pada apiserver. |
| 21 | +Tidak ada komponen apapun di dalam master, selain apiserver, yang terekspos ke luar untuk diakses dari servis <i>remote</i>. |
| 22 | +Untuk instalasi kluster pada umumnya, apiserver diatur untuk <i>listen</i> ke koneksi <i>remote</i> melalui port HTTPS (443) yang aman, dengan satu atau beberapa metode [autentikasi](/docs/reference/access-authn-authz/authentication/) <i>client</i> yang telah terpasang. |
| 23 | +Sebaiknya, satu atau beberapa metode [otorisasi](/docs/reference/access-authn-authz/authorization/) juga dipasang, terutama jika kamu memperbolehkan [permintaan anonim (<i>anonymous request</i>)](/docs/reference/access-authn-authz/authentication/#anonymous-requests) ataupun [service account token](/docs/reference/access-authn-authz/authentication/#service-account-tokens). |
| 24 | + |
| 25 | +Node-node seharusnya disediakan dengan <i>public root certificate</i> untuk kluster, sehingga node-node tersebut bisa terhubung secara aman ke apiserver dengan kredensial <i>client</i> yang valid. |
| 26 | +Contohnya, untuk instalasi GKE dengan standar konfigurasi, kredensial <i>client</i> harus diberikan kepada kubelet dalam bentuk <i>client certificate</i>. |
| 27 | +Lihat [menghidupkan TLS kubelet](/docs/reference/command-line-tools-reference/kubelet-tls-bootstrapping/) untuk menyediakan <i>client certificate</i> untuk kubelet secara otomatis. |
| 28 | + |
| 29 | +Jika diperlukan, pod-pod dapat terhubung pada apiserver secara aman dengan menggunakan <i>service account</i>. |
| 30 | +Dengan ini, Kubernetes memasukkan <i>public root certificate</i> dan <i>bearer token</i> yang valid ke dalam pod, secara otomatis saat pod mulai dijalankan. |
| 31 | +Kubernetes <i>service</i> (di dalam semua <i>namespace</i>) diatur dengan sebuah alamat IP virtual. |
| 32 | +Semua yang mengakses alamat IP ini akan dialihkan (melalui kube-proxy) menuju <i>endpoint</i> HTTPS dari apiserver. |
| 33 | + |
| 34 | +Komponen-komponen master juga berkomunikasi dengan apiserver melalui port yang aman di dalam kluster. |
| 35 | +Akibatnya, untuk konfigurasi yang umum dan standar, semua koneksi dari kluster (node-node dan pod-pod yang berjalan di atas node tersebut) menuju master sudah terhubung dengan aman. |
| 36 | +Dan juga, kluster dan master bisa terhubung melalui jaringan publik dan/atau yang tak terpercaya (<i>untrusted</i>). |
| 37 | + |
| 38 | +## Master menuju Kluster |
| 39 | + |
| 40 | +Ada dua jalur komunikasi utama dari master (apiserver) menuju kluster. |
| 41 | +Pertama, dari apiserver ke <i>process</i> kubelet yang berjalan pada setiap node di dalam kluster. |
| 42 | +Kedua, dari apiserver ke setiap node, pod, ataupun service melalui fungsi <i>proxy</i> pada apiserver. |
| 43 | + |
| 44 | +### Apiserver menuju kubelet |
| 45 | + |
| 46 | +Koneksi dari apiserver menuju kubelet bertujuan untuk: |
| 47 | + |
| 48 | + * Melihat log dari pod-pod. |
| 49 | + * Masuk ke dalam pod-pod yang sedang berjalan (<i>attach</i>). |
| 50 | + * Menyediakan fungsi port-forward dari kubelet. |
| 51 | + |
| 52 | +Semua koneksi ini diterminasi pada <i>endpoint</i> HTTPS dari kubelet. |
| 53 | +Secara <i>default</i>, apiserver tidak melakukan verifikasi <i>serving certificate</i> dari kubelet, yang membuat koneksi terekspos pada serangan <i>man-in-the-middle</i>, dan juga **tidak aman** untuk terhubung melalui jaringan tak terpercaya (<i>untrusted</i>) dan/atau publik. |
| 54 | + |
| 55 | +Untuk melakukan verifikasi koneksi ini, berikan <i>root certificate</i> pada apiserver melalui tanda `--kubelet-certificate-authority`, sehingga apiserver dapat memverifikasi <i>serving certificate</i> dari kubelet. |
| 56 | + |
| 57 | +Cara lainnya, gunakan [tunnel SSH](/docs/concepts/architecture/master-node-communication/#ssh-tunnels) antara apiserver dan kubelet jika diperlukan, untuk menghindari komunikasi melalui jaringan tak terpercaya (<i>untrusted</i>) atau publik. |
| 58 | + |
| 59 | +Terakhir, yang terpenting, aktifkan [autentikasi dan/atau otorisasi Kubelet](/docs/admin/kubelet-authentication-authorization/) untuk mengamankan API kubelet. |
| 60 | + |
| 61 | +### Apiserver menuju Node, Pod, dan Service |
| 62 | + |
| 63 | +Secara <i>default</i>, koneksi apiserver menuju node, pod atau service hanyalah melalui HTTP polos (<i>plain</i>), sehingga tidak ada autentikasi maupun enkripsi. |
| 64 | +Koneksi tersebut bisa diamankan melalui HTTPS dengan menambahkan `https:` pada URL API dengan nama dari node, pod, atau service. |
| 65 | +Namun, koneksi tidak tervalidasi dengan <i>certificate</i> yang disediakan oleh <i>endpoint</i> HTTPS maupun kredensial <i>client</i>, sehingga walaupun koneksi sudah terenkripsi, tidak ada yang menjamin integritasnya. |
| 66 | +Koneksi ini **tidak aman** untuk dilalui pada jaringan publik dan/atau tak terpercaya <i>untrusted</i>. |
| 67 | + |
| 68 | +### Tunnel SSH |
| 69 | + |
| 70 | +Kubernetes menyediakan tunnel SSH untuk mengamankan jalur komunikasi Master -> Kluster. |
| 71 | +Dengan ini, apiserver menginisiasi sebuah <i>tunnel</i> SSH untuk setiap node di dalam kluster (terhubung ke server SSH di port 22) dan membuat semua trafik menuju kubelet, node, pod, atau service dilewatkan melalui <i>tunnel</i> tesebut. |
| 72 | +<i>Tunnel</i> ini memastikan trafik tidak terekspos keluar jaringan dimana node-node berada. |
| 73 | + |
| 74 | +<i>Tunnel</i> SSH saat ini sudah usang (<i>deprecated</i>), jadi sebaiknya jangan digunakan, kecuali kamu tahu pasti apa yang kamu lakukan. |
| 75 | +Sebuah desain baru untuk mengganti kanal komunikasi ini sedang disiapkan. |
| 76 | + |
| 77 | +{{% /capture %}} |
0 commit comments