Ahoana no ahazoan'ny pod Kubernetes adiresy IP?

Fanamarihana. transl.: Ity lahatsoratra ity, nosoratan'ny injeniera SRE avy ao amin'ny LinkedIn, dia miresaka amin'ny antsipiriany momba ny ody anaty ao amin'ny Kubernetes - ny marimarina kokoa, ny fifandraisan'ny CRI, CNI ary kube-apiserver - izay mitranga rehefa mila omena adiresy IP ny pod manaraka.

Iray amin'ireo fepetra fototra Modely tambajotra Kubernetes dia ny hoe ny pod tsirairay dia tsy maintsy manana ny adiresy IP-ny ary ny pod hafa ao amin'ny cluster dia tsy maintsy afaka mifandray amin'io adiresy io. Betsaka ny "mpanome" tambajotra (Flannel, Calico, Canal, sns.) izay manampy amin'ny fampiharana io modely tambajotra io.

Raha vao nanomboka niara-niasa tamin'i Kubernetes aho, dia tsy nazava tamiko ny fomba ahazoan'ny pods ny adiresy IP-ny. Na dia tamin'ny fahatakarana ny fomba fiasan'ny singa tsirairay aza dia sarotra ny naka sary an-tsaina azy ireo niara-niasa. Ohatra, fantatro hoe inona ny plugins CNI, saingy tsy fantatro hoe ahoana marina no niantsoana azy ireo. Noho izany, nanapa-kevitra ny hanoratra ity lahatsoratra ity aho mba hizara fahalalana momba ireo singa isan-karazany amin'ny tambajotra sy ny fomba iarahan'izy ireo ao amin'ny cluster Kubernetes, izay ahafahan'ny pod tsirairay mahazo ny adiresy IP manokana.

Misy fomba isan-karazany hikarakarana tambajotra ao amin'ny Kubernetes, toy ny misy safidy hafa amin'ny fotoana fandehanana ho an'ny kaontenera. Hampiasa ity publication ity Flannel handamina tambajotra ao anaty cluster, ary ho tontolo iainana azo tanterahina - Containerd. Ataoko ihany koa ny fiheverana fa fantatrao ny fomba fiasan'ny tambajotra eo amin'ny kaontenera, ka hikasika azy fohifohy aho, ho an'ny contexte fotsiny.

Hevitra fototra sasany

Containers and the Network: Overview Fohy

Betsaka ny boky tsara indrindra ao amin'ny Internet izay manazava ny fomba ifandraisan'ny container amin'ny tambajotra. Noho izany, tsy hanome topimaso ankapobeny momba ny foto-kevitra fototra fotsiny aho ary hametra ny tenako amin'ny fomba iray, izay ahitana ny famoronana tetezana Linux sy ny fonosana encapsulating. Nesorina ny antsipiriany, satria ny lohahevitra momba ny tamba-jotra kaontenera dia mendrika ny lahatsoratra misaraka. Ireto misy rohy mankany amin'ny boky sy gazety manadihady manokana.

Kaontenera amin'ny mpampiantrano iray

Ny fomba iray handaminana ny fifandraisana amin'ny alΓ lan'ny adiresy IP eo anelanelan'ny kaontenera mandeha amin'ny mpampiantrano iray ihany dia ny famoronana tetezana Linux. Ho an'ity tanjona ity, ny fitaovana virtoaly dia noforonina ao amin'ny Kubernetes (sy Docker) veth (virtual ethernet). Ny tendrony iray amin'ny fitaovana veth dia mifandray amin'ny anaran'ny tambazotran'ny kaontenera, ny iray hafa mankany Linux tetezana amin'ny tambajotra mpampiantrano.

Ny kaontenera rehetra ao amin'ny mpampiantrano iray ihany dia manana faran'ny veth mifandray amin'ny tetezana iray ahafahan'izy ireo mifampiresaka amin'ny alΓ lan'ny adiresy IP. Ny tetezana Linux koa dia manana adiresy IP ary miasa toy ny vavahadin'ny fifamoivoizana mivoaka avy amin'ny pods natao ho an'ny nodes hafa.

