Ki jan yon gous Kubernetes jwenn yon adrès IP?

Remak. trad.: Atik sa a, yon enjenyè SRE soti nan LinkedIn ekri, antre nan detay sou maji enteryè a nan Kubernetes - pi jisteman, entèraksyon an nan CRI, CNI ak kube-apiserver - ki rive lè pwochen gous la bezwen yo dwe asiyen yon adrès IP.

Youn nan kondisyon debaz yo Modèl rezo Kubernetes se ke chak gous dwe gen pwòp adrès IP li epi nenpòt lòt gous nan gwoup la dwe kapab kontakte li nan adrès sa a. Gen anpil "founisè" rezo (Flanèl, Calico, Canal, elatriye) ki ede aplike modèl rezo sa a.

Lè mwen te kòmanse travay ak Kubernetes, li pa t klè nèt pou mwen ki jan egzakteman gous jwenn adrès IP yo. Menm ak yon konpreyansyon sou fason eleman endividyèl yo fonksyone, li te difisil imajine yo travay ansanm. Pou egzanp, mwen te konnen kisa grefon CNI yo te pou, men mwen pa te gen okenn lide ki jan egzakteman yo te rele. Se poutèt sa, mwen deside ekri atik sa a pou pataje konesans sou divès eleman rezo yo ak fason yo travay ansanm nan yon gwoup Kubernetes, ki pèmèt chak gous jwenn pwòp adrès IP inik li yo.

Gen diferan fason yo òganize rezo nan Kubernetes, menm jan gen diferan opsyon ègzekutabl pou resipyan yo. Piblikasyon sa a pral itilize Flanèl pou òganize yon rezo nan yon gwoup, ak kòm yon anviwònman ègzèkutabl - Containerd. Mwen menm tou mwen fè sipozisyon an ke ou konnen ki jan rezo ant resipyan travay, kidonk mwen pral jis manyen sou li yon ti tan, jis pou kontèks.

Kèk konsèp de baz

Kontenè ak Rezo a: Yon Apèsi Brèf

Gen anpil piblikasyon ekselan sou Entènèt ki eksplike kijan resipyan yo kominike youn ak lòt sou rezo a. Se poutèt sa, mwen pral sèlman bay yon BECA jeneral nan konsèp debaz yo epi limite tèt mwen nan yon sèl apwòch, ki enplike nan kreye yon pon Linux ak enkapsulasyon pakè. Detay yo omisyon, depi sijè a nan rezo veso tèt li merite yon atik separe. Yo pral bay lyen ki mennen nan kèk piblikasyon edikatif ki pi enpòtan yo pi ba a.

Kontenè sou yon sèl lame

Youn nan fason yo òganize kominikasyon atravè adrès IP ant resipyan ki kouri sou menm lame a enplike nan kreye yon pon Linux. Pou rezon sa a, aparèy vityèl yo kreye nan Kubernetes (ak Docker) veth (Ethernet vityèl). Yon bout nan veth aparèy la konekte ak espas non rezo veso a, lòt la nan Linux pon sou rezo lame a.

Tout resipyan ki sou menm lame a gen yon bout veth ki konekte ak yon pon kote yo ka kominike youn ak lòt atravè adrès IP. Pon Linux la tou gen yon adrès IP epi li aji kòm yon pòtay pou trafik sòti nan gous yo destine pou lòt nœuds.

Ki jan yon gous Kubernetes jwenn yon adrès IP?

Kontenè sou lame diferan

Ankapsulasyon pake se yon metòd ki pèmèt resipyan sou diferan nœuds yo kominike youn ak lòt lè l sèvi avèk adrès IP. Nan Flannel, teknoloji responsab opòtinite sa a. vxlan, ki "pake" pake orijinal la nan yon pake UDP epi answit voye li nan destinasyon li.

Nan yon gwoup Kubernetes, Flannel kreye yon aparèy vxlan ak mete ajou tab wout la sou chak ne kòmsadwa. Chak pake ki destine pou yon veso sou yon lame diferan pase nan aparèy vxlan la epi yo ankapsule nan yon pake UDP. Nan destinasyon an, pake a enbrike ekstrè epi voye nan gous la vle.

Ki jan yon gous Kubernetes jwenn yon adrès IP?
Remak: Sa a se jis yon fason yo òganize kominikasyon rezo ant resipyan yo.

ki sa ki CRI?

