Ciamar a gheibh pod Kubernetes seòladh IP?

Thoir an aire. eadar-theangachadh.: Tha an artaigil seo, air a sgrìobhadh le innleadair SRE bho LinkedIn, a’ dol a-steach gu mion-fhiosrachadh mun draoidheachd a-staigh ann an Kubernetes - nas mionaidiche, eadar-obrachadh CRI, CNI agus kube-apiserver - bidh sin a’ tachairt nuair a dh’ fheumar seòladh IP a thoirt don ath pod.

Aon de na riatanasan bunaiteach Modail lìonra Kubernetes is e sin gum feum a sheòladh IP fhèin a bhith aig gach pod agus gum feum pod sam bith eile sa bhuidheann a bhith comasach air fios a chur thuige aig an t-seòladh sin. Tha mòran “solaraichean” lìonra (Flannel, Calico, Canal, msaa) a chuidicheas le bhith a’ buileachadh a’ mhodail lìonra seo.

Nuair a thòisich mi ag obair le Kubernetes an toiseach, cha robh e gu tur soilleir dhomh ciamar a gheibh na pods na seòlaidhean IP aca. Eadhon le tuigse air mar a bha na co-phàirtean fa leth ag obair, bha e duilich smaoineachadh orra ag obair còmhla. Mar eisimpleir, bha fios agam carson a bha plugins CNI, ach cha robh fios agam dè dìreach a chaidh an ainmeachadh. Mar sin, chuir mi romham an artaigil seo a sgrìobhadh gus eòlas a cho-roinn mu na diofar phàirtean lìonra agus mar a bhios iad ag obair còmhla ann am buidheann Kubernetes, a leigeas le gach pod an seòladh IP sònraichte aige fhèin fhaighinn.

Tha diofar dhòighean ann air lìonrachadh a chuir air dòigh ann an Kubernetes, dìreach mar a tha diofar roghainnean ùine ruith airson soithichean. Cleachdaidh am foillseachadh seo Flannel gus lìonra a chuir air dòigh ann am brabhsair, agus mar àrainneachd so-ghnìomhaichte - Container. Tha mi cuideachd a’ gabhail ris gu bheil fios agad mar a tha lìonrachadh eadar soithichean ag obair, agus mar sin bruidhnidh mi air gu h-aithghearr, dìreach airson co-theacsa.

Cuid de bhun-bheachdan bunaiteach

Containers and the Network: Geàrr-chunntas

Tha gu leòr de fhoillseachaidhean sàr-mhath air an eadar-lìn a tha a’ mìneachadh mar a bhios soithichean a’ conaltradh ri chèile thairis air an lìonra. Mar sin, cha toir mi ach sealladh farsaing air na bun-bheachdan bunaiteach agus cuingealaich mi mi fhìn gu aon dòigh-obrach, a tha a’ toirt a-steach cruthachadh drochaid Linux agus pasganan a ghlacadh. Tha mion-fhiosrachadh air fhàgail a-mach, leis gu bheil cuspair lìonra shoithichean fhèin airidh air artaigil air leth. Bidh ceanglaichean gu cuid de dh’ fhoillseachaidhean a tha gu sònraichte lèirsinneach agus foghlaim air an toirt seachad gu h-ìosal.

Contains air aon òstair

Tha aon dòigh air conaltradh a chuir air dòigh tro sheòlaidhean IP eadar soithichean a tha a’ ruith air an aon aoigh a’ toirt a-steach cruthachadh drochaid Linux. Airson an adhbhair seo, tha innealan brìgheil air an cruthachadh ann an Kubernetes (agus Docker) veth (fìor ethernet). Bidh aon cheann den inneal veth a’ ceangal ri àite-ainm lìonra an t-soithich, am fear eile ri Linux drochaid air an lìonra aoigheachd.

Tha aon cheann den veth aig a h-uile inneal air an aon òstair ceangailte ri drochaid tron ​​​​urrainn dhaibh conaltradh le chèile tro sheòlaidhean IP. Tha seòladh IP aig drochaid Linux cuideachd agus tha i na gheata airson trafaic a-mach bho na pods a tha gu bhith airson nodan eile.

