Kubernetes pod tau txais IP chaw nyob li cas?

Nco tseg. txhais.: Kab lus no, sau los ntawm SRE engineer los ntawm LinkedIn, nkag mus rau hauv kev nthuav dav txog cov khawv koob sab hauv hauv Kubernetes - ntau qhov tseeb, kev sib cuam tshuam ntawm CRI, CNI thiab kube-apiserver - uas tshwm sim thaum lub pod tom ntej yuav tsum tau muab tus IP chaw nyob.

Ib qho ntawm cov kev xav tau yooj yim Kubernetes network qauv yog tias txhua lub pod yuav tsum muaj nws tus IP chaw nyob thiab lwm yam pods hauv pawg yuav tsum tuaj yeem tiv tauj nws ntawm qhov chaw nyob ntawd. Muaj ntau lub network "neeg muab kev pabcuam" (Flannel, Calico, Canal, thiab lwm yam) uas pab ua raws li tus qauv network no.

Thaum kuv thawj zaug pib ua haujlwm nrog Kubernetes, nws tsis meej meej rau kuv tias cov pods tau txais lawv qhov chaw nyob IP li cas. Txawm tias muaj kev nkag siab txog kev ua haujlwm ntawm tus kheej li cas, nws nyuaj rau xav txog lawv ua haujlwm ua ke. Piv txwv li, kuv paub dab tsi CNI plugins yog rau, tab sis kuv tsis paub yuav ua li cas raws nraim lawv hu. Yog li ntawd, kuv txiav txim siab sau tsab xov xwm no los qhia txog kev paub txog ntau yam kev sib txuas hauv network thiab lawv ua haujlwm ua ke hauv Kubernetes pawg, uas tso cai rau txhua lub pod kom tau txais nws tus kheej IP chaw nyob.

Muaj ntau txoj hauv kev los npaj kev sib tham hauv Kubernetes, ib yam li muaj cov kev xaiv sib txawv rau lub thawv. Qhov kev tshaj tawm no yuav siv Flannel los npaj ib lub network hauv ib pawg, thiab raws li ib puag ncig ua tau zoo - Thawv. Kuv kuj tseem ua qhov kev xav tias koj paub tias kev sib txuas ntawm cov thawv ua haujlwm li cas, yog li kuv mam li kov nws luv luv, tsuas yog rau cov ntsiab lus.

Qee lub tswv yim yooj yim

Containers and the Network: Ib qho luv luv piav qhia

Muaj ntau cov ntawv tshaj tawm zoo heev hauv Is Taws Nem uas piav qhia tias cov ntim khoom sib txuas lus li cas hauv lub network. Yog li ntawd, kuv tsuas yog muab cov ntsiab lus dav dav ntawm cov ntsiab lus yooj yim thiab txwv kuv tus kheej rau ib txoj hauv kev, uas suav nrog kev tsim ib tus choj Linux thiab encapsulating pob. Cov ntsiab lus raug tshem tawm, txij li lub ntsiab lus ntawm lub thawv sib txuas nws tus kheej tsim nyog ib tsab xov xwm cais. Txuas mus rau qee qhov kev pom tshwj xeeb thiab kev tshaj tawm kev kawm yuav muab hauv qab no.

Ntim ntawm ib lub party

Ib txoj hauv kev los npaj kev sib txuas lus los ntawm IP chaw nyob ntawm cov thawv uas khiav ntawm tib lub tswv tsev koom nrog tsim lub choj Linux. Rau lub hom phiaj no, cov khoom siv virtual tau tsim hauv Kubernetes (thiab Docker) veth (virtual ethernet). Ib qho kawg ntawm cov cuab yeej veth txuas mus rau lub thawv lub network namespace, lwm qhov rau Linux choj ntawm lub host network.

Txhua lub thawv ntawm tib tus tswv tsev muaj ib qho kawg ntawm veth txuas nrog tus choj uas lawv tuaj yeem sib txuas lus nrog ib leeg ntawm IP chaw nyob. Tus choj Linux tseem muaj qhov chaw nyob IP thiab ua raws li lub rooj vag rau kev khiav tawm ntawm cov pods destined rau lwm cov nodes.

