Bawo ni Kubernetes podu ṣe gba adiresi IP kan?

Akiyesi. itumọ.Nkan yii, ti a kọ nipasẹ ẹlẹrọ SRE kan lati LinkedIn, lọ sinu awọn alaye nipa idan inu ni Kubernetes - diẹ sii ni deede, ibaraenisepo ti CRI, CNI ati kube-apiserver - ti o ṣẹlẹ nigbati adarọ ese ti o tẹle nilo lati sọtọ adirẹsi IP kan.

Ọkan ninu awọn ipilẹ awọn ibeere Kubernetes nẹtiwọki awoṣe ni pe adarọ-ese kọọkan gbọdọ ni adiresi IP tirẹ ati eyikeyi podu miiran ninu iṣupọ gbọdọ ni anfani lati kan si ni adirẹsi yẹn. Ọpọlọpọ awọn “olupese” nẹtiwọọki wa (Flannel, Calico, Canal, bbl) ti o ṣe iranlọwọ imuse awoṣe nẹtiwọọki yii.

Nigbati mo kọkọ bẹrẹ ṣiṣẹ pẹlu Kubernetes, ko ṣe kedere fun mi bi awọn adarọ-ese ṣe gba awọn adirẹsi IP wọn gangan. Paapaa pẹlu oye ti bii awọn paati kọọkan ṣe n ṣiṣẹ, o nira lati fojuinu wọn ṣiṣẹ papọ. Fun apẹẹrẹ, Mo mọ kini awọn afikun CNI wa fun, ṣugbọn Emi ko ni imọran bii gangan ti wọn pe. Nitorinaa, Mo pinnu lati kọ nkan yii lati pin imọ nipa ọpọlọpọ awọn paati nẹtiwọọki ati bii wọn ṣe n ṣiṣẹ papọ ni iṣupọ Kubernetes, eyiti ngbanilaaye adarọ ese kọọkan lati gba adiresi IP alailẹgbẹ tirẹ.

Awọn ọna oriṣiriṣi lo wa lati ṣeto nẹtiwọọki ni Kubernetes, gẹgẹ bi awọn aṣayan asiko ṣiṣe oriṣiriṣi wa fun awọn apoti. Atẹjade yii yoo lo Flannel lati ṣeto nẹtiwọọki kan ni iṣupọ kan, ati bi agbegbe ṣiṣe ṣiṣe - Apoti. Mo tun n ṣe arosinu pe o mọ bii Nẹtiwọọki laarin awọn apoti ṣe n ṣiṣẹ, nitorinaa Emi yoo kan fọwọkan lori rẹ ni ṣoki, o kan fun ọrọ-ọrọ.

Diẹ ninu awọn ipilẹ agbekale

Awọn apoti ati Nẹtiwọọki: Akopọ kukuru

Ọpọlọpọ awọn atẹjade ti o dara julọ wa lori Intanẹẹti ti o ṣalaye bi awọn apoti ṣe n ba ara wọn sọrọ lori nẹtiwọọki. Nitorinaa, Emi yoo funni ni akopọ gbogbogbo ti awọn imọran ipilẹ ati fi opin si ara mi si ọna kan, eyiti o kan ṣiṣẹda afara Linux kan ati awọn idii ṣiṣafihan. Awọn alaye ti yọkuro, nitori koko-ọrọ ti Nẹtiwọọki eiyan funrararẹ yẹ nkan lọtọ. Awọn ọna asopọ si diẹ ninu awọn oye pataki ati awọn atẹjade ẹkọ yoo pese ni isalẹ.

Awọn apoti lori ọkan ogun

Ọna kan lati ṣeto ibaraẹnisọrọ nipasẹ awọn adirẹsi IP laarin awọn apoti ti n ṣiṣẹ lori agbalejo kanna jẹ ṣiṣẹda afara Linux kan. Fun idi eyi, awọn ẹrọ foju ni a ṣẹda ni Kubernetes (ati Docker) veth (ayelujara foju). Ipari kan ti ẹrọ veth sopọ si aaye orukọ nẹtiwọọki ti eiyan, ekeji si Linux Afara lori awọn ogun nẹtiwọki.

