Sut mae pod Kubernetes yn cael cyfeiriad IP?

Nodyn. traws.: Mae'r erthygl hon, a ysgrifennwyd gan beiriannydd SRE o LinkedIn, yn manylu ar yr hud mewnol yn Kubernetes - yn fwy manwl gywir, rhyngweithio CRI, CNI a kube-apiserver - mae hynny'n digwydd pan fydd angen rhoi cyfeiriad IP i'r pod nesaf.

Un o'r gofynion sylfaenol Model rhwydwaith Kubernetes yw bod yn rhaid i bob pod gael ei gyfeiriad IP ei hun a rhaid i unrhyw god arall yn y clwstwr allu cysylltu ag ef yn y cyfeiriad hwnnw. Mae yna lawer o “ddarparwyr” rhwydwaith (Wlanen, Calico, Canal, ac ati) sy'n helpu i weithredu'r model rhwydwaith hwn.

Pan ddechreuais weithio gyda Kubernetes gyntaf, nid oedd yn gwbl glir i mi sut yn union y mae codennau'n cael eu cyfeiriadau IP. Hyd yn oed gyda dealltwriaeth o sut roedd y cydrannau unigol yn gweithio, roedd yn anodd eu dychmygu'n gweithio gyda'i gilydd. Er enghraifft, roeddwn i'n gwybod beth oedd pwrpas ategion CNI, ond doedd gen i ddim syniad sut yn union y cawsant eu galw. Felly, penderfynais ysgrifennu'r erthygl hon i rannu gwybodaeth am y gwahanol gydrannau rhwydwaith a sut maent yn gweithio gyda'i gilydd mewn clwstwr Kubernetes, sy'n caniatáu i bob pod gael ei gyfeiriad IP unigryw ei hun.

Mae yna wahanol ffyrdd o drefnu rhwydweithio yn Kubernetes, yn union fel mae yna wahanol opsiynau amser rhedeg ar gyfer cynwysyddion. Bydd y cyhoeddiad hwn yn defnyddio Flannel i drefnu rhwydwaith mewn clwstwr, ac fel amgylchedd gweithredadwy - Cynhwysydd. Rwyf hefyd yn rhagdybio eich bod yn gwybod sut mae rhwydweithio rhwng cynwysyddion yn gweithio, felly byddaf yn cyffwrdd ag ef yn fyr, dim ond i gael cyd-destun.

Rhai cysyniadau sylfaenol

Cynhwyswyr a'r Rhwydwaith: Trosolwg Byr

Mae digon o gyhoeddiadau rhagorol ar y Rhyngrwyd sy'n esbonio sut mae cynwysyddion yn cyfathrebu â'i gilydd dros y rhwydwaith. Felly, dim ond trosolwg cyffredinol y byddaf yn ei roi o'r cysyniadau sylfaenol a chyfyngu fy hun i un dull gweithredu, sy'n golygu creu pont Linux ac amgáu pecynnau. Mae manylion wedi'u hepgor, gan fod pwnc rhwydweithio cynwysyddion ei hun yn haeddu erthygl ar wahân. Darperir dolenni i rai cyhoeddiadau hynod graff ac addysgol isod.

Cynhwysyddion ar un gwesteiwr

Un ffordd o drefnu cyfathrebu trwy gyfeiriadau IP rhwng cynwysyddion sy'n rhedeg ar yr un gwesteiwr yw creu pont Linux. At y diben hwn, crëir dyfeisiau rhithwir yn Kubernetes (a Docker) veth (rhith-ether-rwyd). Mae un pen y ddyfais feth yn cysylltu â gofod enw rhwydwaith y cynhwysydd, a'r pen arall i Pont Linux ar y rhwydwaith gwesteiwr.

Mae gan bob cynhwysydd ar yr un gwesteiwr un pen i'r feth wedi'i gysylltu â phont lle gallant gyfathrebu â'i gilydd trwy gyfeiriadau IP. Mae gan bont Linux hefyd gyfeiriad IP ac mae'n gweithredu fel porth ar gyfer traffig sy'n mynd allan o'r codennau sydd ar gyfer nodau eraill.

