Giunsa pagkuha sa usa ka Kubernetes pod ang IP address?

Nota. transl.: Kini nga artikulo, nga gisulat sa usa ka inhenyero sa SRE gikan sa LinkedIn, nag-detalye bahin sa inner magic sa Kubernetes - mas tukma, ang interaksyon sa CRI, CNI ug kube-apiserver - nga mahitabo kung ang sunod pod kinahanglan nga hatagan ug IP address.

Usa sa mga batakang kinahanglanon Modelo sa network sa Kubernetes mao nga ang matag pod kinahanglan adunay kaugalingon nga IP address ug bisan unsang uban nga pod sa cluster kinahanglan nga makakontak niini sa adres. Adunay daghang network "providers" (Flannel, Calico, Canal, ug uban pa) nga makatabang sa pagpatuman niini nga modelo sa network.

Sa una nakong pagsugod sa pagtrabaho kauban ang Kubernetes, dili kaayo klaro kanako kung giunsa pagkuha sa mga pod ang ilang mga adres sa IP. Bisan sa usa ka pagsabut kung giunsa ang indibidwal nga mga sangkap naglihok, lisud mahanduraw nga sila nagtinabangay. Pananglitan, nahibal-an ko kung unsa ang mga plugin sa CNI, apan wala ako nahibal-an kung giunsa kini pagtawag. Busa, nakahukom ko sa pagsulat niini nga artikulo aron sa pagpaambit sa kahibalo mahitungod sa lain-laing mga sangkap sa network ug sa unsa nga paagi sila magtinabangay sa usa ka Kubernetes cluster, nga nagtugot sa matag pod sa pagkuha sa iyang kaugalingon nga talagsaon nga IP address.

Adunay lain-laing mga paagi sa pag-organisar sa networking sa Kubernetes, sama sa lain-laing mga opsyon sa runtime alang sa mga sudlanan. Kini nga publikasyon mogamit Flannel sa pag-organisar sa usa ka network sa usa ka cluster, ug isip usa ka executable nga palibot - Containerd. Naghunahuna usab ako nga nahibal-an nimo kung giunsa ang pagtrabaho sa networking taliwala sa mga sudlanan, mao nga hikap ra nako kini sa kadali, para lang sa konteksto.

Pipila ka batakang mga konsepto

Mga Container ug ang Network: Usa ka Mubo nga Overview

Adunay daghang maayo kaayo nga mga publikasyon sa Internet nga nagpatin-aw kung giunsa ang mga sudlanan nakigsulti sa usag usa pinaagi sa network. Busa, mohatag lang ko og kinatibuk-ang panglantaw sa mga batakang konsepto ug limitahan ang akong kaugalingon sa usa ka paagi, nga naglakip sa paghimo og Linux bridge ug encapsulating packages. Ang mga detalye wala iapil, tungod kay ang hilisgutan sa container networking mismo angayan sa usa ka bulag nga artikulo. Ang mga link sa pipila nga labi ka makahuluganon ug edukasyonal nga mga publikasyon ihatag sa ubos.

Mga sudlanan sa usa ka host

Usa ka paagi sa pag-organisar sa komunikasyon pinaagi sa mga adres sa IP tali sa mga sudlanan nga nagdagan sa parehas nga host naglakip sa paghimo og tulay sa Linux. Alang niini nga katuyoan, ang mga virtual nga aparato gihimo sa Kubernetes (ug Docker) veth (virtual ethernet). Ang usa ka tumoy sa veth device nagkonektar sa namespace sa network sa sudlanan, ang lain sa Linux tulay sa host network.

Ang tanan nga mga sudlanan sa parehas nga host adunay usa ka tumoy sa veth nga konektado sa usa ka taytayan diin sila makakomunikar sa usag usa pinaagi sa mga adres sa IP. Ang tulay sa Linux adunay usab usa ka IP address ug naglihok ingon usa ka ganghaan alang sa egress nga trapiko gikan sa mga pod nga gitakda alang sa ubang mga node.

Giunsa pagkuha sa usa ka Kubernetes pod ang IP address?

Mga sudlanan sa lainlaing mga host

Ang packet encapsulation usa ka pamaagi nga nagtugot sa mga sudlanan sa lainlaing mga node nga makigkomunikar sa usag usa gamit ang mga IP address. Sa Flannel, ang teknolohiya ang responsable niini nga oportunidad. vxlan, nga "nag-package" sa orihinal nga pakete ngadto sa usa ka UDP nga pakete ug dayon ipadala kini sa destinasyon niini.

Sa usa ka Kubernetes cluster, ang Flannel nagmugna og vxlan device ug nag-update sa rota table sa matag node sumala niana. Ang matag packet nga gitagana alang sa usa ka sudlanan sa lain nga host moagi sa vxlan device ug gisulod sa usa ka UDP packet. Sa destinasyon, ang nested packet makuha ug ipasa ngadto sa gusto pod.

Giunsa pagkuha sa usa ka Kubernetes pod ang IP address?
Mubo nga sulat: Kini usa lamang ka paagi sa pag-organisar sa komunikasyon sa network tali sa mga sudlanan.