CRI (Container Runtime Interface) se yon plugin ki pèmèt kubelet itilize diferan anviwònman egzekisyon veso. Se API CRI a bati nan plizyè ègzekutabl, kidonk itilizatè yo ka chwazi ègzekutabl la nan chwa yo.

ki sa ki CNI?

Pwojè CNI se yon spesifikasyon pou òganize yon solisyon rezo inivèsèl pou kontenè Linux. Anplis de sa, li gen ladan l grefon, responsab plizyè fonksyon lè w ap mete yon rezo gous. Plugin CNI a se yon dosye ègzèkutabl ki konfòm ak spesifikasyon la (nou pral diskite sou kèk grefon anba a).

Alokasyon subnets pou nœuds pou plase adrès IP pou gous

Piske chak gous nan yon gwoup dwe gen yon adrès IP, li enpòtan pou asire adrès sa a inik. Sa a se reyalize lè yo bay chak ne yon sous-rezo inik, ki soti nan ki gous yo sou ne sa a Lè sa a, yo asiyen adrès IP.

Nœud IPAM Kontwolè

nodeipam pase kòm yon paramèt drapo --controllers kube-controller-manager, li asiyen yon subnet separe (podCIDR) nan chak ne soti nan gwoup CIDR la (sa vle di, seri adrès IP pou rezo gwoup la). Piske podCIDR sa yo pa sipèpoze, li vin posib pou chak gous resevwa yon adrès IP inik.

Yo bay yon node Kubernetes yon podCIDR lè li okòmansman anrejistre ak gwoup la. Pou chanje podCIDR nœuds yo, ou bezwen deregister yo epi answit re-anrejistre yo, fè chanjman ki apwopriye nan konfigirasyon kouch kontwòl Kubernetes nan ant. Ou ka montre podCIDR yon ne lè l sèvi avèk kòmandman sa a:

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

Kubelet, ègzekutabl veso ak grefon CNI: ki jan li tout travay

Orè yon gous pou chak ne enplike nan yon anpil nan etap preparasyon. Nan seksyon sa a, mwen pral konsantre sèlman sou moun ki gen rapò dirèkteman ak mete kanpe yon rezo gous.

Pwogramasyon yon gous nan yon ne sèten deklanche chèn evènman sa a:

Ki jan yon gous Kubernetes jwenn yon adrès IP?

Èd: Achitekti grefon Containerd CRI.

Entèraksyon ant ègzekutabl veso ak grefon CNI

Chak founisè rezo gen pwòp plugin CNI li. Ègzekutabl veso a kouri li pou konfigirasyon rezo a pou gous la pandan li kòmanse. Nan ka containerd, plugin CNI a te lanse pa plugin a Containerd CRI.

Anplis, chak founisè gen ajan pwòp li yo. Li enstale sou tout nœuds Kubernetes epi li responsab pou konfigirasyon rezo gous yo. Ajan sa a swa enkli ak konfigirasyon CNI a oswa poukont li kreye li sou ne la. Konfigirasyon an ede Plugin CRI a mete ki Plugin CNI pou rele.

Kote konfigirasyon CNI a ka Customized; pa default li se nan /etc/cni/net.d/<config-file>. Administratè cluster yo responsab tou pou enstale grefon CNI sou chak node cluster. Kote yo tou customizable; anyè default - /opt/cni/bin.

Lè w ap itilize containerd, yo ka mete chemen pou konfigirasyon plugin ak binè yo nan seksyon an [plugins.«io.containerd.grpc.v1.cri».cni] в containerd fichye konfigirasyon.

Depi nou itilize Flannel kòm founisè rezo nou an, ann pale yon ti kras sou konfigirasyon li:

  • Flanneld (Demon Flanèl la) anjeneral enstale nan yon gwoup kòm yon DaemonSet ak install-cni kòm init veso.
  • Install-cni kreye CNI fichye konfigirasyon (/etc/cni/net.d/10-flannel.conflist) sou chak ne.
  • Flanneld kreye yon aparèy vxlan, rekipere metadata rezo nan sèvè API a, epi kontwole mizajou pod. Pandan yo kreye, li distribye wout nan tout gous nan tout gwoup la.
  • Wout sa yo pèmèt gous yo kominike youn ak lòt atravè adrès IP.

Pou plis enfòmasyon detaye sou travay Flannel la, mwen rekòmande pou itilize lyen ki nan fen atik la.