Sut mae pod Kubernetes yn cael cyfeiriad IP?

Cynwysyddion ar wahanol westeion

Mae amgáu pecynnau yn un dull sy'n caniatáu i gynwysyddion ar wahanol nodau gyfathrebu â'i gilydd gan ddefnyddio cyfeiriadau IP. Yn Wlanen, technoleg sy'n gyfrifol am y cyfle hwn. vxlan, sy'n “pecynnu” y pecyn gwreiddiol i mewn i becyn CDU ac yna'n ei anfon i'w gyrchfan.

Mewn clwstwr Kubernetes, mae Wlanen yn creu dyfais vxlan ac yn diweddaru'r tabl llwybr ar bob nod yn unol â hynny. Mae pob pecyn sydd i fod i gynhwysydd ar westeiwr gwahanol yn mynd trwy'r ddyfais vxlan ac wedi'i amgáu mewn pecyn CDU. Yn y gyrchfan, mae'r pecyn nythu yn cael ei dynnu a'i anfon ymlaen i'r pod a ddymunir.

Sut mae pod Kubernetes yn cael cyfeiriad IP?
Nodyn: Dim ond un ffordd yw hon i drefnu cyfathrebu rhwydwaith rhwng cynwysyddion.

Beth yw CRI?

CRI (Rhyngwyneb Amser Rhedeg Cynhwysydd) yn ategyn sy'n caniatáu kubelet i ddefnyddio gwahanol amgylcheddau Rhedeg cynhwysydd. Mae'r API CRI wedi'i ymgorffori mewn gwahanol amseroedd rhedeg, felly gall defnyddwyr ddewis yr amser rhedeg o'u dewis.

Beth yw CNI?

Prosiect CNI yw a manyleb i drefnu datrysiad rhwydwaith cyffredinol ar gyfer cynwysyddion Linux. Yn ogystal, mae'n cynnwys ategion, yn gyfrifol am swyddogaethau amrywiol wrth sefydlu rhwydwaith pod. Mae'r ategyn CNI yn ffeil gweithredadwy sy'n cydymffurfio â'r fanyleb (byddwn yn trafod rhai ategion isod).

Dyrannu is-rwydweithiau i nodau ar gyfer aseinio cyfeiriadau IP i godiau

Gan fod yn rhaid i bob pod mewn clwstwr fod â chyfeiriad IP, mae'n bwysig sicrhau bod y cyfeiriad hwn yn unigryw. Cyflawnir hyn trwy aseinio is-rwydwaith unigryw i bob nod, ac yna rhoddir cyfeiriadau IP i'r codennau ar y nod hwnnw.

Rheolydd IPAM Node

Pan fydd nodeipam pasio fel paramedr baner --controllers kube-rheolwr-rheolwr, mae'n dyrannu is-rwydwaith ar wahân (podCIDR) i bob nod o'r clwstwr CIDR (h.y., yr ystod o gyfeiriadau IP ar gyfer y rhwydwaith clwstwr). Gan nad yw'r podCIDRs hyn yn gorgyffwrdd, mae'n bosibl i bob pod gael cyfeiriad IP unigryw.

Rhoddir podCIDR i nod Kubernetes pan gaiff ei gofrestru i ddechrau gyda'r clwstwr. I newid podCIDR nodau, mae angen i chi eu dadgofrestru ac yna eu hailgofrestru, gan wneud newidiadau priodol i gyfluniad haen reoli Kubernetes rhyngddynt. Gallwch chi arddangos podCIDR nod gan ddefnyddio'r gorchymyn canlynol:

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

Kubelet, amser rhedeg cynhwysydd ac ategion CNI: sut mae'r cyfan yn gweithio

Mae amserlennu pod fesul nod yn golygu llawer o gamau paratoi. Yn yr adran hon, byddaf yn canolbwyntio'n unig ar y rhai sy'n uniongyrchol gysylltiedig â sefydlu rhwydwaith codennau.

Mae amserlennu pod i nod penodol yn sbarduno'r gadwyn ganlynol o ddigwyddiadau:

Sut mae pod Kubernetes yn cael cyfeiriad IP?

