Kif Kubernetes pod jikseb indirizz IP?

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.

Kif Kubernetes pod jikseb indirizz IP?

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.

Kif Kubernetes pod jikseb indirizz IP?
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 --controllers kube-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:

Kif Kubernetes pod jikseb indirizz IP?

FAQ: Arkitettura tal-plugins Containerd CRI.

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.
  • Install-cni toħloq Fajl tal-konfigurazzjoni tas-CNI (/etc/cni/net.d/10-flannel.conflist) fuq kull nodu.
  • 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 Kubernetes pod jikseb indirizz IP?

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.

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

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.

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

Il-plugin Flannel CNI juża data minn /run/flannel/subnet.env biex tikkonfigura u ċempel il-plugin tal-pont CNI.

CNI plugin Bridge

Dan il-plugin jissejjaħ bil-konfigurazzjoni li ġejja:

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

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.

Plugins CNI tal-IPAM ospitanti lokali

Bridge sejħiet CNI host-lokali IPAM plugin CNI bil-konfigurazzjoni li ġejja:

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

Plugin IPAM lokali ospitanti (IP Address 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:

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

Sommarju

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!

referenzi

Kontenituri u netwerk

Kif jaħdem Flannel?

CRI u CNI

PS minn traduttur

Aqra wkoll fuq il-blog tagħna:

Sors: www.habr.com

Żid kumment