Kedu ka Kubernetes pod si enweta adreesị IP?

Rịba ama. ntụgharị asụsụ.: Edemede a, nke onye injinia SRE sitere na LinkedIn dere, na-abanye n'ụzọ zuru ezu banyere anwansi ime na Kubernetes - karịa nke ọma, mmekọrịta nke CRI, CNI na kube-apiserver - nke na-eme mgbe pọd ọzọ kwesịrị ka ekenye adreesị IP.

Otu n'ime ihe ndị bụ isi chọrọ Ụdị netwọkụ Kubernetes bụ na pọd ọ bụla ga-enwerịrị adreesị IP nke ya na pọd ọ bụla ọzọ dị na ụyọkọ ga-enwe ike ịkpọtụrụ ya na adreesị ahụ. Enwere ọtụtụ netwọk "ndị na-enye" ​​(Flannel, Calico, Canal, wdg) na-enyere aka mejuputa ụdị netwọk a.

Mgbe mbụ m malitere iso Kubernetes rụọ ọrụ, o dochaghị m anya ka pọds si enweta adreesị IP ha. Ọbụlagodi na ịghọta ka akụkụ nke otu akụkụ si arụ ọrụ, ọ siri ike iche n'echiche na ha na-arụkọ ọrụ ọnụ. Dịka ọmụmaatụ, amaara m ihe plugins CNI bụ maka, mana enweghị m echiche otu esi akpọ ha kpọmkwem. Ya mere, ekpebiri m ide edemede a iji kesaa ihe ọmụma gbasara ihe dị iche iche netwọkụ na otu ha si arụkọ ọrụ na ụyọkọ Kubernetes, nke na-enye ohere ka pod ọ bụla nweta adreesị IP nke ya.

Enwere ụzọ dị iche iche iji hazie ịkparịta ụka n'Ịntanet na Kubernetes, dị ka enwere nhọrọ oge ịgba ọsọ dị iche iche maka arịa. Akwụkwọ a ga-eji Flannel iji hazie netwọk n'ime ụyọkọ, yana dịka ebe enwere ike ime - Akpa. Ana m eche na ị maara ka ịkparịta ụka n'Ịntanet n'etiti arịa si arụ ọrụ, yabụ m ga-emetụ ya aka na nkenke, naanị maka okwu.

Ụfọdụ isi echiche

Akpa na netwọk: Nchịkọta nkenke

Enwere ọtụtụ akwụkwọ mara mma na ịntanetị nke na-akọwa etu akpa akpa na-esi agwa ibe ha okwu na netwọkụ. Ya mere, naanị m ga-enye nkọwa zuru ezu nke echiche ndị bụ isi ma kpachie onwe m n'otu ụzọ, nke gụnyere ịmepụta akwa Linux na nchịkọta nchịkọta. E wepụrụ nkọwapụta, ebe ọ bụ na isiokwu nke ịkparịta ụka n'akpa akpa n'onwe ya kwesịrị inwe edemede dị iche. A ga-enye njikọ na akwụkwọ ndị nwere nghọta na nkuzi n'okpuru.

Akpa na otu onye ọbịa

Otu ụzọ isi hazie nkwurịta okwu site na adreesị IP n'etiti arịa na-agba ọsọ n'otu onye ọbịa gụnyere ịmepụta àkwà mmiri Linux. Maka ebumnuche a, a na-emepụta ngwaọrụ mebere na Kubernetes (na Docker) veth (eternet mebere). Otu njedebe nke ngwaọrụ veth na-ejikọta na oghere aha netwọk akpa ahụ, nke ọzọ na Linux akwa na netwọk nnabata.

Ihe niile dị na otu onye ọbịa nwere otu njedebe nke veth ejikọrọ na akwa mmiri nke ha nwere ike ịkparịta ụka n'etiti ibe ha site na adreesị IP. Àkwà mmiri Linux nwekwara adreesị IP ma na-arụ ọrụ dị ka ọnụ ụzọ maka okporo ụzọ egress site na pọd ndị a kara aka maka ọnụ ndị ọzọ.

Kedu ka Kubernetes pod si enweta adreesị IP?

Akpa na ndị ọbịa dị iche iche

