Nota. transl.: Dan l-artikolu, miktub minn inġinier SRE minn LinkedIn, jidħol fid-dettall dwar il-maġija ta 'ġewwa f'Kubernetes - aktar preċiżament, l-interazzjoni ta' CRI, CNI u kube-apiserver - li jiġri meta l-pod li jmiss jeħtieġ li jiġi assenjat indirizz IP.
Wieħed mir-rekwiżiti bażiċi Mudell tan-netwerk Kubernetes hija li kull pod għandu jkollu l-indirizz IP tiegħu stess u kwalunkwe pod ieħor fil-cluster għandu jkun jista 'jikkuntattjah f'dak l-indirizz. Hemm ħafna "fornituri" tan-netwerk (Flannel, Calico, Canal, eċċ.) Li jgħinu biex jimplimentaw dan il-mudell tan-netwerk.
Meta bdejt naħdem għall-ewwel darba ma' Kubernetes, ma kienx għal kollox ċar għalija kif eżattament il-miżwed jiksbu l-indirizzi IP tagħhom. Anke b'fehim ta 'kif jiffunzjonaw il-komponenti individwali, kien diffiċli li wieħed jimmaġinahom jaħdmu flimkien. Pereżempju, kont naf għalxiex kienu l-plugins tas-CNI, iżda ma kelli l-ebda idea kif kienu jissejħu eżattament. Għalhekk, iddeċidejt li nikteb dan l-artikolu biex naqsam l-għarfien dwar id-diversi komponenti tan-netwerk u kif jaħdmu flimkien fi cluster Kubernetes, li jippermetti li kull pod jikseb l-indirizz IP uniku tiegħu stess.
Hemm modi differenti kif torganizza n-netwerking f'Kubernetes, bħalma hemm għażliet ta 'runtime differenti għall-kontenituri. Din il-pubblikazzjoni se tuża Flannel biex torganizza netwerk fi cluster, u bħala ambjent eżekutibbli - Containerd. Qed nagħmel ukoll is-suppożizzjoni li taf kif taħdem in-netwerking bejn il-kontenituri, għalhekk ser tmissha fil-qosor, biss għall-kuntest.
Xi kunċetti bażiċi
Kontenituri u n-Netwerk: Ħarsa Ġenerali Qasira
Hemm ħafna pubblikazzjonijiet eċċellenti fuq l-Internet li jispjegaw kif il-kontenituri jikkomunikaw bejniethom fuq in-netwerk. Għalhekk, se nagħti biss ħarsa ġenerali ġenerali tal-kunċetti bażiċi u nillimita ruħi għal approċċ wieħed, li jinvolvi l-ħolqien ta 'pont Linux u l-inkapsulament ta' pakketti. Id-dettalji jitħallew barra, peress li s-suġġett tan-netwerking tal-kontejners innifsu jistħoqqlu artiklu separat. Links għal xi pubblikazzjonijiet partikolarment insightful u edukattivi se jiġu pprovduti hawn taħt.
Kontenituri fuq ospitanti wieħed
Mod wieħed biex torganizza l-komunikazzjoni permezz ta 'indirizzi IP bejn kontenituri li jaħdmu fuq l-istess host jinvolvi l-ħolqien ta' pont Linux. Għal dan il-għan, jinħolqu apparati virtwali f'Kubernetes (u Docker) veth (ethernet virtwali). Tarf wieħed tal-mezz veth jgħaqqad mal-ispazju tal-isem tan-netwerk tal-kontenitur, l-ieħor biex Linux pont fuq in-netwerk ospitanti.
Il-kontenituri kollha fuq l-istess ospitanti għandhom tarf wieħed tal-veth konness ma 'pont li permezz tiegħu jistgħu jikkomunikaw ma' xulxin permezz ta 'indirizzi IP. Il-pont Linux għandu wkoll indirizz IP u jaġixxi bħala portal għat-traffiku tal-ħruġ mill-imżiewed destinati għal nodi oħra.
Kontenituri fuq hosts differenti
L-inkapsulament tal-pakketti huwa metodu wieħed li jippermetti li kontenituri fuq nodi differenti jikkomunikaw ma 'xulxin bl-użu ta' indirizzi IP. Fil-Flannel, it-teknoloġija hija responsabbli għal din l-opportunità. vxlan, li "jippakkja" il-pakkett oriġinali f'pakkett UDP u mbagħad jibgħatu fid-destinazzjoni tiegħu.
Fi cluster Kubernetes, Flannel joħloq apparat vxlan u jaġġorna t-tabella tar-rotta fuq kull node kif xieraq. Kull pakkett iddestinat għal kontenitur fuq host differenti jgħaddi mill-apparat vxlan u huwa inkapsulat f'pakkett UDP. Fid-destinazzjoni, il-pakkett nested jiġi estratt u mibgħut lill-pod mixtieqa.
Nota: Dan huwa biss mod wieħed biex tiġi organizzata l-komunikazzjoni tan-netwerk bejn il-kontenituri.
X'inhu CRI?
CRI (Container Runtime Interface) huwa plugin li jippermetti lil kubelet juża ambjenti ta' runtime ta' kontejners differenti. L-API CRI hija mibnija f'diversi runtimes, sabiex l-utenti jkunu jistgħu jagħżlu l-runtime tal-għażla tagħhom.
X'inhu CNI?
Proġett CNI huwa a speċifikazzjoni biex torganizza soluzzjoni tan-netwerk universali għall-kontenituri Linux. Barra minn hekk, jinkludi plugins, responsabbli għal diversi funzjonijiet meta twaqqaf netwerk pod. Il-plugin CNI huwa fajl eżekutibbli li jikkonforma mal-ispeċifikazzjoni (se niddiskutu xi plugins hawn taħt).
Allokazzjoni ta' subnets għal nodi għall-assenjazzjoni ta' indirizzi IP għall-imżiewed
Peress li kull pod fi cluster għandu jkollu indirizz IP, huwa importanti li jiġi żgurat li dan l-indirizz ikun uniku. Dan jinkiseb billi kull nodu jiġi assenjat subnet uniku, li minnu l-imżiewed fuq dak in-nodu mbagħad jiġu assenjati indirizzi IP.
Node IPAM Kontrollur
Meta nodeipam mgħoddi bħala parametru tal-bandiera --controllerskube-kontrollur-manager, jalloka subnet separata (podCIDR) għal kull nodu mill-cluster CIDR (jiġifieri, il-firxa ta 'indirizzi IP għan-netwerk cluster). Peress li dawn il-podCIDRs ma jikkoinċidux, isir possibbli li kull pod jiġi allokat indirizz IP uniku.
Nodu Kubernetes jiġi assenjat podCIDR meta jkun inizjalment irreġistrat mal-cluster. Biex tibdel il-podCIDR tan-nodi, trid tneħħihom mir-reġistrazzjoni u mbagħad terġa' tirreġistrahom, billi tagħmel bidliet xierqa fil-konfigurazzjoni tas-saff ta' kontroll Kubernetes bejniethom. Tista' turi l-podCIDR ta' nodu billi tuża l-kmand li ġej:
$ kubectl get no <nodeName> -o json | jq '.spec.podCIDR'
10.244.0.0/24
Kubelet, container runtime u plugins CNI: kif jaħdem kollox
L-iskedar ta' pod għal kull nodu jinvolvi ħafna passi preparatorji. F'din it-taqsima, ser niffoka biss fuq dawk li huma direttament relatati mat-twaqqif ta' netwerk tal-pods.
L-iskedar ta' pod għal ċertu nodu jqajjem il-katina ta' avvenimenti li ġejja:
Interazzjoni bejn il-kontejner runtime u plugins CNI
Kull fornitur tan-netwerk għandu l-plugin CNI tiegħu stess. Ir-runtime tal-kontenitur imexxiha biex tikkonfigura n-netwerk għall-pod kif jibda. Fil-każ ta' containerd, il-plugin CNI jitnieda mill-plugin Containerd CRI.
Barra minn hekk, kull fornitur għandu l-aġent tiegħu stess. Huwa installat fuq in-nodi kollha tal-Kubernetes u huwa responsabbli għall-konfigurazzjoni tan-netwerk tal-imżiewed. Dan l-aġent jew huwa inkluż mal-konfigurazzjoni CNI jew b'mod indipendenti joħloqha fuq in-node. Il-konfigurazzjoni tgħin lill-plugin CRI jistabbilixxi liema plugin CNI se jsejjaħ.
Il-post tal-konfigurazzjoni CNI jista 'jiġi personalizzat; awtomatikament huwa fi /etc/cni/net.d/<config-file>. L-amministraturi tal-cluster huma wkoll responsabbli biex jinstallaw plugins CNI fuq kull node tal-cluster. Il-post tagħhom huwa wkoll customizable; direttorju default - /opt/cni/bin.
Meta tuża containerd, il-mogħdijiet għall-konfigurazzjoni tal-plugin u l-binarji jistgħu jiġu stabbiliti fit-taqsima [plugins.«io.containerd.grpc.v1.cri».cni] в fajl tal-konfigurazzjoni containerd.
Peress li qed nużaw Flannel bħala l-fornitur tan-netwerk tagħna, ejja nitkellmu ftit dwar it-twaqqif tiegħu:
Flanneld (id-daemon ta' Flannel) huwa normalment installat f'grupp bħala DaemonSet b' install-cni kif kontenitur init.
Flanneld joħloq apparat vxlan, jirkupra l-metadejta tan-netwerk mis-server tal-API, u jimmonitorja l-aġġornamenti tal-pods. Hekk kif jinħolqu, iqassam ir-rotot lill-imżiewed kollha madwar il-cluster.
Dawn ir-rotot jippermettu lill-imżiewed jikkomunikaw ma 'xulxin permezz ta' indirizzi IP.
Għal informazzjoni aktar dettaljata dwar ix-xogħol ta 'Flannel, nirrakkomanda li tuża l-links fl-aħħar tal-artiklu.
Hawnhekk hawn dijagramma tal-interazzjoni bejn il-plugin CRI Containerd u l-plugins CNI:
Kif tistgħu taraw hawn fuq, il-kubelet isejjaħ il-plugin Containerd CRI biex joħloq il-pod, li mbagħad isejjaħ il-plugin CNI biex jikkonfigura n-netwerk tal-pod. Meta tagħmel dan, il-plugin CNI tal-fornitur tan-netwerk isejjaħ plugins CNI ewlenin oħra biex jikkonfigura diversi aspetti tan-netwerk.
Interazzjoni bejn plugins CNI
Hemm diversi plugins tas-CNI li xogħolhom huwa li jgħinu biex jistabbilixxu komunikazzjoni tan-netwerk bejn il-kontenituri fuq il-host. Dan l-artikolu ser jiddiskuti tlieta minnhom.
CNI plugin Flannel
Meta tuża Flannel bħala fornitur tan-netwerk, il-komponent Containerd CRI jitlob CNI plugin Flannelbl-użu tal-fajl tal-konfigurazzjoni CNI /etc/cni/net.d/10-flannel.conflist.
Il-plugin Flannel CNI jaħdem flimkien ma' Flanneld. Waqt l-istartjar, Flanneld jirkupra podCIDR u dettalji oħra relatati man-netwerk mis-server tal-API u jsalvahom f'fajl /run/flannel/subnet.env.
Meta tissejjaħ għall-ewwel darba, toħloq pont Linux ma ' «name»: «cni0», li huwa indikat fil-konfigurazzjoni. Imbagħad par veth jinħoloq għal kull pod. Tarf wieħed huwa konness mal-ispazju tal-isem tan-netwerk tal-kontenitur, l-ieħor huwa inkluż fil-pont Linux fuq in-netwerk ospitanti. CNI plugin Bridge jgħaqqad il-kontenituri ospitanti kollha ma' pont Linux fuq in-netwerk ospitanti.
Wara li spiċċaw waqqaf il-par veth, il-plugin Bridge isejjaħ il-plugin CNI IPAM ospitanti lokali. It-tip ta 'plugin IPAM jista' jiġi kkonfigurat fil-konfigurazzjoni CNI li l-plugin CRI juża biex isejjaħ il-plugin CNI Flannel.
Plugin IPAM lokali ospitanti (IPAddress Mġestjoni - ġestjoni tal-indirizz IP) jirritorna l-indirizz IP għall-kontenitur mis-subnet u jaħżen l-IP allokat fuq il-host fid-direttorju speċifikat fit-taqsima dataDir - /var/lib/cni/networks/<network-name=cni0>/<ip>. Dan il-fajl fih l-ID tal-kontenitur li għalih huwa assenjat dan l-indirizz IP.
Meta ssejjaħ il-plugin IPAM tal-host lokali, jirritorna d-dejta li ġejja:
Kube-controller-manager jassenja podCIDR lil kull nodu. L-imżiewed ta’ kull node jirċievu indirizzi IP mill-ispazju tal-indirizzi fil-medda tal-podCIDR allokata. Peress li l-podCIDRs tan-nodi ma jikkoinċidux, il-miżwed kollha jirċievu indirizzi IP uniċi.
L-amministratur tal-cluster Kubernetes jikkonfigura u jinstalla l-kubelet, ir-runtime tal-kontenitur, l-aġent tal-fornitur tan-netwerk, u jikkopja l-plugins CNI għal kull node. Waqt l-istartjar, l-aġent tal-fornitur tan-netwerk jiġġenera konfigurazzjoni CNI. Meta pod ikun skedat għal nodu, il-kubelet isejjaħ il-plugin CRI biex joħloqha. Sussegwentement, jekk jintuża containerd, il-plugin CRI Containerd isejjaħ il-plugin CNI speċifikat fil-konfigurazzjoni CNI biex jiġi kkonfigurat in-netwerk tal-pod. Bħala riżultat, il-pod jirċievi indirizz IP.
Domni xi żmien biex nifhem l-irqaq u l-isfumaturi kollha ta 'dawn l-interazzjonijiet kollha. Nittama li din l-esperjenza tgħinek tifhem aħjar kif jaħdem Kubernetes. Jekk jien żbaljat dwar xi ħaġa, jekk jogħġbok ikkuntattja lili fuq twitter jew fl-indirizz [protett bl-email]. Ħossok liberu li tilħaq jekk tixtieq tiddiskuti aspetti ta 'dan l-artikolu jew xi ħaġa oħra. Nixtieq nitkellem miegħek!