Ciamar a gheibh pod Kubernetes seòladh IP?

Containers air diofar luchd-aoigheachd

Is e cuairteachadh pacaid aon dòigh a leigeas le soithichean air diofar nodan conaltradh le chèile a’ cleachdadh seòlaidhean IP. Aig Flannel, tha teicneòlas an urra ris a’ chothrom seo. vxlan, a bhios “a’ pacadh” a’ phacaid tùsail a-steach do phasgan UDP agus an uairsin ga chuir chun cheann-uidhe aige.

Ann an cruinneachadh Kubernetes, bidh Flannel a’ cruthachadh inneal vxlan agus ag ùrachadh a’ chlàr slighe air gach nód a rèir sin. Bidh gach pacaid a tha gu bhith airson soitheach air aoigheachd eile a’ dol tron ​​inneal vxlan agus air a chuairteachadh ann am pacaid UDP. Aig a 'cheann-uidhe, thèid am pasgan neadachaidh a thoirt a-mach agus a chuir air adhart chun a' phoit a tha a dhìth.

Ciamar a gheibh pod Kubernetes seòladh IP?
Nota: Is e seo dìreach aon dòigh air conaltradh lìonra a chuir air dòigh eadar soithichean.

Dè th' ann an CRI?

CRI (Eadar-aghaidh Runtime Container) na plugan a leigeas le kubelet diofar àrainneachdan runtime container a chleachdadh. Tha an CRI API air a thoirt a-steach do dhiofar amannan ruith, gus an urrainn do luchd-cleachdaidh an ùine ruith as fheàrr leotha a thaghadh.

Dè a th' ann an CNI?

Pròiseact CNI a sònrachadh gus fuasgladh lìonra uile-choitcheann a chuir air dòigh airson soithichean Linux. A bharrachd air an sin, tha e a’ toirt a-steach plugain, le uallach airson diofar dhleastanasan nuair a bhios tu a’ stèidheachadh lìonra pod. Tha am plugan CNI na fhaidhle so-ghnìomhaichte a tha a rèir an t-sònrachadh (bruidhnidh sinn mu chuid de plugins gu h-ìosal).

Riarachadh subnets gu nodan airson seòlaidhean IP a shònrachadh gu pods

Leis gu feum seòladh IP a bhith aig gach pod ann am brabhsair, tha e cudromach dèanamh cinnteach gu bheil an seòladh seo gun samhail. Tha seo air a choileanadh le bhith a’ sònrachadh subnet sònraichte do gach nód, às am faigh na pods air an nód sin seòlaidhean IP an uairsin.

Rianadair IPAM Node

Cuin nodeipam seachad mar paramadair brataich --controllers kube-smachd-mhanaidsear, bidh e a’ riarachadh subnet air leth (podCIDR) gu gach nód bhon bhuidheann CIDR (ie, an raon de sheòlaidhean IP airson an lìonra brabhsair). Leis nach eil na podCIDRn sin a’ dol thairis air, bidh e comasach seòladh IP sònraichte a thoirt do gach pod.

Thèid podCIDR a thoirt do nód Kubernetes nuair a thèid a chlàradh an toiseach leis a’ bhuidheann. Gus am podCIDR de nodan atharrachadh, feumaidh tu an dì-chlàradh agus an uairsin ath-chlàradh, a’ dèanamh atharrachaidhean iomchaidh air rèiteachadh còmhdach smachd Kubernetes eatarra. Faodaidh tu podCIDR nód a thaisbeanadh leis an àithne a leanas:

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

Kubelet, runtime container agus plugins CNI: mar a tha e uile ag obair

Tha a bhith a’ clàradh pod gach nód a’ toirt a-steach mòran cheumannan ullachaidh. Anns an earrainn seo, cuiridh mi fòcas a-mhàin air an fheadhainn a tha gu dìreach co-cheangailte ri stèidheachadh lìonra pod.

Le bhith a’ clàradh pod gu nód sònraichte a’ piobrachadh an t-sreath thachartasan a leanas:

Ciamar a gheibh pod Kubernetes seòladh IP?