Gbogbo awọn apoti ti o wa lori ogun kanna ni opin kan ti veth ti a ti sopọ si afara nipasẹ eyiti wọn le ṣe ibasọrọ pẹlu ara wọn nipasẹ awọn adirẹsi IP. Afara Lainos tun ni adiresi IP kan ati pe o ṣe bi ẹnu-ọna fun ijabọ egress lati awọn adarọ-ese ti a pinnu fun awọn apa miiran.

Bawo ni Kubernetes podu ṣe gba adiresi IP kan?

Awọn apoti lori yatọ si ogun

Packet encapsulation jẹ ọna kan ti o fun laaye awọn apoti lori awọn apa oriṣiriṣi lati ṣe ibaraẹnisọrọ pẹlu ara wọn nipa lilo awọn adirẹsi IP. Ni Flannel, imọ-ẹrọ jẹ iduro fun aye yii. vxlan, eyi ti "awọn idii" apo-iwe atilẹba sinu apo-iwe UDP kan ati lẹhinna firanṣẹ si opin irin ajo rẹ.

Ninu iṣupọ Kubernetes, Flannel ṣẹda ẹrọ vxlan kan ati ki o ṣe imudojuiwọn tabili ipa-ọna lori ipade kọọkan ni ibamu. Paketi kọọkan ti a pinnu fun eiyan kan lori ogun ti o yatọ kọja nipasẹ ẹrọ vxlan ati pe o wa ninu apo UDP kan. Ni ibi ti o nlo, apo itẹ-ẹiyẹ ni a yọ jade ati dari si adarọ-ese ti o fẹ.

Bawo ni Kubernetes podu ṣe gba adiresi IP kan?
Akiyesi: Eyi jẹ ọna kan lati ṣeto ibaraẹnisọrọ nẹtiwọki laarin awọn apoti.

Kini CRI?

CRI (Apapọ Iṣe asiko Apoti) jẹ ohun itanna ti o fun laaye kubelet lati lo awọn agbegbe asiko asiko ti o yatọ. CRI API ti wa ni itumọ ti sinu ọpọlọpọ awọn asiko asiko, nitorina awọn olumulo le yan akoko asiko ti o fẹ.

Kini CNI?

CNI ise agbese duro sipesifikesonu lati ṣeto ojutu nẹtiwọọki agbaye fun awọn apoti Linux. Ni afikun, o pẹlu awọn afikun, lodidi fun awọn iṣẹ oriṣiriṣi nigbati o ba ṣeto nẹtiwọọki podu kan. Ohun itanna CNI jẹ ​​faili ṣiṣe ti o ni ibamu pẹlu sipesifikesonu (a yoo jiroro diẹ ninu awọn afikun ni isalẹ).

Pipin awọn subnets si awọn apa fun yiyan awọn adirẹsi IP si awọn adarọ-ese

Niwọn igba ti adarọ ese kọọkan ninu iṣupọ gbọdọ ni adiresi IP kan, o ṣe pataki lati rii daju pe adirẹsi yii jẹ alailẹgbẹ. Eyi jẹ aṣeyọri nipa yiyan oju-ọna kọọkan ni subnet kan ti o yatọ, lati eyiti awọn adarọ-ese ti o wa lori ipade yẹn ti wa ni sọtọ awọn adirẹsi IP.

Node IPAM Adarí

Nigbawo nodeipam koja bi a Flag paramita --controllers kube-oludari-faili, o pin ipin kan lọtọ subnet (podCIDR) lati iṣupọ CIDR (ie, ibiti awọn adirẹsi IP fun nẹtiwọọki iṣupọ) si ipade kọọkan. Niwọn bi awọn podCIDRs wọnyi ko ṣe agbekọja, o ṣee ṣe fun adarọ-ese kọọkan lati pin adiresi IP alailẹgbẹ kan.

Ipin Kubernetes kan ti yan podCIDR kan nigbati o ti forukọsilẹ lakoko pẹlu iṣupọ. Lati yi podCIDR ti awọn apa, o nilo lati fagilee wọn ati lẹhinna tun-forukọsilẹ wọn, ṣiṣe awọn ayipada ti o yẹ si iṣeto Layer iṣakoso Kubernetes laarin. O le ṣe afihan podCIDR ti apa kan nipa lilo pipaṣẹ atẹle:

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

Kubelet, eiyan asiko isise ati CNI afikun: bi o ti ṣiṣẹ gbogbo