Kubernetes pod tau txais IP chaw nyob li cas?

Thawv ntawm cov tswv tsev sib txawv

Packet encapsulation yog ib txoj hauv kev uas tso cai rau cov ntim ntawm cov nodes sib txuas lus nrog ib leeg siv IP chaw nyob. Ntawm Flannel, thev naus laus zis yog lub luag haujlwm rau lub sijhawm no. vxlan ua, uas "pob" thawj pob ntawv rau hauv UDP pob ntawv thiab xa mus rau nws qhov chaw.

Hauv Kubernetes pawg, Flannel tsim vxlan ntaus ntawv thiab hloov kho cov lus qhia ntawm txhua qhov raws li. Txhua pob ntawv destined rau ib lub thawv ntawm ib tus tswv tsev sib txawv dhau los ntawm vxlan ntaus ntawv thiab yog encapsulated hauv UDP pob ntawv. Ntawm qhov chaw, cov pob ntawv nested raug rho tawm thiab xa mus rau qhov xav tau pod.

Kubernetes pod tau txais IP chaw nyob li cas?
Lus Cim: Qhov no tsuas yog ib txoj hauv kev los npaj kev sib txuas lus network ntawm cov thawv ntim khoom.

CRI yog dab tsi?

CRI (Container Runtime Interface) yog ib lub plugin uas tso cai rau kubelet siv cov thawv sib txawv runtime ib puag ncig. CRI API yog tsim rau ntau lub sijhawm ua haujlwm, yog li cov neeg siv tuaj yeem xaiv lub sijhawm ua haujlwm ntawm lawv xaiv.

CNI yog dab tsi?

Project CNI yog ib tug specification los npaj ib qho kev daws teeb meem thoob ntiaj teb rau Linux ntim. Ntxiv rau, nws suav nrog plugins, lub luag haujlwm rau ntau lub luag haujlwm thaum teeb tsa lub pod network. CNI plugin yog cov ntaub ntawv ua tau raws li qhov tshwj xeeb (peb yuav tham txog qee qhov plugins hauv qab no).

Kev faib cov subnets rau cov nodes rau muab IP chaw nyob rau pods

Txij li txhua lub pod hauv ib pawg yuav tsum muaj qhov chaw nyob IP, nws yog ib qho tseem ceeb kom ntseeg tau tias qhov chaw nyob no yog qhov tshwj xeeb. Qhov no yog ua tiav los ntawm kev muab txhua qhov ntawm ib qho tshwj xeeb subnet, los ntawm cov pods ntawm qhov node ces muab IP chaw nyob.

Node IPAM Controller

Thaum nodeipam dhau li tus chij parameter --controllers kube-controller-manager, nws faib cov subnet cais (podCIDR) rau txhua qhov ntawm pawg CIDR (piv txwv li, qhov ntau ntawm IP chaw nyob rau pawg network). Txij li cov podCIDRs no tsis sib tshooj, nws dhau los ua tau rau txhua lub pod yuav muab faib rau qhov chaw nyob IP tshwj xeeb.

Lub Kubernetes node tau muab rau podCIDR thaum nws pib sau npe nrog pawg. Txhawm rau hloov podCIDR ntawm cov nodes, koj yuav tsum deregister lawv thiab rov sau npe rau lawv, ua kom tsim nyog hloov pauv rau Kubernetes tswj txheej txheej hauv nruab nrab. Koj tuaj yeem tso saib lub podCIDR ntawm lub node siv cov lus txib hauv qab no:

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

Kubelet, thawv runtime thiab CNI plugins: nws ua haujlwm li cas

Teem caij lub pod rau ib lub node muaj ntau yam kev npaj. Hauv seem no, kuv yuav tsom mus rau cov uas muaj feem cuam tshuam ncaj qha rau kev teeb tsa lub pod network.

