Nānā. unuhi.: ʻO kēia ʻatikala, i kākau ʻia e kahi ʻenekinia SRE mai LinkedIn, hele i nā kikoʻī e pili ana i ka hana kilokilo i loko o Kubernetes - ʻoi aku ka pololei, ka launa pū ʻana o CRI, CNI a me kube-apiserver - e hana ʻia i ka wā e pono ai ke kau ʻia ka pod aʻe i kahi IP address.
ʻO kekahi o nā koi kumu ʻo ia ka pono o kēlā me kēia pod i kona IP ponoʻī a me nā pod ʻē aʻe i loko o ka pūʻulu e hiki ke hoʻopili iā ia ma kēlā helu. Nui nā "mea hoʻolako" pūnaewele (Flannel, Calico, Canal, etc.) e kōkua i ka hoʻokō ʻana i kēia ʻano hoʻohālike.
I koʻu hoʻomaka ʻana e hana pū me Kubernetes, ʻaʻole maopopo iaʻu pehea e loaʻa ai i nā pods ko lākou mau IP address. ʻOiai me ka hoʻomaopopo ʻana i ke ʻano o ka hana ʻana o kēlā me kēia ʻāpana, paʻakikī ke noʻonoʻo e hana pū lākou. No ka laʻana, ʻike wau i ke ʻano o nā plugins CNI, akā ʻaʻohe oʻu manaʻo pehea i kapa ʻia ai lākou. No laila, ua hoʻoholo wau e kākau i kēia ʻatikala e kaʻana like i ka ʻike e pili ana i nā ʻāpana pūnaewele like ʻole a pehea lākou e hana pū ai i kahi pūʻulu Kubernetes, kahi e hiki ai i kēlā me kēia pod ke loaʻa i kāna leka uila IP ponoʻī.
Aia nā ʻano like ʻole e hoʻonohonoho ai i ka pūnaewele ma Kubernetes, e like me nā koho runtime like ʻole no nā ipu. E hoʻohana kēia hoʻolaha e hoʻonohonoho i kahi pūnaewele i loko o kahi puʻupuʻu, a ma ke ʻano he wahi hoʻokō - . Ke manaʻo nei au ua ʻike ʻoe i ka hana ʻana o ka pūnaewele ma waena o nā ipu, no laila e hoʻopā wale wau iā ia, no ka pōʻaiapili wale nō.
ʻO kekahi mau manaʻo kumu
ʻO nā pahu a me ka Pūnaewele: He Manaʻo pōkole
Nui nā puke pai maikaʻi loa ma ka pūnaewele e wehewehe ana pehea e kamaʻilio ai nā ipu me kekahi ma o kahi pūnaewele. No laila, e hāʻawi wale wau i kahi ʻike laulā o nā manaʻo nui a kaupalena iaʻu iho i hoʻokahi ala, ʻo ia hoʻi ka hana ʻana Linux-ka hoʻopili ʻana a me ka hoʻopuni ʻana o ka packet. Ua kāpae ʻia nā kikoʻī, no ka mea, ʻo ke kumuhana o ka hoʻopili ʻana i ka ipu ponoʻī e pono ai kahi ʻatikala ʻokoʻa. Hāʻawi ʻia nā loulou i kekahi mau puke paʻi ʻike a me ka naʻauao ma lalo nei.
ʻO nā pahu ma kahi hoʻokipa
ʻO kahi ala e hoʻonohonoho ai i ke kamaʻilio ʻana ma o nā helu wahi IP ma waena o nā ipu e holo ana ma ka kikowaena like e pili ana i ka hana ʻana Linux-alahaka. No kēia, hana ʻia nā polokalamu virtual ma Kubernetes (a me Docker) . Hoʻopili kekahi ʻaoʻao o ka hāmeʻa veth i ka inoa kikowaena pūnaewele o ka pahu, a ʻo kekahi i ma ka pūnaewele hoʻokipa.
Loaʻa i nā ipu āpau ma kahi kikowaena hoʻokahi kekahi hopena o ke kikowaena i hoʻopili ʻia i kahi alahaka ma o lākou e hiki ai ke kamaʻilio pū kekahi me kekahi ma o nā helu IP. Linux-loaʻa pū kekahi helu wahi IP i ke alahaka a hana ia ma ke ʻano he puka komo no ke kaʻa puka (egress) mai nā pods i manaʻo ʻia no nā nodes ʻē aʻe.

