Kubernetes pod e fumana aterese ea IP joang?

Hlokomela. fetolela.: Sengoliloeng sena, se ngotsoeng ke moenjiniere oa SRE ho tloha LinkedIn, o bua ka ho qaqileng ka boselamose ba ka hare ho Kubernetes - ka ho toba, ho sebelisana ha CRI, CNI le kube-apiserver - ho etsahala ha pod e latelang e hloka ho fuoa aterese ea IP.

E 'ngoe ea litlhoko tsa mantlha Mohlala oa marang-rang oa Kubernetes ke hore pod e 'ngoe le e 'ngoe e tlameha ho ba le aterese ea eona ea IP le pod efe kapa efe e ka har'a sehlopha e tlameha ho khona ho ikopanya le eona atereseng eo. Ho na le "bafani" ba bangata ba marang-rang (Flannel, Calico, Canal, joalo-joalo) ba thusang ho kenya ts'ebetsong mokhoa ona oa marang-rang.

Ha ke qala ho sebetsa le Kubernetes, ke ne ke sa hlake ka botlalo hore na li-pods li fumana liaterese tsa tsona tsa IP joang. Esita le ka kutloisiso ea hore na likaroloana ka bomong li sebetsa joang, ho ne ho le thata ho nahana hore li sebetsa hammoho. Mohlala, ke ne ke tseba hore na li-plugins tsa CNI li etselitsoe eng, empa ke ne ke sa tsebe hantle hore na li bitsoa joang. Ka hona, ke ile ka etsa qeto ea ho ngola sehlooho sena ho arolelana tsebo mabapi le likarolo tse sa tšoaneng tsa marang-rang le kamoo li sebetsang hammoho kateng sehlopheng sa Kubernetes, se lumellang pod e 'ngoe le e' ngoe ho fumana aterese ea eona e ikhethang ea IP.

Ho na le mekhoa e fapaneng ea ho hlophisa marang-rang ho Kubernetes, joalo ka ha ho na le likhetho tse fapaneng tsa nako ea ho sebetsa bakeng sa lijana. Sengoliloeng sena se tla sebelisoa Flannel ho hlophisa marang-rang ka sehlopha, le joalo ka tikoloho e ka phethisoang - E kolokisitsoe. Ke boetse ke etsa maikutlo a hore oa tseba hore na marang-rang pakeng tsa li-container li sebetsa joang, kahoo ke tla e ama hakhutšoanyane feela bakeng sa moelelo oa taba.

Likhopolo tse ling tsa motheo

Lijana le Marang-rang: Kakaretso e Khutšoanyane

Ho na le likhatiso tse ngata tse ntle haholo Inthaneteng tse hlalosang hore na lik'hontheinara li buisana joang ka marang-rang. Ka hona, ke tla fana ka kakaretso e akaretsang ea mehopolo ea mantlha mme ke ipehele mokhoa o le mong, o kenyelletsang ho theha borokho ba Linux le liphutheloana tse kentsoeng. Lintlha ha li lumelloe, kaha sehlooho sa marang-rang sa li-container ka boeona se lokeloa ke sengoloa se arohaneng. Lihokelo tsa lingoliloeng tse nang le temohisiso le thuto li tla fanoa ka tlase.

Lijana ho moamoheli a le mong

Tsela e 'ngoe ea ho hlophisa puisano ka liaterese tsa IP pakeng tsa lijana tse sebetsang sebakeng se le seng ke ho theha borokho ba Linux. Bakeng sa morero ona, lisebelisoa tsa sebele li etsoa ho Kubernetes (le Docker) veth (virtual ethernet). Karolo e 'ngoe ea sesebelisoa sa veth e hokahana le sebaka sa mabitso sa marang-rang sa setshelo, se seng ho Linux borokho mocheng oa marang-rang.

Lijana tsohle tse sebakeng se le seng li na le pheletso e le 'ngoe ea veth e hokahantsoeng le borokho boo ka bona ba ka buisanang ka liaterese tsa IP. Borokho ba Linux bo boetse bo na le aterese ea IP mme bo sebetsa e le monyako oa ho tsoa ho sephethephethe ho tsoa ho li-pods tse reretsoeng li-node tse ling.

