Rangkaian Kubernetes - Panduan Komprehensif Mengenai Konsep Rangkaian Di Kubernetes



Blog di Kubernetes Networking ini akan menyelami konsep yang terlibat dalam Kubernetes seperti komunikasi dengan pod, perkhidmatan dan rangkaian masuk.

Di blog sebelumnya di , anda mesti mendapat pemahaman mengenai Kubernetes. Dalam blog ini di rangkaian Kubernetes, saya terutamanya akan memberi tumpuan kepada konsep rangkaian yang terlibat dalam Kubernetes.

Dalam blog ini di Kubernetes Networking, anda akan memahami topik berikut:





Apa itu Kubernetes?

Anda boleh mendefinisikan Kubernetes sebagai alat orkestrasi kontena sumber terbuka yang menyediakan platform mudah alih untuk mengotomatisasi penyebaran aplikasi kontena.

Sekarang, sesiapa yang bekerja dengan Kubernetes mesti mempunyai pemahaman yang jelas tentang Kubernetes Cluster kerana itu akan membantu anda dalam memahami Kubernetes Networking.



Kluster Kubernetes

Platform Kubernetes menawarkan pengurusan keadaan yang diinginkan, yang membolehkan perkhidmatan kluster berjalan, konfigurasi yang diberi makan dalam infrastruktur. Izinkan saya menerangkan dengan contoh.

Pertimbangkan fail YAML yang mempunyai semua maklumat konfigurasi yang perlu dimasukkan ke dalam perkhidmatan kluster. Jadi, fail ini dimasukkan ke API perkhidmatan kluster, dan kemudian bergantung kepada perkhidmatan kluster untuk mengetahui bagaimana menjadwalkan pod di lingkungan. Oleh itu, anggap ada dua gambar bekas untuk pod 1 dengan tiga replika, dan satu gambar bekas untuk pod 2 dengan dua replika, itu bergantung kepada perkhidmatan kluster untuk memperuntukkan pasangan pod-replika ini kepada pekerja.

javascript mendapatkan panjang tatasusunan

Kluster Kubernetes - Rangkaian Kubernetes - Edureka



Rujuk rajah di atas. Sekarang, seperti yang anda lihat bahawa perkhidmatan kluster telah memperuntukkan pekerja pertama dengan dua pasang replika pod, pekerja kedua dengan pasangan replika pod tunggal, dan pekerja ketiga dengan dua pasangan replika pod. Sekarang, proses Kubelet bertanggung jawab untuk menyampaikan perkhidmatan kluster dengan pekerja.

Oleh itu, keseluruhan penyediaan perkhidmatan kluster dan pekerja sendiri membuat ini Kluster Kubernetes !!

Bagaimana, menurut anda pod ini yang diperuntukkan secara individu saling berkomunikasi?

Jawapannya terletak pada Kubernetes Networking!

Langgan saluran youtube kami untuk mendapatkan kemas kini baru ..!

Terdapat terutamanya 4 masalah untuk diselesaikan dengan konsep rangkaian.

  • Komunikasi kontena ke kontena
  • Komunikasi Pod ke pod
  • Komunikasi Pod ke perkhidmatan
  • Komunikasi luaran ke perkhidmatan

Sekarang, izinkan saya memberitahu anda bagaimana masalah di atas dapat diselesaikan dengan Kubernetes Networking.

Rangkaian Kubernetes

Komunikasi antara pod, perkhidmatan dan perkhidmatan luaran dengan yang ada dalam kelompok membawa konsep rangkaian Kubernetes.

Oleh itu, untuk pemahaman anda yang lebih baik, izinkan saya membahagikan konsep kepada yang berikut.

  • Komunikasi Pod & Kontena
  • Perkhidmatan
  • Menghubungkan Perkhidmatan Luar dengan Rangkaian Ingress

Komunikasi Pod & Kontena

Sebelum saya memberitahu anda bagaimana pod berkomunikasi, izinkan saya memperkenalkan anda apa itu pod?

Pod

Pod adalah unit asas aplikasi Kubernetes, yang terdiri daripada satu atau lebih bekas yang diperuntukkan pada host yang sama untuk berkongsi timbunan rangkaian dan sumber lain. Jadi, ini menunjukkan bahawa semua kontena dalam pod dapat menghubungi yang lain di host tempatan.

Sekarang, izinkan saya memberi penerangan mengenai bagaimana kumpulan ini berkomunikasi?

Terdapat 2 jenis komunikasi. The komunikasi antara nod dan juga komunikasi intra-nod.