Ihe mkpuchi ngwugwu bụ otu ụzọ na-enye ohere ka arịa dị na ọnụ ọnụ dị iche iche na-ekwurịta okwu site na iji adreesị IP. Na Flannel, teknụzụ na-ahụ maka ohere a. vxlan, nke “na-etinye” ngwugwu mbụ n'ime ngwugwu UDP wee ziga ya ebe ọ na-aga.

N'ime ụyọkọ Kubernetes, Flannel na-emepụta ngwaọrụ vxlan ma na-emelite tebụl ụzọ n'ọnụ ọnụ nke ọ bụla. Ihe ngwugwu ọ bụla a kara aka maka akpa dị na onye ọbịa dị iche na-agafe na ngwaọrụ vxlan ma tinye ya na ngwugwu UDP. N'ebe a na-aga, a na-ewepụta ngwugwu akwụ akwụ ma bufee ya na pọd achọrọ.

Kedu ka Kubernetes pod si enweta adreesị IP?
Mara: Nke a bụ naanị otu ụzọ isi hazie nzikọrịta ozi netwọk n'etiti arịa.

Kedu ihe bụ CRI?

CRI (Container ojiri ngwa ngwa ngwa) bụ ngwa mgbakwunye na-enye ohere kubelet iji dị iche iche akpa gburugburu ojiri oge. Ewubere CRI API n'ime oge ịgba ọsọ dị iche iche, yabụ ndị ọrụ nwere ike họrọ oge ọsọ nke nhọrọ ha.

Kedu ihe bụ CNI?