Ahoana no ahazoan'ny pod Kubernetes adiresy IP?

Kaontenera amin'ny mpampiantrano samihafa

Ny encapsulation packet dia fomba iray ahafahan'ny container amin'ny nodes samihafa hifandray amin'ny adiresy IP. Ao amin'ny Flannel, ny teknolojia no tompon'andraikitra amin'izany fahafahana izany. vxlan, izay "mampiditra" ny fonosana tany am-boalohany ho ao anaty fonosana UDP ary avy eo mandefa azy any amin'ny toerana halehany.

Ao amin'ny kluster Kubernetes, mamorona fitaovana vxlan i Flannel ary manavao ny latabatra zotra amin'ny node tsirairay mifanaraka amin'izany. Ny fonosana tsirairay natokana ho an'ny kaontenera amin'ny mpampiantrano hafa dia mandalo amin'ny fitaovana vxlan ary voarakitra ao anaty fonosana UDP. Any amin'ny toerana haleha dia alaina ny fonosan'ny akany ary alefa any amin'ny pod tiana.

Ahoana no ahazoan'ny pod Kubernetes adiresy IP?
Fanamarihana: Ity dia fomba iray handaminana ny fifandraisana amin'ny tambajotra eo amin'ny kaontenera.

Inona no atao hoe CRI?

CRI (Container Runtime Interface) dia plugin iray ahafahan'ny kubelet mampiasa ny tontolo iainan'ny kaontenera samihafa. Ny CRI API dia naorina amin'ny fotoana fampandehanana isan-karazany, mba hahafahan'ny mpampiasa misafidy ny fotoana fampandehanana izay safidiny.

Inona no atao hoe CNI?

Project CNI is a famaritana handamina vahaolana amin'ny tambazotra manerantany ho an'ny container Linux. Ankoatra izany, dia ahitana plugins, tompon'andraikitra amin'ny asa isan-karazany rehefa manangana tambajotra pod. Ny plugin CNI dia rakitra azo tanterahana izay mifanaraka amin'ny famaritana (hiresaka momba ny plugins sasany eto ambany isika).

Fanomezana zana-tambajotra ho an'ny nodes mba hanomezana adiresy IP ho an'ny pods

Satria ny pod tsirairay ao anaty cluster dia tsy maintsy manana adiresy IP, zava-dehibe ny hahazoana antoka fa tokana io adiresy io. Izany dia azo amin'ny alalan'ny fanomezana ny node tsirairay subnet tsy manam-paharoa, izay avy eo ny pods amin'io node nomena adiresy IP avy eo.

Node IPAM Controller

rehefa nodeipam nandalo ho mari-pamantarana saina --controllers kube-controller-manager, dia manome subnet misaraka (podCIDR) ho an'ny node tsirairay avy amin'ny cluster CIDR (izany hoe ny isan'ny adiresy IP ho an'ny tambajotra cluster). Satria tsy mifanindry ireo podCIDR ireo, dia azo atao ny manome adiresy IP tokana ny pod tsirairay.

Ny node Kubernetes dia omena podCIDR rehefa misoratra anarana amin'ny cluster. Raha hanova ny podCIDR amin'ny nodes dia mila manafoana azy ireo ianao ary manoratra azy indray avy eo, manao fanovana mifanaraka amin'ny rafitra fanaraha-maso Kubernetes eo anelanelany. Azonao atao ny mampiseho ny podCIDR amin'ny node mampiasa ity baiko manaraka ity:

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

Kubelet, container runtime ary CNI plugins: ny fomba fiasan'izy rehetra

Ny fandrindrana ny pod isaky ny node dia mitaky dingana fanomanana maro. Amin'ity fizarana ity dia hifantoka amin'ireo izay mifandray mivantana amin'ny fametrahana tambajotra pod aho.

Ny fandrindrana ny pod amin'ny node iray dia miteraka ireto hetsika manaraka ireto:

Ahoana no ahazoan'ny pod Kubernetes adiresy IP?