Oleh itu, mari kita mulakan dengan komunikasi intra-node, tetapi sebelum itu izinkan saya memperkenalkan kepada anda komponen rangkaian pod.

Rangkaian Intra-nod

Rangkaian pod intra-nod pada dasarnya adalah komunikasi antara dua nod yang berbeza pada pod yang sama. Izinkan saya menerangkan anda dengan contoh.

Anggap satu paket beralih dari pod1 ke pod2.

  • Paket meninggalkan rangkaian Pod 1 pada eth0 dan memasuki rangkaian root di veth0
  • Kemudian, paket tersebut melewati jambatan Linux (cbr0) yang menemui destinasi menggunakan permintaan ARP
  • Jadi, jika veth1 mempunyai IP, jambatan sekarang tahu di mana untuk meneruskan paket.

Sekarang, saya akan memberitahu anda mengenai komunikasi pod antara nod.

Berminat untuk Belajar Kubernetes?
Node antara rangkaian

Pertimbangkan dua nod yang mempunyai pelbagai ruang nama rangkaian, antara muka rangkaian, dan jambatan Linux.

Sekarang, anggap satu paket bergerak dari pod1 ke pod4 yang berada pada nod yang berbeza.

  • Paket meninggalkan rangkaian pod 1 dan memasuki rangkaian root di veth0
  • Kemudian paket diteruskan ke jambatan Linux (cbr0) yang tanggungjawabnya adalah untuk membuat permintaan ARP untuk mencari tujuan.
  • Setelah jambatan menyedari bahawa pod ini tidak mempunyai alamat tujuan, paket itu kembali ke antara muka rangkaian utama eth0.
  • Paket sekarang meninggalkan nod 1 untuk mencari tujuannya di simpul yang lain dan memasuki jadual laluan yang mengarahkan paket ke nod yang blok CIDRnya mengandungi pod4.
  • Jadi, sekarang paket mencapai node2 dan kemudian jambatan mengambil paket yang membuat permintaan ARP untuk mengetahui bahawa IP milik veth0.
  • Akhirnya, paket melintasi pasangan paip dan mencapai pod4.

Jadi, begitulah pod berkomunikasi antara satu sama lain. Sekarang, mari kita teruskan dan lihat bagaimana perkhidmatan membantu dalam komunikasi pod.

Oleh itu, apa pendapat anda tentang perkhidmatan tersebut?

Perkhidmatan

Pada dasarnya, perkhidmatan adalah sejenis sumber yang mengkonfigurasi proksi untuk meneruskan permintaan ke sekumpulan pod, yang akan menerima lalu lintas & ditentukan oleh pemilih. Setelah perkhidmatan dibuat, ia mempunyai alamat IP yang akan menerima permintaan di port.

Kini, terdapat pelbagai jenis perkhidmatan yang memberi anda pilihan untuk mendedahkan perkhidmatan di luar alamat IP kluster anda.

Jenis Perkhidmatan

Terdapat terutamanya 4 jenis perkhidmatan.

KlusterIP: Ini adalah jenis perkhidmatan lalai yang memperlihatkan perkhidmatan pada IP dalaman kluster dengan menjadikan perkhidmatan hanya dapat dicapai dalam kluster.

NodePort: Ini memperlihatkan perkhidmatan pada setiap IP Node di port statik. Sejak, a KlusterIP perkhidmatan, yang akan dilalui perkhidmatan NodePort, dibuat secara automatik. Kami boleh menghubungi perkhidmatan NodePort di luar kluster.

LoadBalancer: Ini adalah jenis perkhidmatan yang memperlihatkan perkhidmatan secara luaran menggunakan penyeimbang beban penyedia awan. Oleh itu, perkhidmatan NodePort dan ClusterIP, yang akan dilalui oleh pengimbang beban luaran, dibuat secara automatik.

Nama Luaran : Jenis perkhidmatan ini memetakan perkhidmatan ke kandungan Nama luar padang dengan mengembalikan a CNAME catat dengan nilainya.

Jadi, lelaki itu semua mengenai perkhidmatan. Sekarang, anda mungkin tertanya-tanya bagaimana perkhidmatan luaran menyambung ke rangkaian ini bukan?

Tidak, itu tidak lain Rangkaian Ingress .

Rangkaian Ingress

Nah, rangkaian Ingress adalah cara yang paling kuat untuk mengekspos perkhidmatan kerana ia adalah kumpulan peraturan yang membenarkan sambungan masuk, yang dapat dikonfigurasi untuk memberikan perkhidmatan secara luaran melalui URL yang dapat dicapai. Jadi, pada dasarnya bertindak sebagai titik masuk ke kluster Kubernetes yang menguruskan akses luaran ke perkhidmatan dalam kluster.

