Kumaha pod Kubernetes kéngingkeun alamat IP?

Catetan. narjamahkeun.: Artikel ieu, ditulis ku insinyur SRE ti LinkedIn, lebet kana detil ngeunaan magic batin di Kubernetes - leuwih tepat, interaksi CRI, CNI na kube-apiserver - éta lumangsung nalika pod salajengna perlu ditugaskeun alamat IP.

Salah sahiji sarat dasar Modél jaringan Kubernetes nyaeta unggal pod kudu boga alamat IP sorangan jeung sagala pod sejenna dina klaster kudu bisa ngahubungan eta di alamat nu. Aya loba jaringan "panyadia" (Flannel, Calico, Terusan, jsb) nu mantuan nerapkeun model jaringan ieu.

Nalika kuring mimiti damel sareng Kubernetes, éta henteu jelas pisan pikeun kuring kumaha persisna pod nampi alamat IP na. Malah ku pamahaman kumaha komponén individu functioned, éta hésé ngabayangkeun aranjeunna gawé bareng. Contona, kuring terang naon CNI plugins éta pikeun, tapi kuring teu boga pamanggih kumaha kahayang maranéhanana disebut. Ku alatan éta, kuring megatkeun pikeun nulis artikel ieu pikeun babagi pangaweruh ngeunaan rupa-rupa komponén jaringan jeung cara gawé babarengan dina klaster Kubernetes, nu ngamungkinkeun unggal pod pikeun meunangkeun alamat IP unik sorangan.

Aya sababaraha cara pikeun ngatur jaringan dina Kubernetes, sapertos aya pilihan runtime anu béda pikeun wadah. Ieu publikasi bakal ngagunakeun Flannel pikeun ngatur jaringan dina klaster, sareng salaku lingkungan anu tiasa dieksekusi - Wadahna. Kuring ogé nyieun asumsi yén anjeun terang kumaha jaringan antara wadahna jalan, jadi kuring ngan bakal nyabak eta sakeudeung, ngan pikeun konteks.

Sababaraha konsép dasar

Wadah sareng Jaringan: Ihtisar Singket

Aya seueur publikasi anu saé dina Internét anu ngajelaskeun kumaha wadahna saling komunikasi dina jaringan. Ku alatan éta, kuring ngan ukur masihan gambaran umum ngeunaan konsép dasar sareng ngawatesan diri kana hiji pendekatan, anu ngalibatkeun nyiptakeun sasak Linux sareng bungkusan encapsulating. Rincian dileungitkeun, sabab topik jaringan wadahna sorangan pantes janten tulisan anu misah. Tumbu ka sababaraha publikasi utamana wawasan jeung atikan bakal disadiakeun di handap.

Wadah dina hiji host

Salah sahiji cara pikeun ngatur komunikasi liwat alamat IP antara wadah anu ngajalankeun dina host anu sami ngalibatkeun nyiptakeun sasak Linux. Pikeun tujuan ieu, alat virtual dijieun dina Kubernetes (sareng Docker) veth (virtual ethernet). Hiji tungtung alat veth nyambung ka ngaranspasi jaringan wadahna urang, nu séjén pikeun sasak Linux dina jaringan host.

Kabéh peti dina host sarua boga hiji tungtung veth disambungkeun ka sasak ngaliwatan mana maranéhna bisa saling komunikasi via alamat IP. Jambatan Linux ogé ngagaduhan alamat IP sareng janten gateway pikeun lalu lintas kaluar tina pods anu ditujukeun pikeun titik anu sanés.

Kumaha pod Kubernetes kéngingkeun alamat IP?

Wadah on sarwa béda

Enkapsulasi pakét mangrupikeun salah sahiji metodeu anu ngamungkinkeun wadah dina titik anu béda pikeun saling komunikasi nganggo alamat IP. Di Flannel, téknologi tanggung jawab kana kasempetan ieu. vxlan, nu "ngabungkus" pakét aslina kana pakét UDP lajeng dikirim ka tujuanana.

Dina klaster Kubernetes, Flannel nyiptakeun alat vxlan sareng ngapdet tabel rute dina unggal titik anu sasuai. Unggal pakét dimaksudkeun pikeun wadahna dina host anu béda ngalangkungan alat vxlan sareng dibungkus dina pakét UDP. Di tempat tujuan, pakét anu disarangkeun diekstrak sareng diteruskeun ka pod anu dipikahoyong.

Kumaha pod Kubernetes kéngingkeun alamat IP?
Catetan: Ieu ngan hiji cara pikeun ngatur komunikasi jaringan antara wadah.

Naon CRI?