Cuideachadh: Ailtireachd plugins CRI Contained.

Eadar-obrachadh eadar ùine ruith container agus plugins CNI

Tha am plugan CNI aige fhèin aig gach solaraiche lìonra. Bidh ùine ruith an t-soithich ga ruith gus an lìonra a rèiteachadh airson a’ pod mar a thòisicheas e. A thaobh container, thèid am plugan CNI a chuir air bhog leis a’ plugan CRI glèidhte.

A bharrachd air an sin, tha a àidseant fhèin aig gach solaraiche. Tha e air a chuir a-steach air a h-uile nod Kubernetes agus tha e an urra ri rèiteachadh lìonra pods. Tha an neach-ionaid seo an dàrna cuid air a ghabhail a-steach le config CNI no ga chruthachadh gu neo-eisimeileach air an nód. Cuidichidh an config am plugan CRI gus am plugan CNI a ghairm.

Faodar suidheachadh suidheachadh CNI a ghnàthachadh; gu bunaiteach tha e a-staigh /etc/cni/net.d/<config-file>. Tha uallach air luchd-rianachd chnuasach cuideachd airson plugins CNI a chuir a-steach air gach nód cnuasachaidh. Tha an suidheachadh aca cuideachd air a ghnàthachadh; eòlaire bunaiteach - /opt/cni/bin.

Nuair a bhios tu a’ cleachdadh container, faodar na slighean airson rèiteachadh nam plugan agus binaries a shuidheachadh san roinn [plugins.«io.containerd.grpc.v1.cri».cni] в faidhle rèiteachaidh container.

Leis gu bheil sinn a’ cleachdadh Flannel mar sholaraiche an lìonraidh againn, bruidhnidh sinn beagan mu bhith ga stèidheachadh:

  • Mar as trice tha Flanneld (daemon Flannel) air a chuir a-steach ann am brabhsair mar DaemonSet le install-cni mar init container.
  • Install-cni a ’cruthachadh faidhle rèiteachaidh CNI (/etc/cni/net.d/10-flannel.conflist) air gach bonn.
  • Bidh Flanneld a’ cruthachadh inneal vxlan, a’ faighinn meata-dàta lìonra air ais bhon t-seirbheisiche API, agus a’ cumail sùil air ùrachaidhean pod. Mar a tha iad air an cruthachadh, bidh e a 'sgaoileadh slighean gu gach pods air feadh a' bhrais.
  • Leigidh na slighean sin le pods conaltradh le chèile tro sheòlaidhean IP.

Airson fiosrachadh nas mionaidiche mu obair Flannel, tha mi a’ moladh na ceanglaichean aig deireadh an artaigil a chleachdadh.

Seo diagram den eadar-obrachadh eadar am plugan Containerd CRI agus na plugins CNI:

Ciamar a gheibh pod Kubernetes seòladh IP?

Mar a chì thu gu h-àrd, bidh an kubelet a’ gairm am plugan Containerd CRI gus am pod a chruthachadh, a dh’ iarras an uairsin air plugan CNI gus lìonra a’ pod a rèiteachadh. Ann a bhith a’ dèanamh seo, bidh plugan CNI an t-solaraiche lìonra a’ gairm prìomh plugins CNI eile gus diofar thaobhan den lìonra a rèiteachadh.

Eadar-obrachadh eadar plugins CNI

Tha grunn plugins CNI ann a tha ag obair gus conaltradh lìonra a stèidheachadh eadar soithichean air an òstair. Bruidhnidh an artaigil seo air trì dhiubh.

Plugin Flannel CNI

Nuair a bhios tu a’ cleachdadh Flannel mar sholaraiche lìonraidh, bidh am pàirt Contained CRI a’ gairm Plugin Flannel CNIa’ cleachdadh faidhle rèiteachaidh 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
      }
    }
  ]
}

Bidh am plugan Flannel CNI ag obair ann an co-bhonn ri Flanneld. Aig àm tòiseachaidh, bidh Flanneld a’ faighinn podCIDR agus mion-fhiosrachadh eile co-cheangailte ris an lìonra bhon t-seirbheisiche API agus gan sàbhaladh gu faidhle /run/flannel/subnet.env.

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

