Jaringan Kubernetes menyediakan infrastruktur jaringan untuk memungkinkan komunikasi, skalabilitas, keamanan, dan akses eksternal untuk aplikasi yang dikontainerisasi.
Jaringan ini kompleks dan melibatkan komunikasi antara semua komponen utama yang ada di dalam seperti pod, node, kontainer, dan layanan; dan di luar seperti lalu lintas eksternal klaster Kubernetes.
Komponen-komponen ini bergantung pada empat metode jaringan yang berbeda untuk berkomunikasi:
1.Jaringan kontainer ke kontainer.
2. Jaringan pod ke pod.
3. Jaringan pod ke layanan.
4. Jaringan eksternal ke layanan.
Nama Kubernetes berasal dari bahasa Yunani, yang berarti juru mudi atau pilot. Berbasis Borg, platform orkestrasi kontainer internal Google, Kubernetes diperkenalkan ke publik sebagai alat sumber terbuka pada tahun 2014.
Pada tahun yang sama, Google menyumbangkan Kubernetes ke Cloud Native Computing Foundation, pusat komputasi cloud-native sumber terbuka dan netral vendor. Sejak saat itu, Kubernetes telah menjadi alat orkestrasi kontainer yang paling banyak digunakan untuk menjalankan beban kerja berbasis kontainer di seluruh dunia.
Kubernetes—juga disebut k8s atau kube—didesain secara eksplisit untuk mengotomatiskan pengelolaan kontainer—unit standar perangkat lunak yang mengemas kode dan semua dependensinya. Alat orkestrasi ini banyak dipilih karena dapat berjalan dengan cepat dan andal di lingkungan infrastruktur apa pun, baik on premises, cloud pribadi, cloud publik, maupun hybrid cloud.
Tidak seperti mesin virtual (VM) yang memvirtualisasikan perangkat keras fisik, kontainer memvirtualisasikan sistem operasi, seperti Linux atau Windows. Setiap kontainer hanya menampung pustaka dan dependensi aplikasi. Karena kontainer berbagi kernel sistem operasi yang sama dengan host, kontainer dianggap ringan, cepat, dan portabel.
Kubernetes dan ekosistem layanan, dukungan, dan alatnya telah menjadi fondasi untuk infrastruktur cloud modern dan modernisasi aplikasi. Semua penyedia cloud utama, termasuk Amazon Web Services (AWS), Google, Microsoft, IBM, dan Red Hat, mengintegrasikan Kubernetes dalam platform cloud mereka untuk meningkatkan kemampuan Platform-as-a-Service (PaaS) dan Infrastructure-as-a-Service (IaaS).
Komponen fundamental berikut terdiri dari arsitektur Kubernetes:
Klaster Kubernetes adalah sekumpulan mesin fisik atau virtual (node) yang bekerja sama untuk menjalankan aplikasi dalam kontainer. Klaster membentuk fondasi arsitektur Kubernetes.
Node master mewakili satu host komputasi, baik mesin virtual maupun fisik. Node tersebut menjadi host bagi komponen panel kontrol Kubernetes dan bertanggung jawab atas penjadwalan dan penskalaan aplikasi.
Dengan mengelola semua sumber daya komputasi, jaringan, dan penyimpanan dalam klaster Kubernetes, node master membantu memastikan bahwa aplikasi dan layanan yang terkontainerisasi diterapkan secara merata ke node pekerja dalam klaster.
Node pekerja bertanggung jawab untuk menjalankan kontainer dan melakukan pekerjaan apa pun yang ditugaskan oleh node master. Node juga menjadi host kontainer aplikasi, yang dikelompokkan sebagai pod.
Pod adalah kelompok dari satu atau lebih kontainer, seperti Linux atau Docker yang berbagi sumber daya komputasi dan jaringan yang sama. Pod merupakan unit penerapan klaster yang juga berfungsi sebagai unit skalabilitas.
Misalnya, jika kontainer dalam pod mengalami volume lalu lintas yang padat, Kubernetes dapat mereplikasi pod tersebut ke node lain dalam klaster. Kubernetes juga dapat mematikan pod jika volume lalu lintas menurun.
Komponen Kubernetes lainnya meliputi:
Penerapan: Penerapan di Kubernetes mengelola sekumpulan pod untuk menjalankan beban kerja aplikasi. Penerapan mengidentifikasi berapa banyak replika pod yang harus dijalankan pada klaster. Jika pod gagal, penerapan akan membuat replika yang baru.
Fitur penting ini membantu menskalakan jumlah pod replika, meluncurkan pembaruan kode, dan menjaga ketersediaan. Penerapan dilakukan dengan menggunakan kubectl, alat command line khusus Kubernetes.
Kubernetes Service: Kubernetes Service adalah lapisan abstraksi yang mendefinisikan satu set pod logis dan cara mengaksesnya. Kubernetes Service mengekspos aplikasi jaringan yang berjalan pada satu atau beberapa pod dalam klaster. Kubernetes Service menyediakan cara abstrak untuk menyeimbangkan beban pod.
Server antarmuka pemrograman aplikasi (API): Server API di Kubernetes mengekspos Kubernetes API (antarmuka yang digunakan untuk mengelola, membuat, dan mengonfigurasi klaster Kubernetes) dan berfungsi sebagai titik masuk untuk semua perintah dan kueri.
Jaringan komputer dasar bekerja dengan menghubungkan dua atau beberapa perangkat komputasi untuk berbagi data dan bertukar sumber daya, baik dengan kabel (berkabel) atau WiFi.
Dalam jaringan fisik, server fisik terhubung ke peralatan jaringan fisik seperti switch, router, dan kabel Ethernet untuk terhubung ke internet.
Dalam jaringan virtual, jaringan yang diatur oleh perangkat lunak (SDN), komponen seperti perangkat ethernet virtual dan antarmuka virtual diinstal pada bare metal server atau mesin virtual untuk terhubung ke internet. Penerapan Kubernetes mengandalkan SDN untuk mengonfigurasi dan mengelola komunikasi jaringan di seluruh klaster.
Sebelum menggali lebih dalam jaringan Kubernetes, sebaiknya Anda meninjau istilah jaringan dasar:
Host jaringan: Host jaringan adalah komputer apa pun yang terhubung ke jaringan yang menyediakan informasi, aplikasi, atau layanan ke host atau node lain di jaringan.
Alamat Internet Protocol (IP):Â Alamat IP adalah nomor unik yang ditetapkan untuk setiap perangkat yang terhubung ke jaringan yang menggunakan IP untuk komunikasi. Alamat ini mengidentifikasi jaringan host perangkat dan lokasi perangkat di jaringan host.
Localhost: Localhost adalah nama host default yang bertindak sebagai alamat IP pribadi, menunjuk langsung ke komputer atau perangkat yang digunakan.
Port: Port mengidentifikasi koneksi tertentu antara perangkat jaringan. Satu angka mengidentifikasi setiap port. Komputer menggunakan nomor port untuk menentukan aplikasi, layanan, atau proses mana yang harus menerima pesan tertentu.
Penafsiran alamat jaringan (NAT): NAT mengubah alamat internal atau pribadi menjadi alamat IP publik atau yang dapat dirutekan secara global, memungkinkan akses internet yang aman. NAT memungkinkan satu alamat IP unik untuk mewakili seluruh kelompok perangkat komputasi.
Agen node:Â Agen node adalah agen administratif yang memantau server aplikasi pada sistem host dan merutekan permintaan administratif ke server lain.
Namespace jaringan: Namespace jaringan adalah kumpulan antarmuka jaringan dan instruksi tabel perutean yang menyediakan isolasi antara perangkat jaringan.
Proxy atau server proxy:Â Proxy menyediakan gateway antara pengguna dan internet.
Kubernetes dibuat untuk menjalankan sistem terdistribusi dengan bidang jaringan yang tersebar di sekelompok mesin. Selain menyediakan interkonektivitas antar komponen, jaringan kluster Kubernetes menciptakan lingkungan yang mulus di mana data dapat bergerak dengan bebas dan efisien melalui jaringan yang ditentukan oleh perangkat lunak.
Fitur lain yang berbeda dari jaringan Kubernetes adalah struktur jaringannya yang datar, yang berarti semua komponen bisa terhubung tanpa bergantung pada perangkat keras lain. Di Kubernetes, setiap pod dalam klaster dapat berkomunikasi dengan setiap pod lainnya, apa pun node yang dijalankannya. Jaringan datar menyediakan cara yang efisien untuk berbagi sumber daya dan menghilangkan kebutuhan akan alokasi port yang dinamis.
Secara keseluruhan, jaringan Kubernetes mengabstraksi kompleksitas, sehingga pengembang dan operator dapat fokus pada membangun dan memelihara aplikasi daripada berurusan dengan konfigurasi jaringan yang rumit.
Kubernetes menyediakan model jaringan untuk membantu mengatasi tantangan dalam mengatur aplikasi yang terkontainerisasi di lingkungan terdistribusi. Waktu proses kontainer pada setiap node menerapkan model jaringan dan mematuhi aturan berikut:
Setiap pod memiliki alamat IP sendiri, yang dapat dirutekan dalam klaster. Fitur ini meniadakan kebutuhan untuk membuat tautan antara pod dan port pemetaan.
Karena setiap pod memiliki alamat IP sendiri, NAT tidak diperlukan. Semua pod dapat berkomunikasi dengan semua pod lain dalam klaster tanpa NAT.
Agen pada node, seperti kubelet, agen node utama yang berjalan pada setiap node, dapat berkomunikasi dengan semua pod pada node tersebut.
Model jaringan Kubernetes berlaku untuk 4 jenis dasar komunikasi Kubernetes:
Kontainer adalah unit terkecil dalam jaringan Kubernetes. Dalam konfigurasi jaringan dasar, kontainer berkomunikasi dalam satu pod melalui localhost.
Komunikasi ini dapat terjadi karena kontainer dalam pod yang sama menggunakan namespace jaringan yang sama, yang mencakup sumber daya jaringan seperti penyimpanan, alamat IP, dan ruang port.
Komunikasi pod ke pod meliputi komunikasi antara pod pada node yang sama dan komunikasi antara pod pada node yang berbeda. Setiap pod dalam klaster Kubernetes memiliki alamat IP uniknya sendiri, sehingga memungkinkan komunikasi langsung antar pod terlepas dari node tempat pod tersebut berada.
Selain itu, setiap klaster Kubernetes secara otomatis menyediakan layanan sistem nama domain (layanan DNS) sebagai tambahan untuk alamat IP pod. Layanan DNS tempat nama ditetapkan ke pod dan layanan menciptakan nama yang mudah dibaca oleh administrator, menyediakan mekanisme yang ringan untuk penemuan layanan.
Layanan di Kubernetes adalah abstraksi yang mendefinisikan sekumpulan pod secara logis dan memungkinkan pemaparan lalu lintas eksternal, penyeimbangan beban, dan penemuan layanan ke pod-pod tersebut. Layanan memfasilitasi komunikasi pod-ke-layanan dan eksternal-ke-layanan.
Menurut model jaringan Kubernetes, alamat IP pod bersifat sementara. Oleh karena itu, jika sebuah pod mengalami kerusakan atau dihapus dan pod baru dibuat sebagai gantinya, pod baru kemungkinan besar akan menerima alamat IP baru.
Dalam komunikasi pod ke layanan, ClusterIP adalah jenis layanan yang menyediakan alamat IP virtual yang stabil untuk sekumpulan pod. IP internal ini hanya dapat dijangkau di dalam klaster dan dapat digunakan untuk komunikasi internal antara pod dan layanan.
Kube-proxy, yang diinstal pada setiap node dalam kluster, memelihara aturan jaringan pada host dan memantau perubahan dalam layanan dan pod. Saat pod dibuat atau dihancurkan, kube-proxy memperbarui iptables (program utilitas yang digunakan untuk membuat aturan pada firewall kernel Linux untuk merutekan lalu lintas) untuk mencerminkan perubahan tersebut sehingga lalu lintas yang dikirim ke IP layanan dirutekan dengan benar.
Pembuatan jaringan eksternal ke layanan mengacu pada pengeksposan dan pengaksesan layanan, seperti layanan eksternal atau database, dari luar klaster Kubernetes.
Kubernetes menyediakan beberapa Kubernetes service untuk memfasilitasi lalu lintas eksternal ke dalam klaster:
ClusterIP: Meskipun ClusterIP adalah Kubernetes service default untuk komunikasi internal, lalu lintas eksternal dapat mengaksesnya melalui kube-proxy. ClusterIP dapat membantu saat mengakses layanan di laptop atau men-debug layanan.
NodePort:Â NodePort mengekspos layanan pada port statis di setiap IP node, sehingga layanan dapat diakses di luar klaster. NodePort adalah cara paling dasar untuk membuat jaringan eksternal ke layanan dan sering digunakan untuk tujuan pengujian, seperti pengujian akses publik ke aplikasi.
LoadBalancer: LoadBalancer adalah standar untuk pembuatan jaringan layanan eksternal, yang mengekspos layanan secara eksternal dengan menggunakan penyeimbang beban dari penyedia cloud dan menetapkan alamat IP publik ke layanan. Lalu lintas dari penyeimbang beban eksternal kemudian diarahkan ke pod backend.
ExternalName: Layanan nama eksternal memungkinkan akses ke layanan eksternal dengan nama DNS tanpa mengeksposnya di klaster DNS. Jenis layanan ini membantu menyediakan nama DNS yang stabil untuk layanan eksternal, seperti layanan pesan yang tidak dihosting di dalam klaster.
Ingress: Kubernetes Ingress adalah kumpulan aturan perutean seputar akses eksternal ke layanan dalam klaster. Ingress Controller adalah penyeimbang beban yang bertindak sebagai perantara (bridge) jaringan antara layanan Kubernetes dan layanan eksternal.
Kebijakan jaringan Kubernetes adalah konstruksi aplikasi yang berperan penting dalam jaringan Kubernetes. Kebijakan ini memungkinkan administrator dan pengembang untuk menetapkan aturan yang menentukan bagaimana pod dapat berkomunikasi satu sama lain dan dengan titik akhir jaringan lainnya.
Kebijakan jaringan diterapkan dengan menggunakan Network Policies API Kubernetes dan terdiri dari komponen dasar berikut:
Pemilih pod: Pemilih pod menentukan pod yang dipilih untuk penerapan kebijakan berdasarkan label dan pemilih.
Ingress: Ingress mendefinisikan aturan untuk lalu lintas masuk ke pod
Egress: Egress mendefinisikan aturan untuk lalu lintas keluar dari pod.
Kebijakan jaringan Kubernetes membantu mendefinisikan dan mengelola kebijakan keamanan dengan menentukan aturan yang mengontrol pod mana yang dapat berkomunikasi satu sama lain, sehingga mencegah akses yang tidak sah dan mencegah serangan berbahaya.
Kebijakan jaringan juga memastikan isolasi antara pod dan layanan sehingga hanya pod atau layanan tersebut yang dapat berkomunikasi dengan sekumpulan pod dan layanan yang diizinkan. Misalnya, isolasi sangat penting untuk situasi multi-penyewa ketika DevOps atau tim lain berbagi klaster Kubernetes yang sama namun mengerjakan proyek yang berbeda.
Untuk perusahaan dengan persyaratan kepatuhan khusus, kebijakan jaringan membantu menentukan dan menerapkan kontrol akses jaringan. Hal ini membantu memenuhi standar peraturan dan membantu memastikan bahwa klaster mematuhi kebijakan organisasi.
Antarmuka Jaringan Kontainer (CNI) adalah fitur penting lainnya yang terkait dengan jaringan Kubernetes. Dibuat dan dikelola oleh Cloud Native Computing Foundation dan digunakan oleh Kubernetes serta waktu proses kontainer lainnya, termasuk RedHat OpenShift dan Apache Mesos, CNI merupakan spesifikasi standar dan kumpulan API yang menentukan bagaimana plug-in jaringan memungkinkan pembuatan jaringan kontainer.
Plug-in CNI dapat menetapkan alamat IP, membuat namespace jaringan, mengatur rute jaringan, dan seterusnya untuk memungkinkan komunikasi pod ke pod, baik di dalam node yang sama maupun antar-node.
Meskipun Kubernetes menyediakan CNI default, banyak plug-in CNI pihak ketiga, termasuk Calico, Flannel, dan Weave, dirancang untuk menangani konfigurasi dan keamanan dalam lingkungan jaringan berbasis kontainer.
Meskipun masing-masing mungkin memiliki fitur dan pendekatan yang berbeda terhadap jaringan, seperti jaringan overlay atau perutean langsung, semuanya mematuhi spesifikasi CNI yang kompatibel dengan Kubernetes.
Jika Anda ingin mulai bekerja dengan Kubernetes atau ingin meningkatkan kemampuan Anda yang sudah ada dengan Kubernetes dan alat ekosistem Kubernetes, cobalah salah satu dari tutorial berikut ini.
IBM Cloud Pak for Network Automation adalah Cloud Pak yang memungkinkan otomatisasi dan orkestrasi operasi infrastruktur jaringan.
Solusi jaringan cloud dari IBM menyediakan konektivitas berkinerja tinggi untuk mendukung aplikasi dan bisnis Anda.
Konsolidasikan dukungan pusat data dengan IBM Technology Lifecycle Services untuk jaringan cloud dan banyak lagi.