CRI (Kontainer Runtime Interface) mangrupakeun plugin anu ngamungkinkeun kubelet ngagunakeun lingkungan runtime wadahna béda. The CRI API diwangun kana rupa runtimes, jadi pamaké bisa milih runtime pilihan maranéhanana.

Naon CNI?

Proyék CNI eta ngawakilan spésifikasi pikeun ngatur solusi jaringan universal pikeun wadah Linux. Sajaba ti éta, kaasup plugins, jawab sagala rupa fungsi nalika nyetel jaringan pod. Plugin CNI mangrupikeun file anu tiasa dieksekusi anu sasuai sareng spésifikasi (urang bakal ngabahas sababaraha plugins di handap).

Alokasi subnet ka titik pikeun napelkeun alamat IP ka pods

Kusabab unggal pod dina klaster kudu boga alamat IP, hal anu penting pikeun mastikeun yén alamat ieu unik. Hal ieu dihontal ku nangtukeun unggal titik hiji subnet unik, ti ​​mana pods dina titik éta lajeng ditugaskeun alamat IP.

Node IPAM Controller

iraha nodeipam diliwatan salaku parameter bandéra --controllers kube-controller-manajer, eta allocates hiji subnet misah (podCIDR) ka unggal titik ti CIDR klaster (ie, rentang alamat IP pikeun jaringan klaster). Kusabab podCIDRs ieu teu tumpang tindih, janten mungkin pikeun tiap pod a dialokasikeun alamat IP unik.

Titik Kubernetes ditugaskeun podCIDR nalika mimitina didaptarkeun sareng kluster. Pikeun ngarobah podCIDR titik, Anjeun kudu deregister aranjeunna lajeng ulang ngadaptar aranjeunna, nyieun parobahan luyu kana konfigurasi lapisan kontrol Kubernetes di antara. Anjeun tiasa ningalikeun podCIDR tina titik nganggo paréntah di handap ieu:

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

Kubelet, wadahna runtime na CNI plugins: kumaha eta sadayana jalan

Ngajadwalkeun pod per node ngalibatkeun seueur léngkah persiapan. Dina bagian ieu, kuring baris difokuskeun ngan maranéhanana anu langsung patali jeung nyetel hiji jaringan pod.

Ngajadwalkeun pod ka titik anu tangtu memicu ranté kajadian ieu:

Kumaha pod Kubernetes kéngingkeun alamat IP?

FAQ: Arsitéktur of Containerd CRI plugins.

Interaksi antara runtime wadahna sareng plugins CNI

Unggal panyadia jaringan gaduh plugin CNI sorangan. Runtime wadahna ngajalankeun éta pikeun ngonpigurasikeun jaringan pikeun pod nalika ngamimitian. Dina kasus containerd, plugin CNI diluncurkeun ku plugin Wadah CRI.

Leuwih ti éta, unggal panyadia boga agén sorangan. Éta dipasang dina sadaya titik Kubernetes sareng tanggung jawab pikeun konfigurasi jaringan pods. agén ieu boh kaasup jeung config CNI atawa bebas nyieun eta dina node. config mantuan CRI plugin set nu CNI plugin nelepon.

Lokasi config CNI bisa ngaropéa; sacara standar aya dina /etc/cni/net.d/<config-file>. Pangurus klaster ogé tanggung jawab pikeun masang plugins CNI dina unggal titik klaster. lokasi maranéhanana ogé customizable; diréktori standar - /opt/cni/bin.

Nalika nganggo containerd, jalur pikeun konfigurasi plugin sareng binari tiasa disetél dina bagian éta [plugins.«io.containerd.grpc.v1.cri».cni] в file konfigurasi containerd.

Kusabab urang nganggo Flannel salaku panyadia jaringan, hayu urang ngobrol sakedik ngeunaan netepkeunana:

  • Flanneld (daemon Flannel) biasana dipasang dina klaster salaku DaemonSet sareng install-cni siga wadahna init.
  • Install-cni nyiptakeun file konfigurasi CNI (/etc/cni/net.d/10-flannel.conflist) dina unggal titik.
  • Flanneld nyieun alat vxlan, retrieves metadata jaringan tina server API, sarta monitor apdet pod. Nalika aranjeunna diciptakeun, éta nyebarkeun rute ka sadaya polong sapanjang kluster.
  • Rute ieu ngamungkinkeun pods pikeun saling komunikasi liwat alamat IP.

Kanggo inpo nu langkung lengkep ihwal karya Flannel, kuring nyarankeun ngagunakeun tautan dina tungtung tulisan.

