Kepiye pod ing Kubernetes entuk alamat IP

Cathetan. nerjemahake.: Artikel iki, sing ditulis dening insinyur SRE saka LinkedIn, njlentrehake babagan sihir batin ing Kubernetes - luwih tepat, interaksi CRI, CNI lan kube-apiserver - sing kedadeyan nalika pod sabanjure kudu diwenehi alamat IP.

Salah sawijining syarat dhasar Model jaringan Kubernetes yaiku saben pod kudu duwe alamat IP dhewe lan pod liyane ing kluster kudu bisa ngubungi ing alamat kasebut. Ana akeh "panyedhiya" jaringan (Flannel, Calico, Canal, etc.) sing mbantu ngleksanakake model jaringan iki.

Nalika aku miwiti nggarap Kubernetes, aku ora ngerti persis kepiye pod entuk alamat IP. Malah kanthi pangerten babagan fungsi komponen individu, angel mbayangake dheweke bisa kerja bareng. Contone, aku ngerti apa plugins CNI, nanging aku ora ngerti carane persis padha disebut. Mula, aku mutusake nulis artikel iki kanggo nuduhake kawruh babagan macem-macem komponen jaringan lan cara kerjane bebarengan ing kluster Kubernetes, sing ngidini saben pod entuk alamat IP sing unik.

Ana macem-macem cara kanggo ngatur jaringan ing Kubernetes, kaya ana macem-macem opsi runtime kanggo wadhah. Publikasi iki bakal digunakake Flannel kanggo ngatur jaringan ing kluster, lan minangka lingkungan eksekusi - Wadhah. Aku uga nggawe asumsi sing ngerti carane jaringan antarane kontaner dianggo, supaya aku mung ndemek ing sedhela, mung kanggo konteks.

Sawetara konsep dhasar

Wadhah lan Jaringan: Ringkesan Singkat

Ana akeh publikasi apik banget ing Internet sing nerangake carane kontaner komunikasi karo saben liyane liwat jaringan. Mulane, aku mung bakal menehi gambaran umum saka konsep dhasar lan matesi dhewe kanggo siji pendekatan, kang melu nggawe jembatan Linux lan paket encapsulating. Rincian diilangi, amarga topik jaringan kontainer dhewe pantes artikel sing kapisah. Pranala menyang sawetara publikasi khusus sing migunani lan pendidikan bakal diwenehake ing ngisor iki.

Wadhah ing siji inang

Salah siji cara kanggo ngatur komunikasi liwat alamat IP ing antarane kontaner sing mlaku ing host sing padha yaiku nggawe jembatan Linux. Kanggo tujuan iki, piranti virtual digawe ing Kubernetes (lan Docker) veth (virtual ethernet). Siji mburi piranti veth nyambung menyang papan jeneng jaringan wadhah, liyane kanggo Jembatan Linux ing jaringan host.

Kabeh kontaner ing host sing padha duwe siji mburi veth sing disambungake menyang jembatan sing bisa komunikasi karo siji liyane liwat alamat IP. Jembatan Linux uga nduweni alamat IP lan minangka gateway kanggo lalu lintas egress saka pods sing dituju kanggo node liyane.

Kepiye pod ing Kubernetes entuk alamat IP

Wadhah ing macem-macem host

Enkapsulasi paket minangka salah sawijining cara sing ngidini wadhah ing macem-macem simpul bisa komunikasi karo siji liyane nggunakake alamat IP. Ing Flannel, teknologi tanggung jawab kanggo kesempatan iki. vxlan, sing "ngemas" paket asli menyang paket UDP banjur dikirim menyang panggonan sing dituju.

Ing kluster Kubernetes, Flannel nggawe piranti vxlan lan nganyari tabel rute ing saben simpul. Saben paket sing dituju kanggo wadhah ing host sing beda liwat piranti vxlan lan dikemas ing paket UDP. Ing panggonan sing dituju, paket nested diekstrak lan diterusake menyang pod sing dikarepake.

Kepiye pod ing Kubernetes entuk alamat IP
Cathetan: Iki mung salah sawijining cara kanggo ngatur komunikasi jaringan ing antarane wadah.

Apa CRI?

CRI (Kontainer Runtime Interface) minangka plugin sing ngidini kubelet nggunakake lingkungan runtime wadhah sing beda. CRI API dibangun ing macem-macem runtime, supaya pangguna bisa milih runtime sing dipilih.

Apa CNI?

Proyek CNI yaiku ... a spesifikasi kanggo ngatur solusi jaringan universal kanggo kontaner Linux. Kajaba iku, kalebu plugins, tanggung jawab kanggo macem-macem fungsi nalika nyetel jaringan pod. Plugin CNI minangka file eksekusi sing tundhuk karo spesifikasi (kita bakal ngrembug sawetara plugin ing ngisor iki).