Unsa ang CRI?

CRI (Container Runtime Interface) mao ang usa ka plugin nga nagtugot sa kubelet sa paggamit sa lain-laing mga sudlanan runtime palibot. Ang CRI API gitukod sa lainlaing mga runtime, aron ang mga tiggamit makapili sa runtime nga ilang gusto.

Unsa ang CNI?

Proyekto CNI mao ang usa ka espesipikasyon sa pag-organisar sa usa ka unibersal nga solusyon sa network alang sa mga sudlanan sa Linux. Dugang pa, kini naglakip mga plugins, responsable sa lain-laing mga gimbuhaton sa dihang mag-set up og pod network. Ang CNI plugin kay usa ka executable file nga nagsunod sa specification (atong hisgotan ang pipila ka plugins sa ubos).

Ang alokasyon sa mga subnet sa mga node para sa pag-assign sa mga IP address sa mga pod

Tungod kay ang matag pod sa usa ka cluster kinahanglan adunay usa ka IP address, importante nga masiguro nga kini nga adres talagsaon. Kini makab-ot pinaagi sa pag-assign sa matag node og usa ka talagsaon nga subnet, diin ang mga pod sa maong node dayon gi-assign nga mga IP address.

Node IPAM Controller

Kanus-a nodeipam gipasa isip parameter sa bandila --controllers kube-controller-manager, naggahin kini og bulag nga subnet (podCIDR) sa matag node gikan sa cluster CIDR (ie, ang range sa IP addresses alang sa cluster network). Tungod kay kini nga mga podCIDR dili magsapaw, mahimong posible alang sa matag pod nga magahin ug usa ka talagsaon nga IP address.

Ang usa ka Kubernetes node gi-assign sa usa ka podCIDR kung kini una nga narehistro sa cluster. Aron mabag-o ang podCIDR sa mga node, kinahanglan nimo nga i-deregister kini ug dayon irehistro kini pag-usab, paghimo og angay nga mga pagbag-o sa configuration sa Kubernetes control layer sa taliwala. Mahimo nimong ipakita ang podCIDR sa usa ka node gamit ang mosunod nga sugo:

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

Kubelet, container runtime ug CNI plugins: kung giunsa kini tanan

Ang pag-iskedyul sa usa ka pod kada node naglakip sa daghang mga lakang sa pagpangandam. Niini nga seksyon, mag-focus lang ko sa mga direktang may kalabutan sa pag-set up og network pod.

Ang pag-iskedyul sa usa ka pod ngadto sa usa ka node magpahinabo sa mosunod nga kutay sa mga panghitabo:

Giunsa pagkuha sa usa ka Kubernetes pod ang IP address?

Tabang: Arkitektura sa Containerd CRI plugins.

Interaksyon tali sa container runtime ug CNI plugins

Ang matag network provider adunay kaugalingong CNI plugin. Ang runtime sa sudlanan nagpadagan niini aron ma-configure ang network alang sa pod samtang kini magsugod. Sa kaso sa containerd, ang CNI plugin gilunsad sa plugin Containerd nga CRI.

Dugang pa, ang matag provider adunay kaugalingon nga ahente. Gi-install kini sa tanan nga mga node sa Kubernetes ug responsable sa pag-configure sa network sa mga pod. Kini nga ahente gilakip sa CNI config o independente nga nagmugna niini sa node. Ang config nagtabang sa CRI plugin set nga CNI plugin nga tawagan.

Ang lokasyon sa CNI config mahimong ipasibo; pinaagi sa default kini anaa sa /etc/cni/net.d/<config-file>. Ang mga tagdumala sa kumpol responsable usab sa pag-install sa mga plugin sa CNI sa matag cluster node. Napasibo usab ang ilang lokasyon; default nga direktoryo - /opt/cni/bin.

Kung gigamit ang containerd, ang mga agianan alang sa plugin config ug binaries mahimong ibutang sa seksyon [plugins.Β«io.containerd.grpc.v1.criΒ».cni] Π² containerd nga configuration file.

