Fa'afefea ona maua e se pod i Kubernetes se tuatusi IP

Manatua. fa'aliliu.: O lenei tusiga, na tusia e se inisinia SRE mai LinkedIn, o loʻo faʻamatala auiliili e uiga i togafiti i totonu i Kubernetes - sili atu, le fegalegaleaiga a CRI, CNI ma kube-apiserver - e tupu pe a manaʻomia le tuʻuina atu o le isi pod se tuatusi IP.

O se tasi o tulaga manaʻomia Fa'ata'ita'iga feso'ota'iga Kubernetes e tatau ona i ai i pod ta'itasi lana tuatusi IP ma so'o se isi fo'i i totonu o le fuifui e tatau ona mafai ona fa'afeso'ota'i i lena tuatusi. E tele fesoʻotaʻiga "tagata e tuʻuina atu" (Flannel, Calico, Canal, ma isi) e fesoasoani i le faʻatinoina o lenei faʻataʻitaʻiga fesoʻotaʻiga.

Ina ua ou amata galue ma Kubernetes, e leʻi manino atoatoa ia te aʻu pe faʻafefea ona maua e pods a latou tuatusi IP. E tusa lava pe i ai se malamalamaaga i le auala na faʻaogaina ai vaega taʻitasi, sa faigata ona mafaufauina o loʻo galulue faʻatasi. Mo se faʻataʻitaʻiga, na ou iloa pe o le a le CNI plugins mo, ae ou te leʻi iloa pe faʻafefea tonu ona taʻua. O le mea lea, na ou filifili ai e tusi lenei tusiga e faʻasoa ai le malamalama e uiga i vaega eseese o fesoʻotaʻiga ma pe faʻafefea ona latou galulue faʻatasi i totonu o le Kubernetes cluster, lea e mafai ai e pod taʻitasi ona maua lana lava tuatusi IP tulaga ese.

E 'ese'ese auala e fa'atulaga ai feso'ota'iga i Kubernetes, e pei lava o lo'o i ai filifiliga ta'avale eseese mo koneteina. O lenei lomiga o le a faʻaaogaina Fululanu e fa'atulaga se feso'ota'iga i totonu o se fuifui, ma o se si'osi'omaga fa'atinoina - Containerd. O loʻo ou faia foi le manatu e te iloa le faʻaogaina o fesoʻotaʻiga i le va o koneteina, o lea o le a naʻo loʻu paʻi atu i ai mo sina taimi.

O nisi manatu faavae

Containers and the Network: Ose Va'aiga Aotelega

E tele fa'asalalauga lelei i luga ole Initaneti o lo'o fa'amatalaina ai le auala e feso'ota'i ai koneteina i luga ole laiga. O le mea lea, o le a ou tuʻuina atu naʻo se faʻamatalaga lautele o mataupu faavae ma faʻatapulaʻa aʻu i se tasi auala, lea e aofia ai le fatuina o se alalaupapa Linux ma faʻapipiʻi afifi. O faʻamatalaga e le o iai, talu ai o le autu o le upega tafaʻilagi lava ia e tatau ona iai se tala ese. O feso'ota'iga i nisi fa'asalalauga fa'apitoa ma fa'aa'oa'oga o le a tu'uina atu i lalo.

Container i luga o le tasi talimalo

O se tasi o auala e faʻatulaga ai fesoʻotaʻiga e ala i tuatusi IP i le va o pusa o loʻo taʻavale i luga o le talimalo e tasi e aofia ai le fatuina o se alalaupapa Linux. Mo lenei faʻamoemoe, o masini komepiuta e faia i Kubernetes (ma Docker) veth (virtual ethernet). O le tasi pito o le masini veth e feso'ota'i i le igoa o feso'ota'iga a le koneteina, o le isi i alalaupapa Linux i luga ole upega tafa'ilagi.

O koneteina uma i luga o le talimalo e tasi e tasi le pito o le veth e fesoʻotaʻi i se alalaupapa e mafai ai ona fesoʻotaʻi le tasi i le isi e ala i tuatusi IP. O le alalaupapa Linux e iai fo'i se tuatusi IP ma e fai ma faitoto'a mo femalaga'iga e alu i fafo mai le pusa ua fa'atatau mo isi pona.