FAQ: Architecture of Containerd CRI plugins.

Fifandraisana eo amin'ny fampandehanana container sy ny plugins CNI

Ny mpamatsy tambajotra tsirairay dia manana ny plugin CNI azy manokana. Ny fotoana fampandehanan'ny kaontenera dia mampandeha azy io handrindrana ny tambajotra ho an'ny pod rehefa manomboka. Raha ny containerd, ny plugin CNI dia navoakan'ny plugin Containerd CRI.

Ankoatra izany, ny mpamatsy tsirairay dia manana ny solontenany manokana. Apetraka amin'ny node Kubernetes rehetra izy io ary tompon'andraikitra amin'ny fandrindrana ny tambazotran'ny pods. Ity mpandraharaha ity dia tafiditra ao amin'ny config CNI na mamorona azy tsy miankina amin'ny node. Ny config dia manampy ny CRI plugin mametraka izay CNI plugin hiantso.

Ny toerana misy ny config CNI dia azo amboarina; amin'ny alΓ lan'ny default dia ao /etc/cni/net.d/<config-file>. Tompon'andraikitra amin'ny fametrahana plugins CNI isaky ny node cluster. Ny toerana misy azy ireo koa dia azo amboarina; lahatahiry default - /opt/cni/bin.

Rehefa mampiasa containerd dia azo apetraka ao amin'ny fizarana ny lalana ho an'ny config sy binaries plugin [plugins.Β«io.containerd.grpc.v1.criΒ».cni] Π² containerd configuration file.

Koa satria mampiasa Flannel ho mpamatsy tambajotra izahay, andao hiresaka kely momba ny fametrahana azy:

  • Ny Flanneld (Daemon Flannel) dia matetika napetraka ao anaty cluster ho DaemonSet miaraka install-cni toy ny init container.
  • Install-cni miteraka Takelaka data CNI (/etc/cni/net.d/10-flannel.conflist) amin'ny node tsirairay.
  • Flanneld dia mamorona fitaovana vxlan, maka ny metadata amin'ny tambajotra avy amin'ny mpizara API, ary manara-maso ny fanavaozana pod. Rehefa noforonina izy ireo dia mizara lalana amin'ny pods rehetra manerana ny cluster.
  • Ireo lalana ireo dia mamela ny pods hifampiresaka amin'ny alΓ lan'ny adiresy IP.

Raha mila fampahalalana bebe kokoa momba ny asan'ny Flannel aho dia manoro hevitra ny hampiasa ny rohy amin'ny faran'ny lahatsoratra.

Ity ny kisary momba ny fifandraisana misy eo amin'ny plugin Containerd CRI sy ny plugins CNI:

Ahoana no ahazoan'ny pod Kubernetes adiresy IP?

Araka ny hitanao etsy ambony, ny kubelet dia miantso ny Containerd CRI plugin mba hamoronana ny pod, izay avy eo dia miantso ny CNI plugin hanitsy ny tambajotran'ny pod. Amin'ny fanaovana izany, ny plugin CNI an'ny mpamatsy tambajotra dia miantso ireo plugins CNI fototra hafa mba handrindrana ny lafiny samihafa amin'ny tambajotra.

Fifandraisana eo amin'ny plugins CNI

Misy plugins CNI isan-karazany izay ny asany dia manampy amin'ny fametrahana fifandraisana amin'ny tambajotra eo amin'ny kaontenera ao amin'ny mpampiantrano. Hiresaka momba ny telo amin’izy ireo ity lahatsoratra ity.

CNI plugin Flannel

Rehefa mampiasa Flannel ho mpamatsy tambajotra dia miantso ny singa Containerd CRI CNI plugin Flannelmampiasa ny fichier configuration 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
      }
    }
  ]
}

Ny plugin Flannel CNI dia miasa miaraka amin'ny Flanneld. Mandritra ny fanombohana, i Flanneld dia maka podCIDR sy antsipiriany hafa mifandraika amin'ny tambajotra avy amin'ny mpizara API ary mitahiry azy ireo ao anaty rakitra. /run/flannel/subnet.env.

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