Kubernetes pod e fumana aterese ea IP joang?

Li-container ho li-host tse fapaneng

Pakete encapsulation ke mokhoa o le mong o lumellang lijana tse libakeng tse fapaneng ho buisana li sebelisa liaterese tsa IP. Ho Flannel, theknoloji e ikarabella bakeng sa monyetla ona. vxlan, e “phuthelang” pakete ea pele ka har’a pakete ea UDP ebe e e romela moo e eang teng.

Sehlopheng sa Kubernetes, Flannel e theha sesebelisoa sa vxlan mme e nchafatsa tafole ea litsela sebakeng se seng le se seng ka nepo. Pakete e 'ngoe le e' ngoe e reretsoeng setshelo ho moamoheli ea fapaneng e feta sesebelisoa sa vxlan 'me e kentsoe ka har'a pakete ea UDP. Sebakeng seo, sephutheloana se entsoeng sehlaheng se ntšoa 'me se fetisetsoa ho pod e lakatsehang.

Kubernetes pod e fumana aterese ea IP joang?
Tlhokomeliso: Ena ke mokhoa o le mong feela oa ho hlophisa puisano ea marang-rang lipakeng tsa lijana.

CRI ke eng?

CRI (Sehokelo sa Runtime sa Setshelo) ke plugin e lumellang kubelet ho sebelisa libaka tse fapaneng tsa nako ea ho sebetsa. CRI API e hahiloe ka linako tse fapaneng tsa ho sebetsa, kahoo basebelisi ba ka khetha nako ea ho sebetsa eo ba e ratang.

CNI ke eng?

Morero oa CNI ke tlhaloso ho hlophisa tharollo ea marang-rang ea bokahohle bakeng sa lijana tsa Linux. Ho phaella moo, e kenyelletsa li-plugins, e ikarabellang bakeng sa lits'ebetso tse fapaneng ha o theha marang-rang a pod. Plugin ea CNI ke faele e sebetsang e lumellanang le litlhaloso (re tla tšohla li-plugins tse ka tlase).

Kabo ea li-subnet ho li-node bakeng sa ho abela liaterese tsa IP ho li-pods

Kaha pod e 'ngoe le e' ngoe ka har'a sehlopha e tlameha ho ba le aterese ea IP, ke habohlokoa ho netefatsa hore aterese ena e ikhetha. Sena se finyelloa ka ho abela node ka 'ngoe subnet e ikhethang, eo ho eona li-pods tse sebakeng seo li abeloang liaterese tsa IP.

Node IPAM Controller

Ha nodeipam e fetisitsoe joalo ka paramente ea folakha --controllers molaoli oa ho be-controller, e fana ka subnet e arohaneng (podCIDR) ho node ka 'ngoe ho tloha sehlopheng sa CIDR (ke hore, mefuta e mengata ea liaterese tsa IP bakeng sa marang-rang a lihlopha). Kaha li-podCIDR tsena ha li kopane, hoa khonahala hore pod ka 'ngoe e fuoe aterese e ikhethang ea IP.

Node ea Kubernetes e abeloa podCIDR ha qalong e ngolisoa le sehlopha. Ho fetola li-podCIDR tsa li-node, u lokela ho li hlakola 'me u li ngolise hape, ho etsa liphetoho tse nepahetseng ho tlhophiso ea lera la taolo ea Kubernetes lipakeng. U ka bonts'a podCIDR ea node u sebelisa taelo e latelang:

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

Kubelet, nako ea ho sebetsa ea setshelo le li-plugins tsa CNI: tsohle li sebetsa joang

Ho hlophisa pod ka node ho kenyelletsa mehato e mengata ea ho itokisa. Karolong ena, ke tla lebisa tlhokomelo feela ho tse amanang ka ho toba le ho theha marang-rang a pod.