Bidh am plugan Flannel CNI a’ cleachdadh dàta bho /run/flannel/subnet.env gus plugan drochaid CNI a rèiteachadh agus a ghairm.

Plugin drochaid CNI

Canar am plugan seo leis an rèiteachadh a leanas:

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

Nuair a thèid a ghairm airson a’ chiad uair, cruthaichidh e drochaid Linux le «name»: «cni0», a tha air a chomharrachadh anns an config. An uairsin thèid paidhir veth a chruthachadh airson gach pod. Tha aon cheann dheth ceangailte ri àite-ainm lìonra an t-soithich, tha am fear eile air a ghabhail a-steach don drochaid Linux air an lìonra aoigheachd. Plugin drochaid CNI a’ ceangal a h-uile inneal aoigheachd ri drochaid Linux air an lìonra aoigheachd.

Às deidh dha crìoch a chuir air a’ phaidhir veth, bidh am plugan Bridge a’ gairm am plugan aoigheachd-ionadail IPAM CNI. Faodar an seòrsa plugan IPAM a rèiteachadh anns an rèiteachadh CNI a bhios am plugan CRI a’ cleachdadh gus am plugan Flannel CNI a ghairm.

Plugins IPAM CNI aoigheachd-ionadail

Drochaid CNI a’ gairm plugan aoigheachd-ionadail IPAM CNI leis an rèiteachadh a leanas:

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

Plugin aoigheachd-ionadail IPAM (IP Aèideadh Management - stiùireadh seòladh IP) a’ tilleadh an seòladh IP airson an t-soithich bhon subnet agus a’ stòradh an IP ainmichte air an òstair san eòlaire a tha air a shònrachadh san earrann dataDir - /var/lib/cni/networks/<network-name=cni0>/<ip>. Anns an fhaidhle seo tha ID an t-soithich dhan deach an seòladh IP seo a shònrachadh.

Nuair a chuireas tu fios gu plugan IPAM host-local, tillidh e an dàta a leanas:

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

Geàrr-chunntas

Bidh Kube-controller-manaidsear a’ sònrachadh podCIDR do gach nód. Bidh pods gach nód a’ faighinn seòlaidhean IP bhon àite seòlaidh anns an raon podCIDR a chaidh a shònrachadh. Leis nach eil podCIDRs nan nodan a’ dol thairis air, gheibh a h-uile pod seòlaidhean IP gun samhail.

Bidh rianadair brabhsair Kubernetes a’ rèiteachadh agus a’ stàladh an kubelet, ùine ruith nan soithichean, àidseant solaraiche lìonra, agus a’ dèanamh lethbhreac de na plugins CNI gu gach nód. Aig àm tòiseachaidh, bidh àidseant solaraiche an lìonraidh a’ gineadh config CNI. Nuair a tha pod clàraichte gu nód, bidh an kubelet ag iarraidh air plugan CRI a chruthachadh. An ath rud, ma thèid soitheach a chleachdadh, bidh am plugan Contained CRI a’ gairm am plugan CNI a tha air a shònrachadh ann an config CNI gus lìonra a’ pod a rèiteachadh. Mar thoradh air an sin, gheibh am pod seòladh IP.

Thug e beagan ùine dhomh a bhith a’ tuigsinn a h-uile subtleties agus nuances a bha anns na h-eadar-obrachaidhean sin uile. Tha mi an dòchas gun cuidich an t-eòlas seo thu gus tuigse nas fheàrr fhaighinn air mar a tha Kubernetes ag obair. Ma tha mi ceàrr mu dheidhinn rud sam bith, cuir fios thugam aig Twitter no aig an t-seòladh [post-d fo dhìon]. Faodaidh tu ruighinn a-mach ma tha thu airson bruidhinn mu thaobhan den artaigil seo no rud sam bith eile. Bu toil leam bruidhinn riut!

iomraidhean

Containers agus lìonra

Ciamar a tha Flannel ag obair?

CRI agus CNI

PS bhon eadar-theangair

Leugh cuideachd air ar blog:

Source: www.habr.com

Cuir beachd ann