ShĂ«n. pĂ«rkth.: ky kjo artikull, e shkruar nga njĂ« inxhinier SRE nga LinkedIn, pĂ«rshkruan me detaje atĂ« 'magjinĂ« e brendshme' nĂ« Kubernetes â mĂ« saktĂ«sisht, ndĂ«rveprimin midis CRI, CNI dhe kube-apiserver, â qĂ« ndodh kur njĂ« pod kĂ«rkon tĂ« caktohet njĂ« adresĂ« IP.
Një nga kërkesat themelore është që çdo pod të ketë adresën e vet IP dhe çdo pod tjetër në klaster duhet të jetë në gjendje të bëjë lidhje me të përmes kësaj adrese. Ka shumë 'ofrues rrjeti' (Flannel, Calico, Canal, etj.) që ndihmojnë në implementimin e këtij modeli rrjeti.
Kur fillova të punoja me Kubernetes, nuk ishte krejtësisht e qartë se si podët merrnin adresat e tyre IP. Edhe me kuptimin se si funksionojnë komponentët e veçantë, ishte e vështirë të imagjinojë punën e tyre të përbashkët. Për shembull, dija se për çfarë shërbenin pluginet CNI, por nuk e kisha idenë se si thirreshin ato. Prandaj vendosa të shkruaj këtë artikull për të ndarë njohuritë mbi komponentët e ndryshëm rrjetorë dhe bashkëpunimin e tyre në klasterin Kubernetes, të cilat i lejojnë çdo pod të marrë një adresë IP unike.
EkzistojnĂ« mĂ«nyra tĂ« ndryshme pĂ«r tĂ« organizuar ndĂ«rveprimin rrjetor nĂ« Kubernetes â nĂ« mĂ«nyrĂ« tĂ« ngjashme me opsionet e ndryshme tĂ« mjediseve tĂ« ekzekutimit (runtime) pĂ«r kontejnerĂ«t. NĂ« kĂ«tĂ« publikim do tĂ« pĂ«rdoret pĂ«r tĂ« organizuar rrjetin nĂ« klaster, dhe si mjedis ekzekutimi â . Gjithashtu, po e marr si tĂ« dhĂ«nĂ« se e dini se si funksionon ndĂ«rveprimi rrjetor midis kontejnerĂ«ve, prandaj do tĂ« pĂ«rmend vetĂ«m shkurtimisht kĂ«tĂ« pĂ«r kontekst.
Disa koncepte themelore
Kontejnerët dhe rrjeti: një përmbledhje e shkurtër
Në internet ka shumë publikime të shkëlqyera, që shpjegojnë se si kontejnerët lidhen me njëri-tjetrin përmes rrjetit. Prandaj do të bëj vetëm një përmbledhje të përgjithshme të koncepteve themelore dhe do të kufizohem në një qasje që përfshin krijimin e një ure Linux dhe inkapsulimin e paketave. Detajet do të shpërfilen, pasi vetë tema e ndërveprimit të kontejnerëve meriton një artikull të veçantë. Do të jap lidhje për disa publikime të veçanta dhe të informuese më poshtë.
Kontejnerët në një host
NjĂ« nga mĂ«nyrat pĂ«r tĂ« organizuar lidhjet pĂ«rmes adreseve IP midis konteinerĂ«ve qĂ« punojnĂ« nĂ« tĂ« njĂ«jtin host, pĂ«rfshin krijimin e njĂ« ure Linux. PĂ«r kĂ«tĂ«, nĂ« Kubernetes (dhe Docker) krijohen pajisje virtuale . NjĂ«ra skaj e pajisjes veth i Ă«shtĂ« lidhur hapĂ«sirĂ«s neto tĂ« konteinerit, tjetra â nĂ« rrjetin e hostit.
TĂ« gjithĂ« konteinerĂ«t nĂ« njĂ« host kanĂ« njĂ« skaj veth tĂ« lidhur me urĂ«n, pĂ«rmes sĂ« cilĂ«s ata mund tĂ« komunikojnĂ« me njĂ«ri-tjetrin pĂ«rmes adresave IP. Ura Linux gjithashtu ka njĂ« adresĂ« IP, dhe ajo shĂ«rben si njĂ« kalim pĂ«r trafikun e dalĂ«s (egress) nga podâĂ«t, qĂ« Ă«shtĂ« i destinuar pĂ«r nodet e tjera.