Teem caij lub pod rau ib qho ntawm cov node ua rau cov kab ke hauv qab no ntawm cov xwm txheej:

Kubernetes pod tau txais IP chaw nyob li cas?

Pab: Architecture ntawm Containerd CRI plugins.

Kev sib cuam tshuam ntawm lub thawv runtime thiab CNI plugins

Txhua tus neeg muab kev pabcuam network muaj nws tus kheej CNI plugin. Lub thawv lub sijhawm ua haujlwm khiav nws los teeb tsa lub network rau lub pod thaum nws pib. Nyob rau hauv cov ntaub ntawv ntawm ntim, CNI plugin yog launched los ntawm lub plugin Container CRI.

Ntxiv mus, txhua tus kws kho mob muaj nws tus kheej tus neeg sawv cev. Nws yog ntsia rau ntawm tag nrho cov Kubernetes nodes thiab yog lub luag hauj lwm rau lub network configuration ntawm pods. Tus neeg sawv cev no yog suav nrog CNI config lossis nws tus kheej tsim nws ntawm node. Lub config pab CRI plugin teeb uas CNI plugin hu.

Qhov chaw ntawm CNI config tuaj yeem hloov kho; los ntawm default nws yog nyob rau hauv /etc/cni/net.d/<config-file>. Cov thawj coj hauv pawg kuj yog lub luag haujlwm rau kev txhim kho CNI plugins ntawm txhua pawg ntawm pawg. Lawv qhov chaw kuj yog customizable; default directory - /opt/cni/bin.

Thaum siv containerd, txoj hauv kev rau plugin config thiab binaries tuaj yeem teeb tsa hauv ntu [plugins.Β«io.containerd.grpc.v1.criΒ».cni] Π² containerd configuration file.