Ho hlophisa pod ho node e itseng ho baka letoto le latelang la liketsahalo:

Kubernetes pod e fumana aterese ea IP joang?

Thuso: Mehaho ea li-plugins tsa Containerd CRI.

Tšebelisano lipakeng tsa nako ea ho sebetsa ea setshelo le li-plugins tsa CNI

Mofani e mong le e mong oa marang-rang o na le plugin ea hae ea CNI. Nako ea ho sebetsa ea setshelo e e tsamaisa ho lokisa marang-rang bakeng sa pod ha e qala. Tabeng ea setshelo, plugin ea CNI e hlahisoa ke plugin CRI e hlophisitsoeng.

Ho feta moo, mofani e mong le e mong o na le moemeli oa hae. E kentsoe litsing tsohle tsa Kubernetes 'me e ikarabella bakeng sa tlhophiso ea marang-rang ea li-pods. Moemeli enoa o kenyelelitsoe le CNI config kapa o iketsetsa ka boithaopo node. Setlhophiso se thusa plugin ea CRI hore e be le plugin ea CNI eo u ka e bitsang.

Sebaka sa CNI config se ka etsoa; ka kamehla e kene /etc/cni/net.d/<config-file>. Batsamaisi ba Cluster le bona ba na le boikarabello ba ho kenya li-plugins tsa CNI sebakeng se seng le se seng sa sehlopha. Sebaka sa bona se boetse sea khoneha; lenane la kamehla - /opt/cni/bin.

Ha u sebelisa setshelo, litsela tsa plugin config le binaries li ka behoa karolong [plugins.«io.containerd.grpc.v1.cri».cni] в faele ea tlhophiso e kentsoeng.

Kaha re sebelisa Flannel joalo ka mofani oa marang-rang, ha re bue hanyane ka ho e theha:

  • Flanneld (Flannel's daemon) hangata e kenngoa ka har'a sehlopha joalo ka DaemonSet e nang le install-cni joalo ka init setshelo.
  • Install-cni bopa Faele ea tlhophiso ea CNI (/etc/cni/net.d/10-flannel.conflist) sebakeng se seng le se seng.
  • Flanneld e theha sesebelisoa sa vxlan, e fumana metadata ea marang-rang ho tsoa ho seva sa API, 'me e lekola lintlafatso tsa pod. Ha li ntse li bōptjoa, e tsamaisa litsela ho li-pods tsohle ho pholletsa le sehlopha.
  • Litsela tsena li lumella li-pods ho buisana ka liaterese tsa IP.

Bakeng sa tlhaiso-leseling e batsi mabapi le mosebetsi oa Flannel, ke khothaletsa ho sebelisa lihokela qetellong ea sengoloa.

Mona ke setšoantšo sa tšebelisano lipakeng tsa plugin ea Containerd CRI le li-plugins tsa CNI:

Kubernetes pod e fumana aterese ea IP joang?

Joalo ka ha u bona kaholimo, kubelet e letsetsa Containerd CRI plugin ho theha pod, e bitsang plugin ea CNI ho lokisa marang-rang a pod. Ka ho etsa joalo, plugin ea CNI ea mofani oa marang-rang e bitsa li-plugins tse ling tsa mantlha tsa CNI ho hlophisa likarolo tse fapaneng tsa marang-rang.

Khokahano lipakeng tsa li-plugins tsa CNI

Ho na le li-plugins tse fapaneng tsa CNI tseo mosebetsi oa tsona e leng ho thusa ho theha puisano ea marang-rang lipakeng tsa lijana ho moamoheli. Sehlooho sena se tla tšohla tse tharo tsa tsona.

CNI plugin Flannel

Ha o sebelisa Flannel joalo ka mofani oa marang-rang, karolo ea Containerd CRI e letsa CNI plugin Flannelsebelisa faele ea tlhophiso ea 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
      }
    }
  ]
}