Konteinerët në node të ndryshme
Inkasulimi i paketeve është një nga mënyrat që lejon konteinerët në node të ndryshme të komunikojnë me njëri-tjetrin përmes adresave IP. Në Flannel, kjo mundësi i atribuohet teknologjisë , e cila "paketon" paketën origjinale në një paketë UDP dhe pastaj e dërgon atë në destinacion.
NĂ« klasterin Kubernetes, Flannel krijon njĂ« pajisje vxlan dhe nĂ« pĂ«rputhje e ndihmon tabelĂ«n e rrugĂ«ve nĂ« secilĂ«n nga nodet. Ădo paketĂ« e destinuar pĂ«r njĂ« konteiner nĂ« njĂ« host tjetĂ«r kalon pĂ«rmes pajisjes vxlan dhe inkasulohet nĂ« njĂ« paketĂ« UDP. NĂ« destinacion, paketa e futur nxirret dhe dĂ«rgohet nĂ« pod-in e nevojshĂ«m.

Shënim: Kjo është vetëm një nga mënyrat për të organizuar ndërveprimin rrjetor midis konteinerëve.
ĂfarĂ« Ă«shtĂ« CRI?
â Ă«shtĂ« njĂ« plugin qĂ« lejon kubelet-in tĂ« pĂ«rdorĂ« ambiente tĂ« ndryshme ekzekutimi konteinerĂ«sh. API CRI Ă«shtĂ« integruar nĂ« ambiente tĂ« ndryshme ekzekutimi, kĂ«shtu qĂ« pĂ«rdoruesit mund tĂ« zgjedhin runtime sipas dĂ«shirĂ«s.
ĂfarĂ« Ă«shtĂ« CNI?
pĂ«rfaqĂ«son pĂ«r organizimin e njĂ« zgjidhjeje universale rrjetore pĂ«r konteinerĂ«t Linux. PĂ«r mĂ« tepĂ«r, ai pĂ«rfshin , qĂ« janĂ« pĂ«rgjegjĂ«s pĂ«r funksione tĂ« ndryshme gjatĂ« konfigurimit tĂ« rrjetit tĂ« podâit. Plugin CNI Ă«shtĂ« njĂ« skedar ekzekutues, nĂ« pĂ«rputhje me specifikimin (disa plugin ato do t'i diskutojmĂ« mĂ« poshtĂ«).
Caktimi i nĂ«nrrjeteve nĂ« nodet pĂ«r tĂ« caktuar adresat IP tĂ« podâave
PĂ«r shkak se çdo pod nĂ« klaster duhet tĂ« ketĂ« njĂ« adresĂ« IP, Ă«shtĂ« e rĂ«ndĂ«sishme tĂ« sigurohet qĂ« kjo adresĂ« tĂ« jetĂ« unike. Kjo arrihet duke i caktuar çdo nodi njĂ« nĂ«nrrjetĂ« unike, nga e cila pastaj adresat IP tĂ« caktuar nĂ« kĂ«tĂ« nod i atribuohen podâave.
Kontrolluesi IPAM i nodit
Kur nodeipam i kalon si njĂ« parametĂ«r tĂ« flagut --controllers , ai jep njĂ« subnet tĂ« veçantĂ« (podCIDR) çdo nyjeje (t.e.a. gamĂ«s sĂ« IP-adresave pĂ«r rrjetin e klasĂ«s). Duke qenĂ« se kĂ«to podCIDR nuk ndĂ«rhyjnĂ«, çdo podâi mund t'i jepet njĂ« adresĂ« IP unike.
Një nyje Kubernetes i jepet podCIDR në momentin e regjistrimit të saj fillestar në klasë. Për të ndryshuar podCIDR në nyje, është e nevojshme të hiqen nga regjistri dhe pastaj të regjistrohen përsëri, ndërsa ndryshimet përkatëse në konfigurimin e shtresës menaxhuese të Kubernetes duhet të bëhen. PodCIDR e një nyjeje mund të nxirret me komandën e mëposhtme:
$ kubectl get no -o json | jq '.spec.podCIDR'
10.244.0.0/24
Kubelet, ambienti i ekzekutimit të konteinerëve dhe plaginjtë CNI: si funksionon gjithçka kjo
Planifikimi i njĂ« podâi nĂ« njĂ« nyje lidhet me realizimin e njĂ« sĂ«rĂ« veprimesh pĂ«rgatitore. NĂ« kĂ«tĂ« seksion do tĂ« fokusohem vetĂ«m nĂ« ato qĂ« lidhen direkt me konfigurimin e rrjetit tĂ« podâit.
Planifikimi i njĂ« podâi nĂ« njĂ« nyje nxit njĂ« zinxhir ngjarjesh:

Konsultim: .
Ndërveprimi i ambientit të ekzekutimit të konteinerëve dhe plaginjtë CNI
Ădo ofrues rrjeti ka plaginjin e tij CNI. Runtime i konteinerit e nis atĂ« pĂ«r tĂ« konfiguruar rrjetin pĂ«r podâin gjatĂ« procesit tĂ« nisjes sĂ« tij. NĂ« rastin e containerd, nisja e plaginjtĂ« CNI bĂ«het nga plaginji .
NĂ« kĂ«tĂ« rast, çdo ofrues ka agentin e vet. Ai instalohet nĂ« tĂ« gjitha nyjet e Kubernetes dhe Ă«shtĂ« pĂ«rgjegjĂ«s pĂ«r konfigurimin e rrjetit pĂ«r podâĂ«t. Ky agent vjen ose me konfigurimin e CNI ose krijon atĂ« vetĂ« nĂ« nyje. Konfigurimi ndihmon plaginjin CRI tĂ« vendosĂ« se cili plagin CNI duhet thirrur.
Vendndodhja e konfigurimit CNI mund të konfigurohet; në mënyrë të parazgjedhur ndodhet në /etc/cni/net.d/<config-file>. Administratoret e klasës gjithashtu janë përgjegjës për instalimin e plaginjtë CNI në çdo nyje të klasës. Vendndodhja e tyre gjithashtu konfigurohet; direktoria e parazgjedhur është /opt/cni/bin.
Duke përdorur containerd, rrugët për konfigurim dhe binarët e plaginjtë mund të caktohen në seksionin [plugins."io.containerd.grpc.v1.cri".cni] në .
Duke qenë se përdorim Flannel si ofruesin e rrjetit, le të flasim pak rreth konfigurimit të tij:
- Flanneld (demon i Flannel) zakonisht instalohet në klasë si DaemonSet me
install-cnisi . Install-cnikrijon (/etc/cni/net.d/10-flannel.conflist) në secilën nyje.- Flanneld krijon një pajisje vxlan, nxjerr metadata rrjeti nga API-server dhe monitoron përditësimet e pod-ve. Ndërsa ato krijohen, ai shpërndan rrugët për të gjithë pod-et në të gjithë klasterin.
- Këto rrugë u japin mundësi pod-ve të lidhin njëri-tjetrin përmes adresave IP.
Për më shumë informacion mbi funksionimin e Flannel, rekomandoj të shfrytëzoni lidhjet në fund të artikullit.
Këtu është skema e bashkëveprimit midis plugin-it Containerd CRI dhe plugin-eve CNI:

Siç shihet më lart, kubelet thërret plugin-in Containerd CRI për të krijuar pod, ndërsa ai thërret plugin-in CNI për të konfiguruar rrjetin e pod-it. Në këtë proces, plugin-i CNI i ofruesit të rrjetit thërret plugin-e të tjera bazë CNI për të konfiguruar aspekte të ndryshme të rrjetit.
Bashkëveprimi midis plugin-eve CNI
Ekzistojnë plugin-e të ndryshme CNI, detyra e të cilave është të ndihmojnë në konfigurimin e bashkëveprimit rrjetësor midis konteinerëve në host. Ky artikull do të fokusohet në tre prej tyre.
Plugin-i CNI Flannel
Kur përdoret Flannel si ofrues rrjeti, komponenti Containerd CRI thërret , duke përdorur skedarin përkatës të konfigurimit 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-i CNI Flannel punon në bashkëpunim me Flanneld. Gjatë nisjes, Flanneld nxjerr podCIDR dhe detaje të tjera të lidhura me rrjetin nga API-server dhe i ruan ato në një skedar /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-i CNI Flannel përdor të dhënat nga /run/flannel/subnet.env për të konfiguruar dhe thirrur plugin-in CNI të urës (bridge).
Plugin-i CNI Bridge
Ky plugin thirret me konfigurimin e mëposhtëm:
{
"name": "cni0",
"type": "bridge",
"mtu": 1450,
"ipMasq": false,
"isGateway": true,
"ipam": {
"type": "host-local",
"subnet": "10.244.0.0/24"
}
}
Në thirrjen e parë, ai krijon një urë Linux me "name": "cni0", e cila është e specifikuar në konfigurim. Pastaj, për çdo pod krijohet një çift veth. Njëra skaj lidhet me hapësirën e emrave të kontenierit, ndërsa tjetra futet në urën Linux në rrjetin e hostit. lidhen të gjithë kontenierët e hostit me urën Linux në rrjetin e hostit.
Pasi të përfundoj me konfigurimin e çiftit veth, plugin-i Bridge thërret plugin-in IPAM lokal për hostin (host-local) CNI. Lloji i plugin-it IPAM mund të konfigurohet në konfigurimin CNI, të cilin plugin-i CRI përdor për të thirrur plugin-in CNI Flannel.
Plugin-et lokale për hostin IPAM CNI
Bridge CNI thërret me konfigurimin e mëposhtëm:
{
"name": "cni0",
"ipam": {
"type": "host-local",
"subnet": "10.244.0.0/24",
"dataDir": "/var/lib/cni/networks"
}
}
Plugins IPAM host-local (IP Aadresa Mmenaxhim â menaxhimi i IP-adresave) kthen IP-adresĂ«n pĂ«r kontejnerin nga subneti dhe ruan IP-nĂ« e caktuar nĂ« host nĂ« drejtorinĂ« e caktuar nĂ« seksionin dataDir â /var/lib/cni/networks/<network-name=cni0>/<ip>. Ky skedar pĂ«rmban ID-nĂ« e kontejnerit tĂ« cilit i Ă«shtĂ« caktuar kjo IP-adresĂ«.
Kur thirret plugin-i IPAM host-local, ai kthen të dhënat e mëposhtme:
{
"ip4": {
"ip": "10.244.4.2",
"gateway": "10.244.4.3"
},
"dns": {}
}
CV
Kube-controller-manager-i i cakton çdo nodi podCIDR. Pod-et e çdo nodi marrin IP-adresa nga hapësira e adresave në intervalin e caktuar podCIDR. Duke qenë se podCIDR-të e nodeve nuk mbivendosen, të gjitha pod-et marrin IP-adresa unike.
Administratori i klasterit Kubernetes konfiguroni dhe instaloni kubelet, ambientin e ekzekutimit të kontejnerëve, agjentin e ofruesit të rrjetit dhe kopjon plugin-e CNI në çdo nod. Gjatë nisjes, agjenti i ofruesit të rrjetit gjeneron konfigurimin e CNI. Kur një pod planifikohet në një nod, kubelet thërret plugin-in CRI për ta krijuar atë. Pastaj, nëse përdoret containerd, plugin-i i Containerd CRI thërret plugin-in CNI, i caktuar në konfigurimin e CNI, për të konfiguruar rrjetin e pod-it. Si rezultat, pod-i merr IP-adresën.
Më mori pak kohë për të kuptuar të gjitha nuancat dhe detajet e këtyre ndërveprimeve. Shpresoj që përvoja e fituar t'ju ndihmojë edhe juve të kuptoni më mirë si funksionon Kubernetes. Nëse kam gabuar në ndonjë gjë, ju lutem kontaktoni me mua në ose në adresën . Mos hezitoni të kontaktoni, nëse doni të diskutoni aspekte të këtij artikulli ose ndonjë gjë tjetër. Do të jem i lumtur të bisedoj me ju!
Linket
Kontejnerët dhe rrjeti
Si funksionon Flannel
CRI dhe CNI
P.S. nga përkthyesi
Lexoni gjithashtu në blogun tonë:
- «»;
- âUdhĂ«zuesi i Ilustruar pĂ«r StrukturĂ«n e Rrjeteve nĂ« Kubernetesâ: , ;
- «».
Burimi: habr.com