Alokasi subnet menyang simpul kanggo menehi alamat IP menyang pod

Wiwit saben pod ing kluster kudu duwe alamat IP, iku penting kanggo mesthekake yen alamat iki unik. Iki digayuh kanthi menehi saben simpul subnet unik, saka ngendi pod ing simpul kasebut banjur diwenehi alamat IP.

Node IPAM Controller

Nalika nodeipam liwati minangka parameter flag --controllers kube-controller-manager, iku allocates subnet kapisah (podCIDR) saka CIDR kluster (i.e., sawetara alamat IP kanggo jaringan kluster) kanggo saben simpul. Wiwit podCIDRs iki ora tumpang tindih, dadi bisa kanggo saben pod diwenehi alamat IP unik.

A simpul Kubernetes diutus podCIDR nalika pisanan kedhaftar karo kluster. Kanggo ngganti podCIDR saka simpul, sampeyan kudu deregister banjur ndhaftar maneh, nggawe owah-owahan cocok kanggo konfigurasi lapisan kontrol Kubernetes ing antarane. Sampeyan bisa nampilake podCIDR saka simpul nggunakake printah ing ngisor iki:

$ kubectl get no <nodeName> -o json | jq '.spec.podCIDR'
10.244.0.0/24

Kubelet, wadhah wadhah lan plugin CNI: cara kerjane

Jadwal polong saben simpul mbutuhake akeh langkah persiapan. Ing bagean iki, aku bakal fokus mung ing sing langsung related kanggo nyetel jaringan pod.

Njadwalake pod menyang simpul tartamtu bakal nyebabake rantai acara ing ngisor iki:

Kepiye pod ing Kubernetes entuk alamat IP

Pitulung: Arsitektur plugin Containerd CRI.

Interaksi antarane runtime wadhah lan plugin CNI

Saben panyedhiya jaringan duwe plugin CNI dhewe. Runtime wadhah mlaku kanggo ngatur jaringan kanggo pod nalika diwiwiti. Ing kasus containerd, plugin CNI diluncurake dening plugin kasebut Containerd CRI.

Kajaba iku, saben panyedhiya duwe agen dhewe. Dipasang ing kabeh simpul Kubernetes lan tanggung jawab kanggo konfigurasi jaringan pods. Agen iki kalebu karo konfigurasi CNI utawa nggawe dhewe ing simpul. Konfigurasi mbantu nyetel plugin CRI sing bakal diarani plugin CNI.

Lokasi konfigurasi CNI bisa disesuaikan; kanthi gawan iku ing /etc/cni/net.d/<config-file>. Administrator cluster uga tanggung jawab kanggo nginstal plugin CNI ing saben simpul cluster. Panggonane uga bisa disesuaikan; direktori standar - /opt/cni/bin.

Nalika nggunakake containerd, dalan kanggo konfigurasi plugin lan binari bisa disetel ing bagean kasebut [plugins.Β«io.containerd.grpc.v1.criΒ».cni] Π² file konfigurasi containerd.

Amarga kita nggunakake Flannel minangka panyedhiya jaringan, ayo ngomong sethithik babagan nyetel:

  • Flanneld (daemon Flannel) biasane dipasang ing kluster minangka DaemonSet karo install-cni minangka wadhah init.
  • Install-cni nggawe file konfigurasi CNI (/etc/cni/net.d/10-flannel.conflist) ing saben simpul.
  • Flanneld nggawe piranti vxlan, njupuk metadata jaringan saka server API, lan ngawasi nganyari pod. Nalika lagi digawe, iku distributes rute kanggo kabeh pods saindhenging kluster.
  • Rute iki ngidini pods kanggo komunikasi karo saben liyane liwat alamat IP.

Kanggo informasi sing luwih rinci babagan karya Flanel, aku nyaranake nggunakake tautan ing pungkasan artikel.

Mangkene diagram interaksi antarane plugin Containerd CRI lan plugin CNI:

Kepiye pod ing Kubernetes entuk alamat IP

Kaya sing sampeyan deleng ing ndhuwur, kubelet nelpon plugin Containerd CRI kanggo nggawe pod, sing banjur nelpon plugin CNI kanggo ngatur jaringan pod. Kanthi mengkono, plugin CNI panyedhiya jaringan nelpon plugin CNI inti liyane kanggo ngatur macem-macem aspek jaringan.

Interaksi antarane plugin CNI

Ana macem-macem plugin CNI sing tugase kanggo nyiyapake komunikasi jaringan ing antarane wadah ing host. Artikel iki bakal ngrembug bab telu.

Plugin CNI Flanel