Ọrụ CNI bụ a nkọwapụta iji hazie ihe ngwọta netwọk ụwa maka arịa Linux. Na mgbakwunye, ọ gụnyere plugins, na-ahụ maka ọrụ dị iche iche mgbe ị na-edozi netwọk pọd. Ihe mgbakwunye CNI bụ faịlụ nwere ike ime nke kwekọrọ na nkọwapụta (anyị ga-atụle ụfọdụ plugins n'okpuru).

Oke nke subnets na ọnụ maka ikenye adreesị IP na pọd

Ebe ọ bụ na pọd ọ bụla dị na ụyọkọ ga-enwerịrị adreesị IP, ọ dị mkpa ịhụ na adreesị a pụrụ iche. A na-enweta nke a site n'inye ọnụ ụzọ ọ bụla subnet pụrụ iche, nke a na-ekenye pods dị na ọnụ ahụ adreesị IP.

Node IPAM Controller

Mgbe nodeipam gafere dị ka ọkọlọtọ ọkọlọtọ --controllers kube-controller-onye njikwa, ọ na-ekenye subnet dị iche iche (podCIDR) na ọnụ ọnụ nke ọ bụla site na ụyọkọ CIDR (ya bụ, ụdị adreesị IP maka netwọk ụyọkọ). Ebe ọ bụ na podCIDR ndị a anaghị agafe, ọ ga-ekwe omume ka ekenye pọd ọ bụla adreesị IP pụrụ iche.

A na-ekenye ọnụ ụzọ Kubernetes podCIDR mgbe ejiri ụyọkọ ahụ debanye aha ya na mbụ. Ka ịgbanwee podCIDR nke ọnụ ụzọ, ị kwesịrị ị debanyere ha wee debanye aha ha ọzọ, na-eme mgbanwe kwesịrị ekwesị na Kubernetes njikwa oyi akwa nhazi n'etiti. Ị nwere ike igosipụta podCIDR nke ọnụ ọnụ site na iji iwu a:

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

Kubelet, akpa ojiri oge na CNI plugins: ka o si arụ ọrụ

Ịhazi otu pọd kwa ọnụ na-agụnye ọtụtụ usoro nkwadebe. Na ngalaba a, m ga-elekwasị anya naanị na ndị nwere njikọ chiri anya na ịtọlite ​​​​netwọọdụ pọd.

Ịhazi otu pọd n'otu ọnụ ọnụ na-ebute usoro mmemme ndị a:

Kedu ka Kubernetes pod si enweta adreesị IP?

Enyemaka: Nhazi nke ngwa mgbakwunye CRI nwere.

Mmekọrịta dị n'etiti oge ịgba ọsọ akpa na plugins CNI

Onye na-eweta netwọk ọ bụla nwere ngwa mgbakwunye CNI nke ya. Oge ọsọ nke akpa ahụ na-agba ya iji hazie netwọk maka pọd ka ọ na-amalite. N'ihe gbasara akpado, ngwa mgbakwunye CNI na-ebupụta ngwa mgbakwunye Akpa CRI.

Ọzọkwa, onye ọ bụla na-enye ọrụ nwere onye nnọchi anya ya. Awụnyere ya na oghere Kubernetes niile ma na-ahụ maka nhazi netwọkụ nke pọd. Agụnyere onye ọrụ a na nhazi CNI ma ọ bụ mepụta ya n'onwe ya na ọnụ. Nhazi ahụ na-enyere ngwa mgbakwunye CRI aka ịtọ nke ngwa mgbakwunye CNI ịkpọ.

Enwere ike ịhazi ọnọdụ nke CNI config; na ndabara ọ bụ na /etc/cni/net.d/<config-file>. Ndị nchịkwa ụyọkọ na-ahụ maka ịwụnye plugins CNI na ọnụ ụyọkọ ọ bụla. Ebe ha nwekwara ike ịhazi ya; akwụkwọ ndekọ aha - /opt/cni/bin.

Mgbe ị na-eji akpati, ụzọ maka nhazi ngwa mgbakwunye na ọnụọgụ abụọ nwere ike ịtọ na ngalaba [plugins.«io.containerd.grpc.v1.cri».cni] в faịlụ nhazi echekwabara.

Ebe anyị na-eji Flannel dị ka onye na-eweta netwọkụ anyị, ka anyị kwuo ntakịrị gbasara ịtọlite ​​ya:

  • A na-etinyekarị Flanneld (Flannel's daemon) na ụyọkọ dị ka DaemonSet nwere. install-cni dị ka akpa init.
  • Install-cni na -emepụta CNI nhazi faịlụ (/etc/cni/net.d/10-flannel.conflist) n'akụkụ nke ọ bụla.
  • Flanneld na-emepụta ngwaọrụ vxlan, na-eweghachi metadata netwọk site na sava API, na nyochaa mmelite pod. Ka emebere ha, ọ na-ekesa ụzọ gaa na pọd niile na ụyọkọ ahụ.
  • Ụzọ ndị a na-enye ohere ka pods na-ekwurịta okwu site na adreesị IP.

Maka ozi ndị ọzọ gbasara ọrụ Flannel, ana m akwado iji njikọ na njedebe nke isiokwu ahụ.

Nke a bụ eserese ngosi nke mmekọrịta dị n'etiti ngwa mgbakwunye Containerd CRI na plugins CNI:

Kedu ka Kubernetes pod si enweta adreesị IP?

Dịka ị na-ahụ n'elu, kubelet na-akpọ ngwa mgbakwunye Containerd CRI ka ịmepụta pọd ahụ, nke na-akpọ ngwa mgbakwunye CNI iji hazie netwọk pod. N'ime nke a, ngwa mgbakwunye CNI nke onye na-eweta netwọk na-akpọ plugins isi CNI ndị ọzọ iji hazie akụkụ dị iche iche nke netwọkụ ahụ.

Mmekọrịta dị n'etiti plugins CNI

Enwere plugins CNI dị iche iche nke ọrụ ha bụ inyere aka melite nkwurịta okwu netwọk n'etiti arịa na onye ọbịa. Isiokwu a ga-atụle atọ n’ime ha.

Ihe mgbakwunye CNI Flannel

Mgbe ị na-eji Flannel dị ka onye na-eweta netwọkụ, akụrụngwa CRI na-akpọ Containerd Ihe mgbakwunye CNI Flanneliji faịlụ nhazi 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
      }
    }
  ]
}

Ngwa mgbakwunye Flannel CNI na-arụkọ ọrụ yana Flanneld. N'oge mmalite, Flanneld na-eweghachite podCIDR na nkọwa ndị ọzọ metụtara netwọkụ sitere na sava API wee chekwaa ha na faịlụ. /run/flannel/subnet.env.

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