Sekarang, izinkan saya menerangkan kepada anda cara kerja Ingress Network dengan contoh.

Kami mempunyai 2 nod, mempunyai ruang nama rangkaian pod dan root dengan jambatan Linux. Selain ini, kami juga mempunyai peranti ethernet maya baru yang disebut flannel0 (network plugin) yang ditambahkan ke rangkaian root.

Sekarang, kami mahu paket mengalir dari pod1 ke pod 4.

  • Jadi, paket meninggalkan rangkaian pod1 pada eth0 dan memasuki rangkaian root di veth0.
  • Kemudian diteruskan ke cbr0, yang membuat permintaan ARP untuk mencari tujuan dan selepas itu mengetahui bahawa tiada siapa di node ini yang mempunyai alamat IP tujuan.
  • Oleh itu, jambatan menghantar paket ke flannel0 kerana jadual laluan nod dikonfigurasikan dengan flannel0.
  • Sekarang, flanel daemon bercakap dengan pelayan API Kubernetes untuk mengetahui semua IP pod dan nod masing-masing untuk membuat pemetaan untuk IP pod ke IP nod.
  • Plugin rangkaian membungkus paket ini dalam paket UDP dengan header tambahan mengubah sumber dan IP tujuan ke node masing-masing dan menghantar paket ini melalui eth0.
  • Sekarang, kerana jadual laluan sudah mengetahui cara mengarahkan lalu lintas antara node, ia menghantar paket ke simpul tujuan2.
  • Paket tiba di eth0 dari node2 dan kembali ke flannel0 untuk membatalkan kapsul dan mengeluarkannya kembali di ruang nama rangkaian root.
  • Sekali lagi, paket tersebut diteruskan ke jambatan Linux untuk membuat permintaan ARP untuk mengetahui IP milik veth1.
  • Paket akhirnya melintasi rangkaian root dan sampai ke destinasi Pod4.

Jadi, itulah cara perkhidmatan luaran dihubungkan dengan bantuan rangkaian masuk. Sekarang, semasa saya bercakap mengenai pemalam Rangkaian, izinkan saya memperkenalkan anda kepada senarai pemalam rangkaian popular yang ada.

Sekarang, kerana saya telah memberitahu anda banyak mengenai Kubernetes Networking, izinkan saya menunjukkan kepada anda satu kajian kes sebenar.

Kajian Kes: Wealth Wizard Menggunakan Kubernetes Networking

Wealth Wizards adalah platform perancangan kewangan dalam talian yang menggabungkan perancangan kewangan, dan teknologi perisian pintar untuk menyampaikan nasihat pakar dengan kos yang berpatutan.

Cabaran

Sekarang, sangat penting bagi syarikat untuk dengan cepat menemui dan menghilangkan kerentanan kod dengan penglihatan sepenuhnya persekitaran awan mereka tetapi ingin mengawal lalu lintas melalui sekatan akses.

Oleh itu, mereka menggunakan infrastruktur Kubernetes untuk mengurus penyediaan dan peluncuran kluster dengan bantuan alat untuk menguruskan penyebaran dan konfigurasi perkhidmatan mikro di seluruh kelompok Kube.

Mereka juga menggunakan fitur dasar jaringan Kubernetes untuk membolehkan mereka mengawal lalu lintas melalui sekatan akses.

Masalahnya adalah, kebijakan ini berorientasi aplikasi dan hanya dapat berkembang dengan aplikasi, tetapi, tidak ada komponen untuk menerapkan kebijakan ini.

Oleh itu, satu-satunya penyelesaian yang dapat dicari syarikat ini adalah dengan menggunakan plugin rangkaian, dan oleh itu mereka mula menggunakan Weave Net.

Penyelesaian

Plugin rangkaian ini membuat rangkaian maya yang mempunyai pengawal dasar rangkaian untuk mengurus dan menguatkuasakan peraturan di Kubernetes. Bukan hanya ini, tetapi juga menghubungkan kontena Docker di pelbagai hos dan membolehkan penemuan automatik mereka.

Jadi, andaikan anda mempunyai beban kerja di kluster dan anda mahu menghentikan beban kerja lain di kluster yang membicarakannya. Anda boleh mencapainya dengan membuat polisi rangkaian yang menyekat akses dan hanya membenarkan masuk melalui pengawal masuk pada port tertentu.