Fa'afefea ona maua e se pod i Kubernetes se tuatusi IP

Container i luga o 'au eseese

O le faʻapipiʻiina o paʻu o se tasi auala e mafai ai e pusa i luga o nodes eseese ona fesoʻotaʻi ma le tasi ma le isi e faʻaaoga ai tuatusi IP. I Flannel, tekinolosi e nafa ma lenei avanoa. vxlan, lea e "faapipii" le uluai pepa i totonu o se pusa UDP ona auina atu lea i lona taunuuga.

I se fuifui Kubernetes, e fau ai e Flannel se masini vxlan ma fa'afou le laulau ala i node ta'itasi e tusa ai. O afifi ta'itasi e fa'atatau mo se atigipusa i luga o se 'au'aunaga 'ese'ese e ui atu i le masini vxlan ma o lo'o fa'apipi'iina i totonu o se pusa UDP. A o'o i le taunu'uga, o le fa'aputu fa'amomoli e aumai ma tu'u atu i le pusa e mana'omia.

Fa'afefea ona maua e se pod i Kubernetes se tuatusi IP
Manatua: O se tasi lea o auala e faʻatulaga ai fesoʻotaʻiga fesoʻotaʻiga i le va o pusa.

O le a le CRI?

CRI (Container Runtime Interface) o se fa'apipi'i lea e mafai ai e kubelet ona fa'aogaina ni si'osi'omaga taimi fa'agaioia pusa. O le CRI API ua fausia i taimi eseese, ina ia mafai e tagata faʻaoga ona filifili le taʻaloga o latou filifiliga.

O le a le CNI?

Poloketi CNI a fa'amatalaga e fa'atulaga se fofo feso'ota'iga lautele mo pusa Linux. E le gata i lea, e aofia ai plugini, e nafa ma galuega eseese pe a faʻatulagaina se fesoʻotaʻiga pod. O le CNI plugin o se faila faʻapipiʻi e ogatasi ma faʻamatalaga (o le a matou talanoaina nisi faʻapipiʻi i lalo).

Fa'asoaina o subnets i nodes mo le tu'uina atu o tuatusi IP i pods

Talu ai e tatau ona i ai se tuatusi IP ta'itasi i totonu o se fuifui, e taua le fa'amautinoa e tulaga ese lenei tuatusi. E maua lenei mea e ala i le tuʻuina atu o node taʻitasi se subnet tulaga ese, lea e tuʻuina atu ai pusa i luga o lena node tuatusi IP.

Node IPAM Pule

Pe a nodeipam pasi e fai ma fa'ailoga fu'a --controllers kube-pule-pule, na te tuʻuina atu se isi subnet (podCIDR) i node taʻitasi mai le CIDR faʻapipiʻi (o lona uiga, le tele o tuatusi IP mo le fesoʻotaʻiga faʻapipiʻi). Talu ai o nei podCIDRs e le fa'afefeteina, e mafai ai mo pod ta'itasi ona tu'uina atu se tuatusi IP tulaga ese.

O le node Kubernetes e tu'uina atu i le podCIDR pe a fa'aulu fa'atasi ma le fuifui. Ina ia suia le podCIDR o nodes, e te manaʻomia le faʻateʻaina o latou ma toe resitalaina, faia suiga talafeagai i le Kubernetes control layer configuration i le va. E mafai ona e faʻaalia le podCIDR o se node e faʻaaoga ai le poloaiga lenei:

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

Kubelet, container runtime ma CNI plugins: faʻafefea ona aoga uma

O le fa'atulagaina o se pod i le node e aofia ai le tele o laasaga sauniuni. I lenei vaega, o le a ou taulaʻi atu naʻo i latou e fesoʻotaʻi saʻo i le faʻatulagaina o se upega tafaʻilagi.

O le fa'atulagaina o se pusa i se pona patino e fa'aosoina ai le faasologa o mea tutupu:

Fa'afefea ona maua e se pod i Kubernetes se tuatusi IP

Fesoasoani: Fausiaina o Containerd CRI plugins.

Feso'ota'iga i le va o le ta'avale pusa ma fa'apipi'i CNI

O lo'o iai so'o se 'au'aunaga feso'ota'iga a latou lava fa'apipi'i CNI. Ole taimi ole koneteina e fa'agasolo ai e fa'atulaga le feso'ota'iga mo le pod pe a amata. I le tulaga o containerd, o le CNI plugin ua faʻalauiloaina e le plugin Containerd CRI.

E le gata i lea, e tofu le kamupani ma lana lava sui. O lo'o fa'apipi'iina i nodes uma Kubernetes ma e nafa ma le fa'atulagaina o feso'otaiga o pods. O lenei sooupu e aofia ai ma le CNI config pe faʻatupu tutoatasi i luga o le node. E fesoasoani le config i le CRI plugin seti lea CNI plugin e valaau.

Le nofoaga o le CNI config e mafai ona faʻatulagaina; i le faaletonu o loo i totonu /etc/cni/net.d/<config-file>. E nafa fo'i fa'atonu fa'aputuga ma le fa'apipi'iina o fa'apipi'i CNI i node ta'itasi. O lo latou nofoaga e mafai foi ona faʻatulagaina; fa'ailoga fa'aletonu - /opt/cni/bin.

A faʻaaogaina containerd, o auala mo le plugin config ma binaries e mafai ona seti i le vaega [plugins.«io.containerd.grpc.v1.cri».cni] в containerd configuration faila.

Talu ai o loʻo matou faʻaogaina le Flannel e fai ma matou fesoʻotaʻiga fesoʻotaʻiga, seʻi o tatou talanoa itiiti e uiga i le faʻatulagaina:

  • Flanneld (Flannel's daemon) e masani ona faʻapipiʻiina i se fuifui e pei o se DaemonSet ma install-cni e pei init container.
  • Install-cni foafoaina CNI faila faila (/etc/cni/net.d/10-flannel.conflist) i node taitasi.
  • Fausia e Flanneld se masini vxlan, toe aumai metadata fesoʻotaʻiga mai le API server, ma mataʻituina faʻafouga pod. A'o fa'atupuina, na te fa'asoa atu auala i pusi uma ile fuifui.
  • O nei auala e mafai ai e pods ona fesoʻotaʻi ma isi e ala i tuatusi IP.

Mo nisi faʻamatalaga auiliili e uiga i le galuega a Flannel, ou te fautuaina le faʻaogaina o sootaga i le pito o le tusiga.

O le ata lenei o le fegalegaleaiga i le va o le Containerd CRI plugin ma le CNI plugins:

Fa'afefea ona maua e se pod i Kubernetes se tuatusi IP

E pei ona mafai ona e vaʻai i luga, e taʻua e le kubelet le Containerd CRI plugin e fatu ai le pod, ona valaʻau lea o le CNI plugin e faʻapipiʻi le fesoʻotaʻiga a le pod. I le faia o lea mea, o le CNI plugin a le kamupani e tuʻuina atu fesoʻotaʻiga e valaʻau ai isi masini CNI autu e faʻapipiʻi vaega eseese o le fesoʻotaʻiga.

Fegalegaleaiga i le va CNI plugins

O loʻo i ai faʻapipiʻi eseese CNI o latou galuega o le fesoasoani lea i le setiina o fesoʻotaʻiga fesoʻotaʻiga i le va o koneteina i luga o le talimalo. O le a talanoaina i lenei mataupu le tolu o na mea.

CNI plugin Flannel

A fa'aogaina le Flannel e fai ma feso'ota'iga, e vala'au le vaega o le Containerd CRI CNI plugin Flannelfa'aaoga le faila fa'aopoopo 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
      }
    }
  ]
}

O le Flannel CNI plugin e galue faʻatasi ma Flanneld. I le amataga, e aumai e Flanneld le podCIDR ma isi faʻamatalaga e fesoʻotaʻi fesoʻotaʻiga mai le API server ma faʻasaoina i se faila /run/flannel/subnet.env.

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