Tungod kay gigamit namo ang Flannel isip among network provider, maghisgot ta og gamay bahin sa pag-set up niini:

  • Ang Flanneld (Flannel's daemon) kasagarang gibutang sa usa ka cluster isip usa ka DaemonSet nga adunay install-cni ingon nga init nga sudlanan.
  • Install-cni nagmugna CNI configuration file (/etc/cni/net.d/10-flannel.conflist) sa matag node.
  • Naghimo ang Flanneld og vxlan device, nagkuha sa metadata sa network gikan sa API server, ug nag-monitor sa mga update sa pod. Samtang sila gibuhat, kini nag-apod-apod sa mga ruta sa tanan nga mga pods sa tibuok cluster.
  • Kini nga mga ruta nagtugot sa mga pod nga makigkomunikar sa usag usa pinaagi sa mga adres sa IP.

Alang sa mas detalyado nga kasayuran bahin sa buhat sa Flannel, girekomenda nako ang paggamit sa mga link sa katapusan sa artikulo.

Ania ang usa ka dayagram sa interaksyon tali sa Containerd CRI plugin ug sa CNI plugins:

Giunsa pagkuha sa usa ka Kubernetes pod ang IP address?

Sama sa imong makita sa ibabaw, ang kubelet nagtawag sa Containerd CRI plugin aron sa paghimo sa pod, nga unya nagtawag sa CNI plugin aron ma-configure ang network sa pod. Sa pagbuhat niini, ang CNI plugin sa network provider nagtawag sa uban pang mga core CNI plugins aron ma-configure ang lain-laing aspeto sa network.

Interaksyon tali sa mga plugin sa CNI

Adunay lainlaing mga plugin sa CNI kansang trabaho mao ang pagtabang sa pag-set up sa komunikasyon sa network tali sa mga sudlanan sa host. Kini nga artikulo maghisgot sa tulo niini.

CNI plugin nga Flannel

Kung gigamit ang Flannel isip network provider, ang Containerd CRI component nagtawag CNI plugin nga Flannelgamit ang 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
      }
    }
  ]
}

Ang Flannel CNI plugin nagtrabaho kauban ang Flanneld. Atol sa pagsugod, gikuha ni Flanneld ang podCIDR ug uban pang mga detalye nga may kalabotan sa network gikan sa API server ug gitipigan kini sa usa ka 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

Ang Flannel CNI plugin naggamit sa datos gikan sa /run/flannel/subnet.env aron ma-configure ug tawagan ang CNI bridge plugin.

CNI plugin Bridge

Kini nga plugin gitawag uban sa mosunod nga pag-configure:

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

Kung gitawag sa una nga higayon, nagmugna kini usa ka tulay sa Linux nga adunay Β«nameΒ»: Β«cni0Β», nga gipakita sa config. Unya ang usa ka pares sa veth gihimo alang sa matag pod. Ang usa ka tumoy niini konektado sa namespace sa network sa sudlanan, ang lain gilakip sa tulay sa Linux sa host network. CNI plugin Bridge nagkonektar sa tanan nga mga sudlanan sa host sa usa ka tulay sa Linux sa host network.

Pagkahuman sa pag-set up sa veth pair, ang Bridge plugin nagtawag sa host-local IPAM CNI plugin. Ang tipo sa plugin sa IPAM mahimong ma-configure sa CNI config nga gigamit sa CRI plugin aron tawagan ang Flannel CNI plugin.

Host-lokal nga IPAM CNI plugins

Tawag sa Bridge CNI host-lokal nga IPAM plugin CNI uban sa mosunod nga configuration:

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

Host-lokal nga IPAM plugin (IP Address Mpagdumala - pagdumala sa IP address) ibalik ang IP address alang sa sudlanan gikan sa subnet ug gitipigan ang gigahin nga IP sa host sa direktoryo nga gitakda sa seksyon dataDir - /var/lib/cni/networks/<network-name=cni0>/<ip>. Kini nga file naglangkob sa ID sa sudlanan diin kini nga IP address gi-assign.

Kung nagtawag sa host-local IPAM plugin, gibalik niini ang mosunod nga datos:

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

Sumaryo

Ang Kube-controller-manager nag-assign ug podCIDR sa matag node. Ang mga pod sa matag node makadawat og mga IP address gikan sa address space sa gigahin nga podCIDR range. Tungod kay ang mga podCIDR sa mga node dili magsapaw, ang tanan nga mga pod makadawat ug talagsaon nga mga adres sa IP.

Ang Kubernetes cluster administrator nag-configure ug nag-install sa kubelet, container runtime, network provider agent, ug nagkopya sa CNI plugins sa matag node. Atol sa pagsugod, ang ahente sa network provider nagmugna og CNI config. Kung ang usa ka pod naka-iskedyul sa usa ka node, ang kubelet nagtawag sa CRI plugin aron mahimo kini. Sunod, kung gigamit ang containerd, ang Containerd CRI plugin nagtawag sa CNI plugin nga gitakda sa CNI config aron ma-configure ang network sa pod. Ingon nga resulta, ang pod nakadawat og IP address.

Nagkinahanglan ako og pipila ka panahon aron masabtan ang tanan nga mga subtleties ug mga nuances sa tanan niini nga mga interaksyon. Nanghinaut ko nga kini nga kasinatian makatabang kanimo nga mas masabtan kung giunsa ang Kubernetes molihok. Kung nasayop ko sa bisan unsang butang, palihog kontaka ko sa Twitter o sa adres [protektado sa email]. Mobati nga gawasnon sa pagkontak kung gusto nimo hisgutan ang mga aspeto sa kini nga artikulo o bisan unsa pa. Ganahan ko makig chat nimo!

mga pakisayran

Mga sudlanan ug network

Giunsa pagtrabaho ang Flannel?

CRI ug CNI

PS gikan sa tighubad

Basaha usab sa among blog:

Source: www.habr.com

Idugang sa usa ka comment