Ṣiṣeto adarọ-ese fun ipade kan pẹlu ọpọlọpọ awọn igbesẹ igbaradi. Ni apakan yii, Emi yoo dojukọ nikan lori awọn ti o ni ibatan taara si eto nẹtiwọọki adarọ ese kan.

Ṣiṣeto adarọ-ese kan si oju ipade kan nfa pq awọn iṣẹlẹ wọnyi:

Bawo ni Kubernetes podu ṣe gba adiresi IP kan?

Iranlọwọ: Faaji ti awọn afikun CRI Apoti.

Ibaraṣepọ laarin akoko asiko eiyan ati awọn afikun CNI

Olupese nẹtiwọki kọọkan ni ohun itanna CNI tirẹ. Akoko asiko ti eiyan naa nṣiṣẹ lati tunto nẹtiwọọki fun adarọ ese bi o ti n bẹrẹ. Ninu ọran ti apoti, ohun itanna CNI ti ṣe ifilọlẹ nipasẹ ohun itanna Eiyan CRI.

Pẹlupẹlu, olupese kọọkan ni oluranlowo tirẹ. O ti fi sori ẹrọ lori gbogbo awọn apa Kubernetes ati pe o jẹ iduro fun iṣeto nẹtiwọọki ti awọn adarọ-ese. Aṣoju yii jẹ boya pẹlu atunto CNI tabi ni ominira ṣẹda rẹ lori ipade. Iṣeto naa ṣe iranlọwọ fun ohun itanna CRI ṣeto eyiti ohun itanna CNI lati pe.

Awọn ipo ti awọn CNI konfigi le ti wa ni adani; nipa aiyipada o wa ninu /etc/cni/net.d/<config-file>. Awọn alakoso iṣupọ tun jẹ iduro fun fifi awọn afikun CNI sori ipade iṣupọ kọọkan. Ipo wọn tun jẹ asefara; itọsọna aiyipada - /opt/cni/bin.

Nigbati o ba nlo apoti, awọn ọna fun atunto itanna ati awọn alakomeji le ṣeto ni apakan [plugins.«io.containerd.grpc.v1.cri».cni] в eiyan iṣeto ni faili.

Niwọn bi a ti nlo Flannel bi olupese nẹtiwọọki wa, jẹ ki a sọrọ diẹ nipa siseto rẹ:

  • Flanneld (Flannel's daemon) ni a maa n fi sori ẹrọ ni iṣupọ kan bi DaemonSet pẹlu install-cni bi eiyan init.
  • Install-cni ṣẹda CNI iṣeto ni faili (/etc/cni/net.d/10-flannel.conflist) lori ọkọọkan.
  • Flanneld ṣẹda ẹrọ vxlan kan, gba metadata nẹtiwọọki lati olupin API, ati ṣetọju awọn imudojuiwọn podu. Bi wọn ṣe ṣẹda wọn, o pin awọn ipa-ọna si gbogbo awọn podu jakejado iṣupọ naa.
  • Awọn ipa-ọna wọnyi gba awọn adarọ-ese laaye lati ṣe ibaraẹnisọrọ pẹlu ara wọn nipasẹ awọn adirẹsi IP.

Fun alaye diẹ sii nipa iṣẹ Flannel, Mo ṣeduro lilo awọn ọna asopọ ni ipari nkan naa.

Eyi ni aworan atọka ti ibaraenisepo laarin ohun itanna Containerd CRI ati awọn afikun CNI:

Bawo ni Kubernetes podu ṣe gba adiresi IP kan?

Gẹgẹbi o ti le rii loke, kubelet pe ohun itanna Containerd CRI lati ṣẹda adarọ ese naa, eyiti o pe ohun itanna CNI lati tunto nẹtiwọọki adarọ ese naa. Ni ṣiṣe bẹ, ohun itanna CNI olupese nẹtiwọọki n pe awọn afikun CNI mojuto miiran lati tunto awọn aaye oriṣiriṣi ti nẹtiwọọki naa.

Ibaraenisepo laarin awọn afikun CNI

Awọn afikun CNI oriṣiriṣi wa ti iṣẹ wọn ni lati ṣe iranlọwọ ṣeto ibaraẹnisọrọ nẹtiwọọki laarin awọn apoti lori agbalejo naa. Àpilẹ̀kọ yìí máa jíròrò mẹ́ta lára ​​wọn.

CNI itanna Flannel

Nigbati o ba nlo Flannel gẹgẹbi olupese nẹtiwọki, awọn ipe paati CRI Containerd CNI itanna Flannellilo CNI iṣeto ni faili /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
      }
    }
  ]
}