Ny plugin Flannel CNI dia mampiasa angona avy amin'ny /run/flannel/subnet.env hanamboatra sy hiantso ny plugin CNI bridge.

CNI plugin Bridge

Ity plugin ity dia antsoina amin'ny fanamafisana manaraka:

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

Rehefa nantsoina voalohany izy dia mamorona tetezana Linux miaraka amin'ny Β«nameΒ»: Β«cni0Β», izay voalaza ao amin'ny config. Avy eo dia misy mpivady veth noforonina ho an'ny pod tsirairay. Ny tendrony iray dia mifandray amin'ny anaran'ny tambajotran'ny kaontenera, ny iray hafa dia tafiditra ao amin'ny tetezana Linux amin'ny tambajotra mpampiantrano. CNI plugin Bridge mampifandray ny kaontenera mpampiantrano rehetra amin'ny tetezana Linux amin'ny tambajotra mpampiantrano.

Rehefa vita ny fametrahana ny mpivady veth, ny Bridge plugin dia miantso ny IPAM CNI plugin host-local. Ny karazana plugin IPAM dia azo amboarina ao amin'ny config CNI izay ampiasain'ny plugin CRI hiantso ny plugin Flannel CNI.

Plugins IPAM CNI eo an-toerana

Tetezana CNI miantso mpampiantrano IPAM plugin CNI miaraka amin'ny configuration manaraka:

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

Plugin IPAM Host-toerana (IP Aakanjo Mfitantanana - fitantanana adiresy IP) mamerina ny adiresy IP ho an'ny kaontenera avy amin'ny subnet ary mitahiry ny IP voatokana amin'ny mpampiantrano ao amin'ny lahatahiry voatondro ao amin'ny fizarana dataDir - /var/lib/cni/networks/<network-name=cni0>/<ip>. Ity rakitra ity dia misy ny ID ny kaontenera nomena ity adiresy IP ity.

Rehefa miantso ny plugin IPAM host-local dia mamerina ireto angona manaraka ireto:

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

famintinana

Kube-controller-manager dia manome podCIDR ho an'ny node tsirairay. Ny pods tsirairay dia mahazo adiresy IP avy amin'ny habaka adiresy ao amin'ny sehatra podCIDR voatokana. Satria tsy mifanindry ny podCIDRs ny node, dia mahazo adiresy IP tokana ny pods rehetra.

Ny mpitantana kluster Kubernetes dia manamboatra sy mametraka ny kubelet, ny fotoana fampandehanana ny container, ny mpandraharaha mpamatsy tambajotra, ary mandika ny plugins CNI amin'ny node tsirairay. Mandritra ny fanombohana dia mamorona config CNI ny mpandraharaha mpamatsy tambajotra. Rehefa voalahatra amin'ny node ny pod iray, dia miantso ny plugin CRI ny kubelet mba hamoronana azy. Manaraka, raha containerd no ampiasaina, ny Containerd CRI plugin dia miantso ny CNI plugin voatondro ao amin'ny CNI config mba handrindrana ny tambajotra pod. Vokatr'izany dia mahazo adiresy IP ny pod.

Nila fotoana kely aho vao nahatakatra ny haingo sy ny nuance rehetra amin'ireo fifandraisana rehetra ireo. Manantena aho fa hanampy anao hahatakatra bebe kokoa ny fomba fiasan'i Kubernetes ity traikefa ity. Raha diso aho na inona na inona dia mifandraisa amiko amin'ny Twitter na amin'ny adiresy [email voaaro]. Aza misalasala manatona raha te hiresaka momba ny lafiny amin'ity lahatsoratra ity ianao na zavatra hafa. Tiako ny miresaka aminao!

soratra masina

Kaontenera sy tambajotra

Ahoana ny fiasan'ny Flannel?

CRI sy CNI

PS avy amin'ny mpandika teny

Vakio ihany koa ao amin'ny bilaoginay:

Source: www.habr.com

Add a comment