Sekarang, dengan penyebarannya di setiap node Kubernetes, plugin tersebut mengatur routing antara pod dan mempunyai akses untuk memanipulasi peraturan IPtables. Secara sederhana, setiap polisi ditukar menjadi kumpulan peraturan IPtables, diselaraskan dan dikonfigurasikan di setiap mesin untuk menterjemahkan tag Kubernetes.

Baiklah, sekarang anda telah melalui begitu banyak teori mengenai Kubernetes Networking, izinkan saya menunjukkan kepada anda bagaimana ia dilakukan secara praktikal.

Hands-On

Oleh itu, dengan anggapan bahawa anda semua telah memasang Kubernetes pada sistem anda, saya mempunyai senario untuk dipamerkan.

Katakan anda ingin menyimpan nama produk dan ID produk, untuk itu anda memerlukan aplikasi web. Pada asasnya, anda memerlukan satu bekas untuk aplikasi web dan anda memerlukan satu bekas lagi sebagai MySQL untuk backend, dan bekas MySQL itu harus dihubungkan ke wadah aplikasi web.

Bagaimana saya melaksanakan contoh yang dinyatakan di atas secara praktikal.

Mari kita mulakan!

Langkah 1: Buat folder di direktori yang anda inginkan dan ubah jalan direktori yang berfungsi ke folder itu.

mkdir HandsOn cd HandsOn /

Langkah 2: Sekarang buat fail penyebaran YAML, untuk aplikasi web dan pangkalan data MySQL.

Langkah 3: Setelah anda membuat fail penyebaran, terapkan kedua-dua aplikasi tersebut.

kubectl apply -f webapp.yml kubectl apply -f mysql.yml

Langkah 3.1: Periksa kedua-dua penerapan.

kubectl mendapatkan penyebaran

Langkah 4: Sekarang, anda harus membuat perkhidmatan untuk kedua-dua aplikasi tersebut.

kubectl apply -f webservice.yml kubectl apply -f sqlservice.yml

Langkah 4.1: Setelah perkhidmatan dibuat, gunakan perkhidmatan tersebut.

Langkah 4.2: Periksa sama ada perkhidmatan telah dibuat atau tidak.

kubectl dapatkan perkhidmatan

Langkah 5: Sekarang, periksa konfigurasi pod yang sedang berjalan.

kubectl dapatkan polong

Langkah 6: Masuk ke bekas di dalam pod webapp.

kubectl exec -it container_id bash nano var / www / html / index.php

Langkah 6.1 : Sekarang, ubah $ nama pelayan dari localhost hingga nama perkhidmatan SQL yang “ webapp-sql1 'Dalam kes ini, dan $ kata laluan daripada kepada ' edureka ' Juga, isi semua butiran pangkalan data yang diperlukan dan simpan fail index.php anda dengan menggunakan pintasan papan kekunci Ctrl + x dan selepas itu akhbar Y untuk menyimpan dan tekan masuk .

Langkah 7: Sekarang, masuk ke bekas MySQL yang terdapat di dalam pod.

kubectl exec it container_id bash

Langkah 7.1: Dapatkan akses untuk menggunakan wadah MySQL.

mysql -u root -p edureka

Di mana -u mewakili pengguna dan -p adalah kata laluan mesin anda.

Langkah 7.2: Buat pangkalan data di MySQL yang akan digunakan untuk mendapatkan data dari webapp.

BUAT BUTIRAN DATA

Langkah 7.3: Gunakan pangkalan data yang dibuat.

GUNAKAN Butiran Produk

Langkah 7.4: Buat jadual dalam pangkalan data ini di MySQL yang akan digunakan untuk mendapatkan data dari webapp.

BUAT produk JADUAL (nama_produk VARCHAR (10), produk_id VARCHAR (11))

Langkah 7.5: Sekarang, keluar dari bekas MySQL juga menggunakan arahan jalan keluar .

Langkah 8: Periksa nombor port di mana aplikasi web anda berfungsi.

kubectl mendapatkan perkhidmatan

Langkah 8.1: Sekarang, buka aplikasi web pada nombor port yang diperuntukkan.

Langkah 9: Sebaik sahaja anda mengklik Hantar Pertanyaan , pergi ke nod di mana perkhidmatan MySQL anda dijalankan dan kemudian masuk ke dalam bekas.

Ini akan menunjukkan kepada anda keluaran semua produk senarai, yang mana anda telah mengisi butirannya.

Berminat untuk Belajar Kubernetes?

Sekiranya blog Kubernetes Networking ini relevan, lihat di oleh Edureka, sebuah syarikat pembelajaran dalam talian yang dipercayai dengan rangkaian lebih daripada 250,000 pelajar berpuas hati yang tersebar di seluruh dunia.