Ohun itanna Flannel CNI ṣiṣẹ ni apapo pẹlu Flanneld. Lakoko ibẹrẹ, Flanneld gba podCIDR ati awọn alaye ti o jọmọ nẹtiwọọki miiran lati olupin API ati fi wọn pamọ si faili kan /run/flannel/subnet.env.

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

Ohun itanna Flannel CNI nlo data lati /run/flannel/subnet.env lati tunto ati pe ohun itanna Afara CNI.

CNI itanna Bridge

Ohun itanna yii ni a pe pẹlu iṣeto ni atẹle:

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

Nigbati a pe fun igba akọkọ, o ṣẹda afara Linux pẹlu «name»: «cni0», eyi ti o jẹ itọkasi ni konfigi. Lẹhinna a ṣẹda bata veth fun podu kọọkan. Ipari kan ti sopọ si aaye orukọ nẹtiwọọki ti eiyan, ekeji wa ninu afara Linux lori nẹtiwọọki agbalejo. CNI itanna Bridge so gbogbo ogun awọn apoti to a Linux Afara lori ogun nẹtiwọki.

Lẹhin ti o ti pari tito bata veth, ohun itanna Afara pe ohun itanna IPAM CNI agbegbe-ogun. Iru itanna IPAM le tunto ni atunto CNI ti ohun itanna CRI nlo lati pe ohun itanna Flannel CNI.

Gbalejo-agbegbe IPAM CNI afikun

Bridge CNI awọn ipe ogun-agbegbe IPAM itanna CNI pẹlu iṣeto ni atẹle:

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

Gbalejo-agbegbe IPAM itanna (IP Aaṣọ-aṣọ Miṣakoso - iṣakoso adiresi IP) da pada adiresi IP fun eiyan lati inu subnet ati tọju IP ti a ti pin si lori agbalejo ninu ilana ti a pato ninu apakan dataDir - /var/lib/cni/networks/<network-name=cni0>/<ip>. Faili yii ni ID ti apo eiyan ti o ti fi adiresi IP yii si.

Nigbati o ba n pe ohun itanna IPAM agbegbe-ogun, o da data wọnyi pada:

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

Akopọ

Kube-controller-faili fi podCIDR kan si ipade kọọkan. Awọn adarọ-ese ipade kọọkan gba awọn adirẹsi IP lati aaye adirẹsi ni iwọn podCIDR ti a pin. Niwọn igba ti awọn apa 'podCIDRs ko ni lqkan, gbogbo awọn adarọ-ese gba awọn adiresi IP alailẹgbẹ.

Alakoso iṣupọ Kubernetes tunto ati fi kubelet sori ẹrọ, akoko asiko eiyan, aṣoju olupese nẹtiwọọki, ati daakọ awọn afikun CNI si ipade kọọkan. Lakoko ibẹrẹ, aṣoju olupese nẹtiwọọki n ṣe atunto CNI kan. Nigbati a ba ṣeto podu kan si ipade kan, kubelet pe ohun itanna CRI lati ṣẹda rẹ. Nigbamii ti, ti o ba ti lo apoti, ohun itanna Containerd CRI n pe ohun itanna CNI ti a sọ pato ninu atunto CNI lati tunto nẹtiwọọki podu naa. Bi abajade, adarọ ese naa gba adiresi IP kan.

O gba akoko diẹ lati loye gbogbo awọn arekereke ati awọn nuances ti gbogbo awọn ibaraẹnisọrọ wọnyi. Mo nireti pe iriri yii yoo ran ọ lọwọ lati ni oye bi Kubernetes ṣe n ṣiṣẹ. Ti Mo ba ni aṣiṣe nipa ohunkohun, jọwọ kan si mi ni twitter tabi ni adirẹsi [imeeli ni idaabobo]. Lero lati de ọdọ ti o ba fẹ lati jiroro awọn apakan ti nkan yii tabi ohunkohun miiran. Emi yoo fẹ lati iwiregbe pẹlu rẹ!

jo

Awọn apoti ati nẹtiwọki

Bawo ni Flannel ṣiṣẹ?

CRI ati CNI

PS lati onitumọ

Ka tun lori bulọọgi wa:

orisun: www.habr.com

Fi ọrọìwòye kun