Cymorth: Pensaernïaeth ategion CRI Cynhwysydd.

Rhyngweithio rhwng amser rhedeg cynhwysydd ac ategion CNI

Mae gan bob darparwr rhwydwaith ei ategyn CNI ei hun. Mae amser rhedeg y cynhwysydd yn ei redeg i ffurfweddu'r rhwydwaith ar gyfer y pod wrth iddo gychwyn. Yn achos mewn cynhwysydd, mae'r ategyn CNI yn cael ei lansio gan yr ategyn Cynhwysydd CRI.

At hynny, mae gan bob darparwr ei asiant ei hun. Mae wedi'i osod ar bob nod Kubernetes ac mae'n gyfrifol am gyfluniad rhwydwaith codennau. Mae'r asiant hwn naill ai wedi'i gynnwys gyda chyfluniad CNI neu'n ei greu'n annibynnol ar y nod. Mae'r ffurfwedd yn helpu'r ategyn CRI i osod pa ategyn CNI i'w alw.

Gellir addasu lleoliad cyfluniad CNI; yn ddiofyn y mae i mewn /etc/cni/net.d/<config-file>. Mae gweinyddwyr clwstwr hefyd yn gyfrifol am osod ategion CNI ar bob nod clwstwr. Mae eu lleoliad hefyd yn addasadwy; cyfeiriadur rhagosodedig - /opt/cni/bin.

Wrth ddefnyddio containerd, gellir gosod y llwybrau ar gyfer y ffurfwedd ategyn a binaries yn yr adran [plugins.«io.containerd.grpc.v1.cri».cni] в ffeil ffurfweddu mewn cynhwysydd.

Gan ein bod yn defnyddio Flannel fel ein darparwr rhwydwaith, gadewch i ni siarad ychydig am ei sefydlu:

  • Fel arfer gosodir Flanneld (ellyll Wlanen) mewn clwstwr fel DaemonSet gyda install-cni fel cynhwysydd init.
  • Install-cni yn creu ffeil ffurfweddu CNI (/etc/cni/net.d/10-flannel.conflist) ar bob nôd.
  • Mae Flanneld yn creu dyfais vxlan, yn adfer metadata rhwydwaith o'r gweinydd API, ac yn monitro diweddariadau pod. Wrth iddynt gael eu creu, mae'n dosbarthu llwybrau i bob codennau ledled y clwstwr.
  • Mae'r llwybrau hyn yn galluogi codennau i gyfathrebu â'i gilydd trwy gyfeiriadau IP.

I gael gwybodaeth fanylach am waith Wlanen, rwy'n argymell defnyddio'r dolenni ar ddiwedd yr erthygl.

Dyma ddiagram o'r rhyngweithio rhwng yr ategyn CRI Containerd a'r ategion CNI:

Sut mae pod Kubernetes yn cael cyfeiriad IP?

Fel y gwelwch uchod, mae'r kubelet yn galw'r ategyn Containerd CRI i greu'r pod, sydd wedyn yn galw'r ategyn CNI i ffurfweddu rhwydwaith y pod. Wrth wneud hynny, mae ategyn CNI darparwr y rhwydwaith yn galw ategion CNI craidd eraill i ffurfweddu gwahanol agweddau ar y rhwydwaith.

Rhyngweithio rhwng ategion CNI

Mae yna amrywiol ategion CNI a'u gwaith yw helpu i sefydlu cyfathrebu rhwydwaith rhwng cynwysyddion ar y gwesteiwr. Bydd yr erthygl hon yn trafod tri ohonyn nhw.

Ategyn CNI Gwlanen

Wrth ddefnyddio Wlanen fel darparwr rhwydwaith, mae'r gydran Containerd CRI yn galw Ategyn CNI Gwlanengan ddefnyddio ffeil ffurfweddu 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
      }
    }
  ]
}

Mae ategyn Wlanen CNI yn gweithio ar y cyd â Flanneld. Yn ystod y cychwyn, mae Flanneld yn adfer podCIDR a manylion eraill sy'n gysylltiedig â rhwydwaith o'r gweinydd API ac yn eu cadw i ffeil /run/flannel/subnet.env.

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