ʻO nā pahu ma nā pūʻali like ʻole
ʻO ka packet encapsulation kekahi ala e hiki ai i nā pahu ma nā node like ʻole ke kamaʻilio me kekahi me ka hoʻohana ʻana i nā helu IP. Ma Flannel, ʻo ka ʻenehana ke kuleana o kēia manawa. , ka mea "hoʻopili" i ka ʻeke kumu i loko o kahi ʻeke UDP a laila hoʻouna aku i kona wahi.
Ma kahi pūʻulu Kubernetes, hana ʻo Flannel i kahi mea vxlan a hōʻano hou i ka papa kuhikuhi ma kēlā me kēia node e like me ia. ʻO kēlā me kēia ʻeke i hoʻoholo ʻia no kahi pahu ma kahi hoʻokipa ʻē aʻe e hele i ka hāmeʻa vxlan a hoʻopili ʻia i loko o kahi ʻeke UDP. Ma kahi e hele ai, lawe ʻia ka ʻeke pūnana a hoʻouna ʻia i ka pod i makemake ʻia.

'Ōlelo Aʻo: ʻO kēia wale nō kahi ala e hoʻonohonoho ai i ke kamaʻilio pūnaewele ma waena o nā pahu.
He aha ka CRI?
he plugin ia e hiki ai iā kubelet ke hoʻohana i nā kaiapuni runtime pahu like ʻole. Kūkulu ʻia ka CRI API i nā manawa holo like ʻole, no laila hiki i nā mea hoʻohana ke koho i ka manawa holo o kā lākou koho.
He aha ka CNI?
he e hoʻonohonoho i kahi hopena pūnaewele honua no Linux-nā ipu. Eia kekahi, ua komo pū me ia , kuleana no nā hana like ʻole i ka hoʻonohonoho ʻana i kahi pūnaewele pod. ʻO ka plugin CNI he faila hiki ke hoʻokō me ka kikoʻī (e kūkākūkā mākou i kekahi mau plugins ma lalo).
ʻO ka hoʻokaʻawale ʻana i nā subnets i nā nodes no ka hāʻawi ʻana i nā helu IP i nā pods
No ka mea, pono e loaʻa i kēlā me kēia pod i loko o kahi pūʻulu kahi IP address, he mea nui e hōʻoia i ke kū hoʻokahi o kēia helu wahi. Loaʻa kēia ma ka hāʻawi ʻana i kēlā me kēia node i kahi subnet kūʻokoʻa, kahi i hāʻawi ʻia ai nā pods ma kēlā node i nā helu IP.
Node IPAM Controller
Inā nodeipam i hala ma ke ʻano he ʻāpana hae --controllers , hoʻokaʻawale ia i kahi subnet kaʻawale (podCIDR) i kēlā me kēia node mai ka hui CIDR (ʻo ia hoʻi, ka laulā o nā helu IP no ka pūnaewele cluster). No ka mea, ʻaʻole i uhi ʻia kēia podCIDRs, hiki i kēlā me kēia pod ke hoʻokaʻawale i kahi leka uila IP kūʻokoʻa.
Hāʻawi ʻia kahi node Kubernetes i podCIDR i ka wā i hoʻopaʻa inoa mua ʻia me ka pūʻulu. No ka hoʻololi ʻana i ka podCIDR o nā nodes, pono ʻoe e kāpae iā lākou a laila hoʻopaʻa inoa hou iā lākou, e hana ana i nā hoʻololi kūpono i ka hoʻonohonoho hoʻonohonoho papa mana Kubernetes ma waena. Hiki iā ʻoe ke hōʻike i ka podCIDR o kahi node me ka hoʻohana ʻana i kēia kauoha:
$ kubectl get no <nodeName> -o json | jq '.spec.podCIDR'
10.244.0.0/24
Kubelet, pahu holo manawa a me CNI plugins: pehea e hana ai
ʻO ka hoʻonohonoho ʻana i kahi pod ma kēlā me kēia node e pili ana i nā hana hoʻomākaukau. Ma kēia ʻāpana, e nānā wale wau i nā mea pili pono i ka hoʻonohonoho ʻana i kahi pūnaewele pod.
ʻO ka hoʻonohonoho ʻana i kahi pod i kekahi node e hoʻomaka ai i ke kaulahao o nā hanana:

Kōkua: .
Ka pilina ma waena o ka pahu pahu a me nā plugins CNI
Loaʻa i kēlā me kēia mea hoʻolako pūnaewele kāna plugin CNI ponoʻī. Holo ka manawa holo o ka ipu e hoʻonohonoho i ka pūnaewele no ka pod i kona hoʻomaka ʻana. I ka hihia o containerd, ua hoʻokuʻu ʻia ka plugin CNI e ka plugin .
Eia kekahi, ua loaʻa i kēlā me kēia mea hoʻolako kāna iho ponoʻī. Hoʻokomo ʻia ia ma nā node Kubernetes āpau a nona ke kuleana no ka hoʻonohonoho pūnaewele o nā pods. Hoʻokomo ʻia kēia ʻelele me ka CNI config a i ʻole hana kūʻokoʻa iā ia ma ka node. Kōkua ka config i ka CRI plugin set i CNI plugin e kāhea.
Hiki ke hoʻololi i kahi o ka CNI config; ma ka paʻamau aia i loko /etc/cni/net.d/<config-file>. ʻO nā luna hoʻomalu pū kekahi ke kuleana no ka hoʻokomo ʻana i nā plugins CNI ma kēlā me kēia node cluster. Hiki ke hoʻonohonoho ʻia ko lākou wahi; papa kuhikuhi paʻamau - /opt/cni/bin.
Ke hoʻohana nei i ka containerd, hiki ke hoʻonohonoho ʻia nā ala no ka plugin config a me nā binaries ma ka ʻāpana [plugins.«io.containerd.grpc.v1.cri».cni] в .
No ka mea ke hoʻohana nei mākou iā Flannel ma ko mākou mea hoʻolako pūnaewele, e kamaʻilio liʻiliʻi e pili ana i ka hoʻonohonoho ʻana:
- Hoʻokomo pinepine ʻia ʻo Flanneld (Flannel's daemon) i loko o kahi pūpū e like me kahi DaemonSet me
install-cnie like me . Install-cnihana (/etc/cni/net.d/10-flannel.conflist) ma kēlā me kēia node.- Hoʻokumu ʻo Flanneld i kahi mea vxlan, kiʻi i ka metadata pūnaewele mai ka server API, a nānā i nā mea hou pod. Ke hana ʻia nei lākou, hāʻawi ʻo ia i nā ala i nā pods a pau i ka pūʻulu.
- Hāʻawi kēia mau ala i nā pods e kamaʻilio me kekahi me nā leka IP.
No ka ʻike kikoʻī e pili ana i ka hana a Flannel, manaʻo wau e hoʻohana i nā loulou ma ka hope o ka ʻatikala.
Eia ke kiʻikuhi o ka pilina ma waena o Containerd CRI plugin a me CNI plugins:

E like me kāu e ʻike ai ma luna, kāhea ka kubelet i ka plugin Containerd CRI e hana i ka pod, a laila kāhea i ka plugin CNI e hoʻonohonoho i ka pūnaewele o ka pod. I ka hana ʻana pēlā, kāhea ka mea hoʻolako pūnaewele i nā plugins CNI ʻē aʻe e hoʻonohonoho i nā ʻano like ʻole o ka pūnaewele.
Ka pilina ma waena o nā plugins CNI
Aia kekahi mau plugins CNI nona ka hana e kōkua i ka hoʻonohonoho ʻana i ke kamaʻilio pūnaewele ma waena o nā pahu ma ka host. E kūkākūkā kēia ʻatikala i ʻekolu o lākou.
CNI plugin Flannel
Ke hoʻohana nei ʻo Flannel ma ke ʻano he mea hoʻolako pūnaewele, kāhea ka ʻāpana Containerd CRI me ka hoʻohana ʻana i ka faila hoʻonohonoho 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
}
}
]
}
Ke hana pū nei ka plugin Flannel CNI me Flanneld. I ka wā hoʻomaka, hoʻihoʻi ʻo Flanneld i ka podCIDR a me nā kikoʻī e pili ana i ka pūnaewele mai ka server API a mālama iā lākou i kahi 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
Hoʻohana ka plugin Flannel CNI i ka ʻikepili mai /run/flannel/subnet.env e hoʻonohonoho a kāhea i ka CNI bridge plugin.
CNI plugin Bridge
Kāhea ʻia kēia plugin me kēia hoʻonohonoho:
{
"name": "cni0",
"type": "bridge",
"mtu": 1450,
"ipMasq": false,
"isGateway": true,
"ipam": {
"type": "host-local",
"subnet": "10.244.0.0/24"
}
}
Ma ke kāhea mua ʻana e hana ia Linux-alahaka me «name»: «cni0», i kuhikuhi ʻia ma ka config. A laila, hana ʻia kahi pālua veth no kēlā me kēia pod. Hoʻopili ʻia kekahi hopena i ka inoa inoa pūnaewele o ka ipu, ua hoʻokomo ʻia kekahi i loko Linux-alahaka ma ka pūnaewele kikowaena. hoʻopili i nā ipu kikowaena āpau i Linux-alahaka ma ka pūnaewele kikowaena.
I ka pau ʻana o ka hoʻonohonoho ʻana i ka veth pair, ua kāhea ka plugin Bridge i ka plugin IPAM CNI host-local. Hiki ke hoʻonohonoho ʻia ke ʻano plugin IPAM ma ka CNI config i hoʻohana ʻia e ka plugin CRI e kāhea i ka plugin Flannel CNI.
Nā mea hoʻokipa IPAM CNI pūnaewele
Kāhea ʻo Bridge CNI me kēia hoʻonohonoho:
{
"name": "cni0",
"ipam": {
"type": "host-local",
"subnet": "10.244.0.0/24",
"dataDir": "/var/lib/cni/networks"
}
}
Pūnaehana IPAM hoʻokipa (IP Ahale lole Mhoʻoponopono - hoʻokele IP address) hoʻihoʻi i ka IP address no ka ipu mai ka subnet a mālama i ka IP i hāʻawi ʻia ma ka host ma ka papa kuhikuhi i kuhikuhi ʻia ma ka ʻāpana. dataDir - /var/lib/cni/networks/<network-name=cni0>/<ip>. Aia i loko o kēia waihona ka ID o ka pahu kahi i hāʻawi ʻia ai kēia helu IP.
Ke kāhea ʻana i ka plugin IPAM host-local, hoʻihoʻi ia i ka ʻikepili aʻe:
{
"ip4": {
"ip": "10.244.4.2",
"gateway": "10.244.4.3"
},
"dns": {}
}
Hōʻuluʻulu
Hāʻawi ʻo Kube-controller-manager i kahi podCIDR i kēlā me kēia node. Loaʻa i nā pods o kēlā me kēia node nā leka uila IP mai ka wahi kikoʻī ma ka laulā podCIDR i hoʻokaʻawale ʻia. No ka mea, ʻaʻole i uhi ʻia nā podCIDR o nā nodes, loaʻa nā pods āpau i nā leka uila IP kūʻokoʻa.
Hoʻonohonoho a hoʻokomo ka luna hoʻomalu hui Kubernetes i ke kubelet, ka manawa holo pahu, ka mea hoʻolako pūnaewele, a kope i nā plugins CNI i kēlā me kēia node. I ka wā o ka hoʻomaka ʻana, hoʻopuka ka mea lawelawe pūnaewele i kahi hoʻonohonoho CNI. Ke hoʻonohonoho ʻia kahi pod i kahi node, kāhea ka kubelet i ka plugin CRI e hana ai. A laila, inā hoʻohana ʻia ka containerd, kāhea ka Containerd CRI plugin i ka CNI plugin i kuhikuhi ʻia ma ka CNI config e hoʻonohonoho i ka pūnaewele o ka pod. ʻO ka hopena, loaʻa i ka pod kahi leka uila IP.
Ua lawe iaʻu i kekahi manawa e hoʻomaopopo i nā subtleties a me nā nuances o kēia mau pilina. Manaʻo wau e kōkua kēia ʻike iā ʻoe e hoʻomaopopo i ka hana ʻana o Kubernetes. Inā hewa wau i kekahi mea, e ʻoluʻolu e kelepona mai iaʻu ma aiʻole ma ka helu wahi . E ʻoluʻolu e kelepona aku inā makemake ʻoe e kūkākūkā i nā ʻano o kēia ʻatikala a i ʻole kekahi mea ʻē aʻe. Makemake au e kamaʻilio me ʻoe!
kūmole
Nā pahu a me ka pūnaewele
Pehea ka hana ʻana o Flannel?
CRI a me CNI
PS mai ka unuhi
E heluhelu pū ma kā mākou blog:
- «";
- "He alakaʻi i hōʻike ʻia no ka hui ʻana ma Kubernetes": , ;
- «".
Source: www.habr.com