Plugin ea Flannel CNI e sebetsa hammoho le Flanneld. Nakong ea ho qala, Flanneld e fumana podCIDR le lintlha tse ling tse amanang le marang-rang ho tswa ho seva sa API ebe o li boloka faeleng. /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 e sebelisa data ho tsoa ho /run/flannel/subnet.env ho lokisa le ho letsetsa plugin ea borokho ea CNI.

CNI plugin Bridge

Plugin ena e bitsoa ka tlhophiso e latelang:

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

Ha e bitsoa ka lekhetlo la pele, e theha borokho ba Linux ka «name»: «cni0», e bontšitsoeng ho config. Ebe ho etsoa veth pair bakeng sa pod ka 'ngoe. Karolo e 'ngoe ea eona e hokahane le sebaka sa mabitso sa marang-rang sa setshelo, e' ngoe e kenyelelitsoe borokhong ba Linux ho netweke ea moamoheli. CNI plugin Bridge e hokahanya lijana tsohle tse amohelang borokho ba Linux ho netweke ea moamoheli.

Ha e qetile ho theha veth pair, plugin ea Bridge Bridge e bitsa plugin ea lehae ea IPAM CNI. Mofuta oa plugin oa IPAM o ka hlophisoa ho tlhophiso ea CNI eo plugin ea CRI e e sebelisang ho bitsa plugin ea Flannel CNI.

Li-plugins tsa lehae tsa IPAM CNI

Mehala ea Bridge CNI plugin ea lehae ea IPAM CNI ka tlhophiso e latelang:

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

plugin ea lehae ea IPAM (IP Aseaparo Mtsamaiso - taolo ea aterese ea IP) e khutlisa aterese ea IP bakeng sa setshelo ho tsoa subnet mme e boloka IP e fanoeng ho moamoheli bukeng e boletsoeng karolong. dataDir - /var/lib/cni/networks/<network-name=cni0>/<ip>. Faele ena e na le ID ea sets'oants'o seo aterese ena ea IP e abetsoeng ho sona.

Ha o letsetsa plugin ea IPAM ea lehae, e khutlisa lintlha tse latelang:

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

Kakaretso

Kube-controller-manager o fana ka podCIDR sebakeng se seng le se seng. Li-pods tsa node ka 'ngoe li fumana liaterese tsa IP ho tsoa sebakeng sa liaterese sebakeng se fanoeng sa podCIDR. Kaha li-podCIDR tsa nodes ha li kopane, li-pods kaofela li fumana liaterese tse ikhethang tsa IP.

Motsamaisi oa sehlopha sa Kubernetes o hlophisa le ho kenya kubelet, nako ea ho sebetsa ea setshelo, moemeli oa mofani oa marang-rang, 'me o kopitsa li-plugins tsa CNI sebakeng se seng le se seng. Nakong ea ho qala, moemeli oa mofani oa marang-rang o hlahisa tlhophiso ea CNI. Ha pod e reriloe ho node, kubelet e bitsa plugin ea CRI ho e etsa. Ka mor'a moo, haeba sekontiri se sebelisoa, plugin ea Containerd CRI e letsetsa plugin ea CNI e boletsoeng ho CNI config ho lokisa marang-rang a pod. Ka lebaka leo, pod e fumana aterese ea IP.

Ho ile ha nkuka nako hore ke utloisise lintho tse poteletseng le tse sa hlakang tsa litšebelisano tsena kaofela. Ke tšepa hore phihlelo ena e tla u thusa ho utloisisa hamolemo kamoo Kubernetes e sebetsang kateng. Haeba ke fositse ka eng kapa eng, ka kopo ikopanye le 'na ho Twitter kapa atereseng [imeile e sirelelitsoe]. Ikutloe u lokolohile ho ikopanya le uena haeba u ka rata ho buisana ka lintlha tsa sehlooho sena kapa eng kapa eng. Ke kopa ho qoqa le uena!

litšupiso

Lijana le marang-rang

Flannel e sebetsa joang?

CRI le CNI

PS ho tsoa ho mofetoleli

Bala hape ho blog ea rona:

Source: www.habr.com

Eketsa ka tlhaloso