Mae ategyn CNI Wlanen yn defnyddio data o /run/flannel/subnet.env i ffurfweddu a ffoniwch yr ategyn pont CNI.

Pont ategyn CNI

Gelwir yr ategyn hwn gyda'r ffurfweddiad canlynol:

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

Pan gaiff ei alw am y tro cyntaf, mae'n creu pont Linux gyda «name»: «cni0», a nodir yn y ffurfwedd. Yna crëir veth pair ar gyfer pob pod. Mae un pen ohono wedi'i gysylltu â gofod enw rhwydwaith y cynhwysydd, mae'r llall wedi'i gynnwys yn y bont Linux ar y rhwydwaith cynnal. Pont ategyn CNI yn cysylltu'r holl gynwysyddion gwesteiwr i bont Linux ar y rhwydwaith gwesteiwr.

Ar ôl gorffen sefydlu'r pâr veth, mae'r ategyn Bridge yn galw'r ategyn IPAM CNI gwesteiwr-lleol. Gellir ffurfweddu'r math ategyn IPAM yn y ffurfwedd CNI y mae'r ategyn CRI yn ei ddefnyddio i alw'r ategyn CNI Wlanen.

Ategion IPAM CNI gwesteiwr-lleol

Galwadau Bridge CNI host-local IPAM plugin CNI gyda'r ffurfweddiad canlynol:

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

Ategyn IPAM gwesteiwr-lleol (IP Address Management - rheoli cyfeiriad IP) yn dychwelyd cyfeiriad IP y cynhwysydd o'r is-rwydwaith ac yn storio'r IP a ddyrannwyd ar y gwesteiwr yn y cyfeiriadur a nodir yn yr adran dataDir - /var/lib/cni/networks/<network-name=cni0>/<ip>. Mae'r ffeil hon yn cynnwys ID y cynhwysydd y mae'r cyfeiriad IP hwn wedi'i neilltuo iddo.

Wrth ffonio'r ategyn IPAM gwesteiwr-lleol, mae'n dychwelyd y data canlynol:

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

Crynodeb

Mae Kube-controller-rheolwr yn aseinio podCIDR i bob nod. Mae codennau pob nod yn derbyn cyfeiriadau IP o'r gofod cyfeiriad yn yr ystod podCIDR a neilltuwyd. Gan nad yw podCIDRs y nodau yn gorgyffwrdd, mae pob cod yn derbyn cyfeiriadau IP unigryw.

Mae gweinyddwr clwstwr Kubernetes yn ffurfweddu ac yn gosod y kubelet, amser rhedeg y cynhwysydd, asiant darparwr rhwydwaith, ac yn copïo'r ategion CNI i bob nod. Yn ystod y cychwyn, mae'r asiant darparwr rhwydwaith yn cynhyrchu cyfluniad CNI. Pan fydd pod wedi'i amserlennu i nod, mae'r kubelet yn galw'r ategyn CRI i'w greu. Nesaf, os defnyddir cynhwysydd, mae'r ategyn Containerd CRI yn galw'r ategyn CNI a nodir yn y ffurfwedd CNI i ffurfweddu rhwydwaith y pod. O ganlyniad, mae'r pod yn derbyn cyfeiriad IP.

Cymerodd beth amser i mi ddeall holl gynildeb a naws yr holl ryngweithio hyn. Rwy'n gobeithio y bydd y profiad hwn yn eich helpu i ddeall yn well sut mae Kubernetes yn gweithio. Os ydw i'n anghywir am unrhyw beth, cysylltwch â mi yn Twitter neu yn y cyfeiriad [e-bost wedi'i warchod]. Mae croeso i chi estyn allan os hoffech drafod agweddau ar yr erthygl hon neu unrhyw beth arall. Byddwn i wrth fy modd yn sgwrsio gyda chi!

cyfeiriadau

Cynhwysyddion a rhwydwaith

Sut mae Wlanen yn gweithio?

CRI a CNI

PS gan y cyfieithydd

Darllenwch hefyd ar ein blog:

Ffynhonnell: hab.com

Ychwanegu sylw