Txij li thaum peb tab tom siv Flannel ua peb tus neeg muab kev pabcuam network, cia peb tham me ntsis txog kev teeb tsa:

  • Flanneld (Flannel's daemon) feem ntau yog ntsia hauv ib pawg li DaemonSet nrog install-cni raws li init thawv.
  • Install-cni tsim CNI configuration file (/etc/cni/net.d/10-flannel.conflist) nyob rau txhua qhov node.
  • Flanneld tsim ib lub cuab yeej vxlan, retrieves network metadata los ntawm API server, thiab saib xyuas cov pods tshiab. Raws li lawv tau tsim, nws faib txoj hauv kev rau txhua lub pods thoob plaws hauv pawg.
  • Cov kev no tso cai rau cov pods sib txuas lus nrog ib leeg ntawm IP chaw nyob.

Yog xav paub ntxiv txog kev ua haujlwm ntawm Flannel, kuv pom zoo kom siv cov kev sib txuas ntawm qhov kawg ntawm tsab xov xwm.

Nov yog daim duab ntawm kev sib cuam tshuam ntawm Containerd CRI plugin thiab CNI plugins:

Kubernetes pod tau txais IP chaw nyob li cas?

Raws li koj tuaj yeem pom saum toj no, kubelet hu rau Containerd CRI plugin los tsim cov pod, uas tom qab ntawd hu rau CNI plugin los teeb tsa lub pod's network. Hauv kev ua li ntawd, tus neeg muab kev pabcuam network CNI plugin hu rau lwm tus tub ntxhais CNI plugins los teeb tsa ntau yam ntawm lub network.

Kev sib tham ntawm CNI plugins

Muaj ntau yam CNI plugins uas nws txoj haujlwm yog los pab teeb tsa kev sib txuas lus hauv network ntawm cov ntim ntawm tus tswv tsev. Kab lus no yuav tham txog peb ntawm lawv.

CNI Plugin Flannel

Thaum siv Flannel ua tus muab kev pabcuam network, Containerd CRI tivthaiv hu CNI Plugin Flannelsiv CNI configuration file /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 ua haujlwm nrog Flanneld. Thaum lub sijhawm pib, Flanneld khaws podCIDR thiab lwm cov ntaub ntawv ntsig txog network los ntawm API server thiab khaws cia rau hauv cov ntaub ntawv /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 siv cov ntaub ntawv los ntawm /run/flannel/subnet.env kom teeb tsa thiab hu rau CNI choj plugin.

CNI plugin Choj

Qhov plugin no hu ua nrog cov teeb tsa hauv qab no:

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

Thaum hu rau thawj zaug, nws tsim ib tus choj Linux nrog Β«nameΒ»: Β«cni0Β», uas yog qhia nyob rau hauv lub config. Tom qab ntawd ib khub veth yog tsim rau txhua lub pod. Ib qho kawg ntawm nws txuas nrog lub thawv lub network namespace, lwm qhov yog suav nrog hauv Linux choj ntawm tus tswv network. CNI plugin Choj txuas tag nrho cov thawv ntim khoom rau lub tshuab txuas Linux ntawm lub network host.

Tom qab ua tiav kev teeb tsa veth khub, Choj plugin hu rau tus tswv tsev-hauv zos IPAM CNI plugin. IPAM plugin hom tuaj yeem teeb tsa hauv CNI config uas CRI plugin siv los hu rau Flannel CNI plugin.

Tus tswv tsev-hauv zos IPAM CNI plugins

Choj CNI hu host-local IPAM plugin CNI nrog configuration hauv qab no:

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

Host-local IPAM plugin (IP Achaw nyob Mkev tswj hwm - IP chaw nyob) xa rov qab tus IP chaw nyob rau lub thawv los ntawm subnet thiab khaws cov IP faib rau ntawm tus tswv tsev hauv cov npe teev tseg hauv ntu dataDir - /var/lib/cni/networks/<network-name=cni0>/<ip>. Cov ntaub ntawv no muaj tus ID ntawm lub thawv uas tus IP chaw nyob no tau muab.

Thaum hu rau tus tswv tsev-hauv zos IPAM plugin, nws rov qab cov ntaub ntawv hauv qab no:

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

Txoj kev xaus

Kube-controller-manager muab lub podCIDR rau txhua qhov. Txhua tus ntawm cov pods tau txais IP chaw nyob los ntawm qhov chaw nyob hauv qhov chaw faib podCIDR. Txij li cov nodes 'podCIDRs tsis sib tshooj, txhua lub pods tau txais qhov chaw nyob IP tshwj xeeb.

Kubernetes pawg thawj tswj hwm teeb tsa thiab teeb tsa lub kubelet, ntim lub sijhawm ua haujlwm, tus neeg saib xyuas network, thiab luam CNI plugins rau txhua qhov. Thaum pib, tus neeg muab kev pabcuam network tsim CNI config. Thaum lub plhaub taum teem rau ntawm ib qho, kubelet hu rau CRI plugin los tsim nws. Tom ntej no, yog tias ntim tau siv, Containerd CRI plugin hu CNI plugin teev nyob rau hauv CNI config los teeb tsa lub pod's network. Yog li ntawd, lub pod tau txais qhov chaw nyob IP.

Nws coj kuv qee lub sijhawm los nkag siab tag nrho cov subtleties thiab nuances ntawm tag nrho cov kev cuam tshuam no. Kuv vam tias qhov kev paub no yuav pab koj nkag siab zoo dua li cas Kubernetes ua haujlwm. Yog hais tias kuv yuam kev dab tsi, thov hu rau kuv ntawm Twitter los yog ntawm qhov chaw nyob [email tiv thaiv]. Xav tias dawb hu rau yog tias koj xav tham txog cov ntsiab lus ntawm kab lus no lossis lwm yam. Kuv xav nrog koj tham!

ua tim khawv

Ntim thiab network

Flannel ua haujlwm li cas?

CRI thiab CNI

PS los ntawm tus txhais lus

Nyeem kuj ntawm peb blog:

Tau qhov twg los: www.hab.com

Ntxiv ib saib