Ieu diagram interaksi antara plugin Containerd CRI sareng plugins CNI:

Kumaha pod Kubernetes kéngingkeun alamat IP?

Sakumaha anjeun tiasa tingali di luhur, kubelet nyauran plugin Containerd CRI pikeun nyiptakeun pod, anu teras nyauran plugin CNI pikeun ngonpigurasikeun jaringan pod. Dina ngalakukeun kitu, plugin CNI panyadia jaringan nelepon plugins CNI inti lianna pikeun ngonpigurasikeun sagala rupa aspék jaringan.

Interaksi antara plugins CNI

Aya rupa-rupa plugins CNI anu tugasna pikeun mantuan nyetél komunikasi jaringan antara peti on host teh. Artikel ieu bakal ngabahas tilu di antarana.

CNI plugin Flannel

Lamun make Flannel salaku panyadia jaringan, komponén Containerd CRI nelepon CNI plugin Flannelngagunakeun file konfigurasi 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
      }
    }
  ]
}

The Flannel CNI plugin gawéna ditéang jeung Flanneld. Salami ngamimitian, Flanneld nyandak podCIDR sareng detil anu aya hubunganana sareng jaringan tina server API sareng nyimpen kana file. /run/flannel/subnet.env.

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

Plugin Flannel CNI nganggo data tina /run/flannel/subnet.env pikeun ngonpigurasikeun jeung nelepon CNI sasak plugin.

CNI plugin Sasak

Plugin ieu disebut kalayan konfigurasi ieu:

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

Nalika disebut pertama kalina, éta nyiptakeun sasak Linux kalayan «name»: «cni0», anu dituduhkeun dina config. Lajeng pasangan veth dijieun pikeun tiap pod. Hiji tungtung disambungkeun ka ngaranspasi jaringan wadahna, anu sanésna kalebet dina sasak Linux dina jaringan host. CNI plugin Sasak nyambungkeun sadaya wadah host ka sasak Linux Ubuntu dina jaringan host.

Sanggeus réngsé nyetél pasangan veth, plugin Bridge nyauran plugin IPAM CNI host-lokal. Jenis plugin IPAM tiasa dikonpigurasi dina konfigurasi CNI anu dianggo ku plugin CRI pikeun nyauran plugin Flannel CNI.

Host-lokal IPAM CNI plugins

Sasak CNI nelepon host-lokal IPAM plugin CNI kalawan konfigurasi handap:

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

Host-lokal IPAM plugin (IP Abaju awéwé Management - manajemén alamat IP) mulih alamat IP pikeun wadahna ti subnet tur nyimpen IP disadiakeun dina host dina diréktori dieusian dina bagian. dataDir - /var/lib/cni/networks/<network-name=cni0>/<ip>. Berkas ieu ngandung ID wadah dimana alamat IP ieu ditugaskeun.

Nalika nyauran plugin IPAM host-lokal, éta mulihkeun data ieu:

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

singgetan

Kube-controller-manager napelkeun podCIDR ka unggal titik. Unggal polong titik nampi alamat IP tina rohangan alamat dina rentang podCIDR anu dialokasikeun. Kusabab podCIDR titik henteu tumpang tindih, sadaya pod nampi alamat IP unik.

Administrator klaster Kubernetes ngonpigurasikeun sareng masang kubelet, runtime wadahna, agén panyadia jaringan, sareng nyalin plugins CNI ka unggal node. Salila ngamimitian, agén panyadia jaringan ngahasilkeun konfigurasi CNI. Nalika pod dijadwalkeun pikeun node, kubelet nyauran plugin CRI pikeun nyiptakeunana. Salajengna, upami containerd dianggo, plugin Containerd CRI nyauran plugin CNI anu dieusian dina konfigurasi CNI pikeun ngonpigurasikeun jaringan pod. Hasilna, pod nampi alamat IP.

Butuh waktu kuring sababaraha waktos ngartos sagala subtleties na nuances sadaya interaksi ieu. Abdi ngarepkeun pangalaman ieu bakal ngabantosan anjeun langkung ngartos kumaha jalanna Kubernetes. Mun kuring salah ngeunaan nanaon, mangga ngahubungan kuring di Twitter atanapi di alamat [email dijaga]. Ngarasa Luncat pikeun ngahontal kaluar lamun hoyong ngabahas aspék artikel ieu atawa nanaon sejenna. Abdi hoyong ngobrol sareng anjeun!

rujukan

Wadah sareng jaringan

Kumaha cara kerja Flannel?

CRI jeung CNI

PS ti penerjemah

Baca ogé dina blog urang:

sumber: www.habr.com

Tambahkeun komentar