Nalika nggunakake Flanel minangka panyedhiya jaringan, komponèn Containerd CRI nelpon Plugin CNI Flanelnggunakake file konfigurasi CNI /etc/cni/net.d/10-flannel.conflist.

$ cat /etc/cni/net.d/10-flannel.conflist
{
  "name": "cni0",
  "plugins": [
    {
      "type": "flannel",
      "delegate": {
         "ipMasq": false,
        "hairpinMode": true,
        "isDefaultGateway": true
      }
    }
  ]
}

Plugin Flannel CNI dianggo bebarengan karo Flanneld. Sajrone wiwitan, Flanneld njupuk podCIDR lan rincian liyane sing gegandhengan karo jaringan saka server API lan disimpen menyang file /run/flannel/subnet.env.

FLANNEL_NETWORK=10.244.0.0/16 
FLANNEL_SUBNET=10.244.0.1/24
FLANNEL_MTU=1450 
FLANNEL_IPMASQ=false

Plugin Flannel CNI nggunakake data saka /run/flannel/subnet.env kanggo ngatur lan nelpon CNI bridge plugin.

Jembatan plugin CNI

Plugin iki diarani kanthi konfigurasi ing ngisor iki:

{
  "name": "cni0",
  "type": "bridge",
  "mtu": 1450,
  "ipMasq": false,
  "isGateway": true,
  "ipam": {
    "type": "host-local",
    "subnet": "10.244.0.0/24"
  }
}

Nalika disebut pisanan, nggawe kreteg Linux karo Β«nameΒ»: Β«cni0Β», sing dituduhake ing konfigurasi. Banjur pasangan veth digawe kanggo saben pod. Siji mburi disambungake menyang ruang jeneng jaringan wadhah, sing liyane kalebu ing jembatan Linux ing jaringan inang. Jembatan plugin CNI nyambungake kabeh wadhah host menyang jembatan Linux ing jaringan host.

Sawise rampung nyetel pasangan veth, plugin Bridge nelpon plugin IPAM CNI host-lokal. Jinis plugin IPAM bisa dikonfigurasi ing konfigurasi CNI sing digunakake dening plugin CRI kanggo nelpon plugin Flannel CNI.

Plugin IPAM CNI Host-lokal

Bridge CNI telpon host-lokal IPAM plugin CNI kanthi konfigurasi ing ngisor iki:

{
  "name": "cni0",
  "ipam": {
    "type": "host-local",
    "subnet": "10.244.0.0/24",
    "dataDir": "/var/lib/cni/networks"
  }
}

Plugin IPAM Host-lokal (IP Adandanan Management - manajemen alamat IP) ngasilake alamat IP kanggo wadhah saka subnet lan nyimpen IP sing diparengake ing host ing direktori sing ditemtokake ing bagean kasebut dataDir - /var/lib/cni/networks/<network-name=cni0>/<ip>. Berkas iki ngemot ID wadhah kanggo alamat IP iki.

Nalika nelpon plugin IPAM host-lokal, bakal ngasilake data ing ngisor iki:

{
  "ip4": {
    "ip": "10.244.4.2",
    "gateway": "10.244.4.3"
  },
  "dns": {}
}

Ringkesan

Kube-controller-manager nemtokake podCIDR kanggo saben simpul. Saben polong simpul nampa alamat IP saka papan alamat ing kisaran podCIDR sing diparengake. Wiwit podCIDR saka node ora tumpang tindih, kabeh pods nampa alamat IP unik.

Administrator kluster Kubernetes ngatur lan nginstal kubelet, runtime wadah, agen panyedhiya jaringan, lan nyalin plugin CNI menyang saben simpul. Sajrone wiwitan, agen panyedhiya jaringan ngasilake konfigurasi CNI. Nalika pod dijadwalake menyang simpul, kubelet nelpon plugin CRI kanggo nggawe. Sabanjure, yen containerd digunakake, plugin Containerd CRI nelpon plugin CNI sing ditemtokake ing konfigurasi CNI kanggo ngatur jaringan pod. AkibatΓ©, pod nampa alamat IP.

Aku butuh sawetara wektu kanggo ngerti kabeh subtleties lan nuansa kabeh interaksi iki. Muga-muga pengalaman iki bisa mbantu sampeyan luwih ngerti cara kerja Kubernetes. Yen aku salah babagan apa wae, hubungi kula ing Twitter utawa ing alamat [email dilindhungi]. Aja bebas hubungi yen sampeyan pengin ngrembug babagan babagan artikel iki utawa liya-liyane. Aku seneng ngobrol karo sampeyan!

referensi

Wadhah lan jaringan

Kepiye cara kerja Flanel?

CRI lan CNI

PS saka penerjemah

Waca uga ing blog kita:

Source: www.habr.com

Add a comment