O le Flannel CNI plugin faʻaaogaina faʻamatalaga mai /run/flannel/subnet.env e configure ma valaau le CNI alalaupapa plugin.

CNI plugin Bridge

O lenei fa'apipi'i e ta'ua i le fa'atulagaga nei:

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

A valaʻau mo le taimi muamua, e fatuina se alalaupapa Linux ma «name»: «cni0», lea o loʻo faʻaalia i le config. Ona faia lea o se veth pair mo pod taitasi. O le tasi pito o loʻo fesoʻotaʻi atu i le upega tafaʻilagi a le koneteina, o le isi o loʻo aofia i le alalaupapa Linux i luga o le upega tafaʻilagi. CNI plugin Bridge faʻafesoʻotaʻi pusa talimalo uma i se alalaupapa Linux i luga o le upega tafaʻilagi.

A mae'a le fa'atulagaina o le veth pair, ua ta'ua e le Bridge plugin le IPAM CNI plugin host-local. E mafai ona fa'atulagaina le ituaiga fa'apipi'i IPAM i le fa'aoga CNI lea e fa'aoga e le fa'apipi'i CRI e fa'aigoa ai le fa'apipi'i Flannel CNI.

Host-fa'alotoifale IPAM CNI plugins

Bridge CNI valaau talimalo i le lotoifale IPAM plugin CNI fa'atasi ai ma le fa'atulagaga nei:

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

Host-fa'apitonu'u IPAM plugin (IP Atamaʻitaʻi Mpulega - pulega o tuatusi IP) toe faafoi le tuatusi IP mo le pusa mai le subnet ma teu le IP tuʻufaʻatasia i luga o le talimalo i totonu o le lisi o loʻo faʻamaonia i le vaega. dataDir - /var/lib/cni/networks/<network-name=cni0>/<ip>. O lenei faila o loʻo i ai le ID o le pusa o loʻo tuʻuina atu i ai lenei tuatusi IP.

Pe a valaʻau le faʻapipiʻi IPAM faʻapitonuʻu, e toe faʻafoʻi mai faʻamatalaga nei:

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

Aotelega

Kube-pule-pule e tofia se podCIDR i node taʻitasi. O pona ta'itasi e maua tuatusi IP mai le avanoa o le tuatusi ile va'aiga o le podCIDR. Talu ai e le felavasa'i fo'i 'podCIDRs, e maua uma tuatusi IP tulaga ese.

O le Kubernetes cluster administrator e fetuutuunai ma fa'apipi'i le kubelet, container runtime, network provider agent, ma kopi le CNI plugins i node taitasi. I le taimi o le amataga, e fa'atupuina e le sui o lo'o tu'uina atu feso'ota'iga se CNI config. A fa'atulaga se pod i se node, e vala'au e le kubelet le fa'apipi'i CRI e fai ai. Soso'o, afai e fa'aogaina containerd, o le Containerd CRI plugin e vala'au i le CNI plugin fa'amaoti i le CNI config e fa'atulaga ai le feso'otaiga a le pod. O se taunuuga, e maua e le pod se tuatusi IP.

Na umi se taimi ou te malamalama ai i mea faʻapitoa ma faʻamatalaga o nei fegalegaleaiga uma. Ou te faʻamoemoe o le a fesoasoani lenei faʻamatalaga ia te oe e te malamalama atili ai pe faʻafefea ona galue Kubernetes. Afai ou te sese i se mea, fa'amolemole fa'afeso'ota'i a'u ile Twitter pe i le tuatusi [imeli puipuia]. Lagona le saoloto e aapa atu pe e te manaʻo e talanoaina vaega o lenei tusiga poʻo se isi lava mea. Ou te fiafia e talanoa ma oe!

mau

Container ma feso'ota'iga

E fa'afefea ona galue Flannel?

CRI ma CNI

PS mai faaliliu

Faitau foi i la matou blog:

puna: www.habr.com

Faaopoopo i ai se faamatalaga