Isit la se yon dyagram nan entèraksyon ki genyen ant plugin CRI Containerd ak grefon CNI yo:

Ki jan yon gous Kubernetes jwenn yon adrès IP?

Kòm ou ka wè pi wo a, kubelet la rele Plugin Containerd CRI pou kreye gous la, ki Lè sa a, rele Plugin CNI pou configure rezo gous la. Lè w fè sa, plugin CNI founisè rezo a rele lòt grefon CNI debaz pou konfigirasyon divès aspè nan rezo a.

Entèraksyon ant grefon CNI

Gen plizyè grefon CNI ki gen travay se ede mete kanpe kominikasyon rezo ant resipyan sou lame a. Atik sa a pral diskite sou twa nan yo.

CNI plugin flanèl

Lè w ap itilize Flannel kòm yon founisè rezo, eleman Containerd CRI a rele CNI plugin flanèllè l sèvi avèk fichye konfigirasyon CNI la /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
      }
    }
  ]
}

Flannel CNI Plugin la ap travay ansanm ak Flanneld. Pandan demaraj, Flanneld rekipere podCIDR ak lòt detay ki gen rapò ak rezo nan sèvè API a epi sove yo nan yon dosye. /run/flannel/subnet.env.

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

Flannel CNI Plugin la itilize done ki soti nan /run/flannel/subnet.env konfigirasyon epi rele Plugin pon CNI la.

CNI Plugin Bridge

Yo rele Plugin sa a ak konfigirasyon sa a:

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

Lè yo rele pou premye fwa, li kreye yon pon Linux ak «name»: «cni0», ki endike nan konfigirasyon an. Lè sa a, yo kreye yon pè veth pou chak gous. Yon bout li konekte ak espas non rezo veso a, lòt la enkli nan pon Linux sou rezo lame a. CNI Plugin Bridge konekte tout resipyan lame a yon pon Linux sou rezo lame a.

Lè w fin mete kanpe pè veth la, Plugin Bridge la rele Plugin IPAM CNI lame lokal la. Kalite grefon IPAM la ka konfigirasyon nan konfigirasyon CNI ke Plugin CRI a itilize pou rele Plugin Flannel CNI la.

Lame-lokal IPAM CNI grefon

Bridge CNI apèl host-local IPAM plugin CNI ak konfigirasyon sa a:

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

Lame-lokal IPAM plugin (IP Address Mjesyon - jesyon adrès IP) retounen adrès IP pou veso a soti nan subnet la epi li estoke IP ki resevwa lajan an sou lame a nan anyè ki espesifye nan seksyon an. dataDir - /var/lib/cni/networks/<network-name=cni0>/<ip>. Fichye sa a gen ID veso kote adrès IP sa a bay.

Lè w ap rele Plugin IPAM lame lokal la, li retounen done sa yo:

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

Rezime

Kube-controller-manager bay yon podCIDR nan chak ne. Gous chak ne yo resevwa adrès IP nan espas adrès ki nan seri podCIDR yo resevwa yo. Depi podCIDR nœuds yo pa sipèpoze, tout gous resevwa adrès IP inik.

Administratè gwoup Kubernetes la konfigure ak enstale kubelet la, ègzekutabl veso a, ajan founisè rezo a, epi kopye grefon CNI yo nan chak ne. Pandan demaraj, ajan founisè rezo a jenere yon konfigirasyon CNI. Lè yon gous pwograme nan yon ne, kubelet la rele Plugin CRI a pou kreye li. Apre sa, si yo itilize containerd, Plugin Containerd CRI a rele Plugin CNI ki espesifye nan konfigirasyon CNI pou konfigirasyon rezo pod la. Kòm yon rezilta, gous la resevwa yon adrès IP.

Li te pran m 'kèk tan yo konprann tout sibtilite yo ak nuans nan tout entèraksyon sa yo. Mwen espere eksperyans sa a pral ede w pi byen konprann ki jan Kubernetes travay. Si mwen mal sou yon bagay, tanpri kontakte m nan Twitter oswa nan adrès la [imèl pwoteje]. Ezite kontakte si ou ta renmen diskite sou aspè nan atik sa a oswa nenpòt lòt bagay. Mwen ta renmen pale avèk ou!

Referans

Kontenè ak rezo

Ki jan flanèl travay?

CRI ak CNI

PS soti nan tradiktè

Li tou sou blog nou an:

Sous: www.habr.com

Add nouvo kòmantè