Ngwa mgbakwunye Flannel CNI na-eji data sitere na /run/flannel/subnet.env iji hazie ma kpọọ ngwa mgbakwunye akwa akwa CNI.

CNI plugin Bridge

A na-akpọ ngwa mgbakwunye a na nhazi ndị a:

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

Mgbe a na-akpọ ya nke mbụ, ọ na-emepụta àkwà mmiri Linux «name»: «cni0», nke egosiri na nhazi. Mgbe ahụ, a na-emepụta ụzọ veth maka pọd nke ọ bụla. A na-ejikọta otu njedebe ya na oghere aha netwọk nke akpa ahụ, nke ọzọ gụnyere na akwa Linux na netwọk ndị ọbịa. CNI plugin Bridge jikọọ niile usu containers ka a Linux àkwà mmiri na usu netwọk.

N'ịbụ onye hazichara veth ụzọ abụọ, ngwa mgbakwunye Bridge na-akpọ ngwa mgbakwunye IPAM CNI nke mpaghara. Enwere ike ịhazi ụdị ngwa mgbakwunye IPAM na nhazi CNI nke ngwa mgbakwunye CRI na-eji na-akpọ ngwa mgbakwunye Flannel CNI.

Ngwa mgbakwunye IPAM CNI nke mpaghara ọbịa

Bridge CNI oku ngwa-ngwa IPAM ngwa mgbakwunye CNI ya na nhazi a:

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

Ngwa mgbakwunye IPAM onye ọbịa (IP Aakwa Mnjikwa - adreesị IP njikwa) weghachi adreesị IP maka akpa site na subnet wee chekwaa IP ekenyela na onye ọbịa na ndekọ aha akọwapụtara na ngalaba ahụ. dataDir - /var/lib/cni/networks/<network-name=cni0>/<ip>. Faịlụ a nwere NJ nke akpa e kenyere adreesị IP a.

Mgbe ị na-akpọ ngwa mgbakwunye IPAM onye ọbịa, ọ na-eweghachi data ndị a:

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

Nchịkọta

Onye njikwa Kube-controller na-ekenye podCIDR n'ọnụ ọnụ nke ọ bụla. Mpempe ọnụ ọnụ nke ọ bụla na-enweta adreesị IP site na oghere adreesị dị na mpaghara podCIDR ekenyere. Ebe ọ bụ na ọnụ ọgụgụ 'podCIDRs adịghị agafe, pọd niile na-enweta adreesị IP pụrụ iche.

Onye nchịkwa ụyọkọ Kubernetes na-ahazi ma wụnye kubelet, oge ojiri nke akpa, onye na-eweta netwọkụ, ma detuo plugins CNI na ọnụ nke ọ bụla. N'oge mmalite, onye na-eweta netwọk na-emepụta nhazi CNI. Mgbe akwadoro pọd ka ọ bụrụ ọnụ, kubelet na-akpọ ngwa mgbakwunye CRI ka imepụta ya. Na-esote, ọ bụrụ na ejiri akpa, ngwa mgbakwunye Containerd CRI na-akpọ ngwa mgbakwunye CNI akọwapụtara na nhazi CNI iji hazie netwọkụ pọd. N'ihi ya, pọd ahụ na-enweta adreesị IP.

O were m oge iji ghọta aghụghọ niile na nuances nke mmekọrịta ndị a niile. Enwere m olileanya na ahụmịhe a ga-enyere gị aka ịghọta ka Kubernetes si arụ ọrụ. Ọ bụrụ na m na-ezighị ezi banyere ihe ọ bụla, biko kpọtụrụ m na Twitter ma ọ bụ na adreesị [email protected]. Nwee onwe gị ịkpọtụrụ ma ọ bụrụ na ịchọrọ ịkọwa akụkụ nke isiokwu a ma ọ bụ ihe ọ bụla ọzọ. Ọ ga-amasị m iso gị kparịta ụka!

zoro

Akpa na netwọk

Kedu ka Flannel si arụ ọrụ?

CRI na CNI

PS sitere na onye ntụgharị

Gụọkwa na blọọgụ anyị:

isi: www.habr.com

Tinye a comment