ื›ื™ืฆื“ ืคื•ื“ Kubernetes ืžืงื‘ืœ ื›ืชื•ื‘ืช IP?

ื”ืขืจื”. ืชืจื’ื•ื: ืžืืžืจ ื–ื”, ืฉื ื›ืชื‘ ืขืœ ื™ื“ื™ ืžื”ื ื“ืก SRE ืž-LinkedIn, ืžืคืจื˜ ืืช ื”ืงืกื ื”ืคื ื™ืžื™ ื‘-Kubernetes - ืœื™ืชืจ ื“ื™ื•ืง, ื”ืื™ื ื˜ืจืืงืฆื™ื” ืฉืœ CRI, CNI ื•-kube-apiserver - ืฉืงื•ืจื” ื›ืืฉืจ ืœืคื•ื“ ื”ื‘ื ืฆืจื™ืš ืœื”ืงืฆื•ืช ื›ืชื•ื‘ืช IP.

ืื—ืช ื”ื“ืจื™ืฉื•ืช ื”ื‘ืกื™ืกื™ื•ืช ื“ื’ื ืจืฉืช Kubernetes ื”ื•ื ืฉืœื›ืœ ืคื•ื“ ื—ื™ื™ื‘ ืœื”ื™ื•ืช ื›ืชื•ื‘ืช IP ืžืฉืœื• ื•ื›ืœ ืคื•ื“ ืื—ืจ ื‘ืืฉื›ื•ืœ ื—ื™ื™ื‘ ืœื”ื™ื•ืช ืžืกื•ื’ืœ ืœื™ืฆื•ืจ ืื™ืชื• ืงืฉืจ ื‘ื›ืชื•ื‘ืช ื–ื•. ื™ืฉื ื "ืกืคืงื™" ืจืฉืช ืจื‘ื™ื (Flannel, Calico, Canal ื•ื›ื•') ืฉืขื•ื–ืจื™ื ืœื™ื™ืฉื ืžื•ื“ืœ ืจืฉืช ื–ื”.

ื›ืฉื”ืชื—ืœืชื™ ืœืขื‘ื•ื“ ืขื Kubernetes, ืœื ื”ื™ื” ื‘ืจื•ืจ ืœื™ ืœื’ืžืจื™ ืื™ืš ื‘ื“ื™ื•ืง ืคื•ื“ื™ื ืžืงื‘ืœื™ื ืืช ื›ืชื•ื‘ื•ืช ื”-IP ืฉืœื”ื. ืืคื™ืœื• ืขื ื”ื‘ื ื” ืฉืœ ืื•ืคืŸ ืคืขื•ืœืชื ืฉืœ ื”ืจื›ื™ื‘ื™ื ื”ื‘ื•ื“ื“ื™ื, ื”ื™ื” ืงืฉื” ืœื“ืžื™ื™ืŸ ืื•ืชื ืขื•ื‘ื“ื™ื ื™ื—ื“. ืœื“ื•ื’ืžื”, ื™ื“ืขืชื™ ืœืžื” ืžื™ื•ืขื“ื™ื ืชื•ืกืคื™ื ืฉืœ CNI, ืื‘ืœ ืœื ื”ื™ื” ืœื™ ืžื•ืฉื’ ืื™ืš ื‘ื“ื™ื•ืง ืงื•ืจืื™ื ืœื”ื. ืœื›ืŸ, ื”ื—ืœื˜ืชื™ ืœื›ืชื•ื‘ ืžืืžืจ ื–ื” ื›ื“ื™ ืœื—ืœื•ืง ื™ื“ืข ืขืœ ืจื›ื™ื‘ื™ ื”ืจืฉืช ื”ืฉื•ื ื™ื ื•ื›ื™ืฆื“ ื”ื ืคื•ืขืœื™ื ื™ื—ื“ ื‘ืืฉื›ื•ืœ Kubernetes, ื”ืžืืคืฉืจ ืœื›ืœ ืคื•ื“ ืœืงื‘ืœ ื›ืชื•ื‘ืช IP ื™ื™ื—ื•ื“ื™ืช ืžืฉืœื•.

ื™ืฉื ืŸ ื“ืจื›ื™ื ืฉื•ื ื•ืช ืœืืจื’ืŸ ืจืฉืช ื‘-Kubernetes, ื‘ื“ื™ื•ืง ื›ืžื• ืฉื™ืฉ ืืคืฉืจื•ื™ื•ืช ืฉื•ื ื•ืช ืฉืœ ื–ืžืŸ ืจื™ืฆื” ืœืงื•ื ื˜ื™ื™ื ืจื™ื. ืคืจืกื•ื ื–ื” ื™ืฉืชืžืฉ ืคืœึธื ึถืœ ืœืืจื’ืŸ ืจืฉืช ื‘ืืฉื›ื•ืœ, ื•ื›ืกื‘ื™ื‘ืช ื”ืคืขืœื” - Containerd. ืื ื™ ื’ื ื™ื•ืฆื ืžืชื•ืš ื”ื ื—ื” ืฉืืชื” ื™ื•ื“ืข ืื™ืš ืขื•ื‘ื“ ื ื˜ื•ื•ืจืงื™ื ื’ ื‘ื™ืŸ ืงื•ื ื˜ื™ื™ื ืจื™ื, ืื– ืื ื™ ืจืง ืื’ืข ื‘ื–ื” ื‘ืงืฆืจื”, ืจืง ืœืฉื ื”ื”ืงืฉืจ.

ื›ืžื” ืžื•ืฉื’ื™ ื™ืกื•ื“

ืงื•ื ื˜ื™ื™ื ืจื™ื ื•ื”ืจืฉืช: ืกืงื™ืจื” ืงืฆืจื”

ื™ืฉ ื”ืจื‘ื” ืคืจืกื•ืžื™ื ืžืฆื•ื™ื ื™ื ื‘ืื™ื ื˜ืจื ื˜ ืฉืžืกื‘ื™ืจื™ื ืื™ืš ืงื•ื ื˜ื™ื™ื ืจื™ื ืžืชืงืฉืจื™ื ื–ื” ืขื ื–ื” ื“ืจืš ื”ืจืฉืช. ืœื›ืŸ, ืืชืŸ ืจืง ืกืงื™ืจื” ื›ืœืœื™ืช ืฉืœ ื”ืžื•ืฉื’ื™ื ื”ื‘ืกื™ืกื™ื™ื ื•ืื’ื‘ื™ืœ ืืช ืขืฆืžื™ ืœื’ื™ืฉื” ืื—ืช, ื”ื›ื•ืœืœืช ื™ืฆื™ืจืช ื’ืฉืจ ืœื™ื ื•ืงืก ื•ื”ืงื™ืขืช ื—ื‘ื™ืœื•ืช. ืคืจื˜ื™ื ื ืฉืžื˜ื™ื, ืžื›ื™ื•ื•ืŸ ืฉื”ื ื•ืฉื ืฉืœ ืจืฉืช ืงื•ื ื˜ื™ื™ื ืจ ืขืฆืžื• ืจืื•ื™ ืœืžืืžืจ ื ืคืจื“. ืงื™ืฉื•ืจื™ื ืœื›ืžื” ืคืจืกื•ืžื™ื ื‘ืขืœื™ ืชื•ื‘ื ื•ืช ื•ื—ื™ื ื•ื›ื™ื•ืช ื‘ืžื™ื•ื—ื“ ื™ืกื•ืคืงื• ืœื”ืœืŸ.

ืžื™ื›ืœื™ื ืขืœ ืžืืจื— ืื—ื“

ื“ืจืš ืื—ืช ืœืืจื’ืŸ ืชืงืฉื•ืจืช ื‘ืืžืฆืขื•ืช ื›ืชื•ื‘ื•ืช IP ื‘ื™ืŸ ืงื•ื ื˜ื™ื™ื ืจื™ื ื”ืคื•ืขืœื™ื ืขืœ ืื•ืชื• ืžืืจื— ื›ื•ืœืœืช ื™ืฆื™ืจืช ื’ืฉืจ ืœื™ื ื•ืงืก. ืœืฉื ื›ืš, ืžื›ืฉื™ืจื™ื ื•ื™ืจื˜ื•ืืœื™ื™ื ื ื•ืฆืจื™ื ื‘-Kubernetes (ื•- Docker) veth (ืืชืจื ื˜ ื•ื™ืจื˜ื•ืืœื™). ืงืฆื” ืื—ื“ ืฉืœ ืžื›ืฉื™ืจ ื”-Veth ืžืชื—ื‘ืจ ืœืžืจื—ื‘ ื”ืฉืžื•ืช ืฉืœ ื”ืจืฉืช ืฉืœ ื”ืžื›ื•ืœื”, ื”ืงืฆื” ื”ืฉื ื™ ืœ ื’ืฉืจ ืœื™ื ื•ืงืก ื‘ืจืฉืช ื”ืžืืจื—ืช.

ืœื›ืœ ื”ืงื•ื ื˜ื™ื™ื ืจื™ื ื‘ืื•ืชื• ืžืืจื— ื™ืฉ ืงืฆื” ืื—ื“ ืฉืœ ื”-Veth ื”ืžื—ื•ื‘ืจ ืœื’ืฉืจ ืฉื“ืจื›ื• ื”ื ื™ื›ื•ืœื™ื ืœืชืงืฉืจ ื–ื” ืขื ื–ื” ื‘ืืžืฆืขื•ืช ื›ืชื•ื‘ื•ืช IP. ืœื’ืฉืจ ืœื™ื ื•ืงืก ื™ืฉ ื’ื ื›ืชื•ื‘ืช IP ื•ื”ื•ื ืžืฉืžืฉ ื›ืฉืขืจ ืœืชืขื‘ื•ืจืช ื™ืฆื™ืื” ืžื”ืคื•ื“ื™ื ื”ืžื™ื•ืขื“ื™ื ืœืฆืžืชื™ื ืื—ืจื™ื.

ื›ื™ืฆื“ ืคื•ื“ Kubernetes ืžืงื‘ืœ ื›ืชื•ื‘ืช IP?

ืžื™ื›ืœื™ื ืขืœ ืžืืจื—ื™ื ืฉื•ื ื™ื

Encapsulation ืฉืœ ืžื ื•ืช ื”ื™ื ืฉื™ื˜ื” ืื—ืช ื”ืžืืคืฉืจืช ืœืžื™ื›ืœื™ื ื‘ืฆืžืชื™ื ืฉื•ื ื™ื ืœืชืงืฉืจ ื–ื” ืขื ื–ื” ื‘ืืžืฆืขื•ืช ื›ืชื•ื‘ื•ืช IP. ื‘-Flannel, ื”ื˜ื›ื ื•ืœื•ื’ื™ื” ืื—ืจืื™ืช ืœื”ื–ื“ืžื ื•ืช ื–ื•. vxlan, ืืฉืจ "ืื•ืจื–ืช" ืืช ื”ื—ื‘ื™ืœื” ื”ืžืงื•ืจื™ืช ืœืชื•ืš ื—ื‘ื™ืœืช UDP ื•ืœืื—ืจ ืžื›ืŸ ืฉื•ืœื—ืช ืื•ืชื” ืœื™ืขื“ื”.

ื‘ืืฉื›ื•ืœ Kubernetes, Flannel ื™ื•ืฆืจ ืžื›ืฉื™ืจ vxlan ื•ืžืขื“ื›ืŸ ืืช ื˜ื‘ืœืช ื”ืžืกืœื•ืœื™ื ื‘ื›ืœ ืฆื•ืžืช ื‘ื”ืชืื. ื›ืœ ื—ื‘ื™ืœื” ื”ืžื™ื•ืขื“ืช ืœืžื™ื›ืœ ื‘ืžืืจื— ืื—ืจ ืขื•ื‘ืจืช ื“ืจืš ื”ืชืงืŸ vxlan ื•ืžื•ื‘ืœืขืช ื‘ื—ื‘ื™ืœืช UDP. ื‘ื™ืขื“, ื”ื—ื‘ื™ืœื” ื”ืžืงื•ื ื ืช ืžื—ื•ืœืฆืช ื•ืžื•ืขื‘ืจืช ืœืชืจืžื™ืœ ื”ืจืฆื•ื™.

ื›ื™ืฆื“ ืคื•ื“ Kubernetes ืžืงื‘ืœ ื›ืชื•ื‘ืช IP?
ื”ืขืจื”: ื–ื•ื”ื™ ืจืง ื“ืจืš ืื—ืช ืœืืจื’ืŸ ืชืงืฉื•ืจืช ืจืฉืช ื‘ื™ืŸ ืงื•ื ื˜ื™ื™ื ืจื™ื.

ืžื” ื–ื” CRI?

CRI (ืžืžืฉืง ื–ืžืŸ ืจื™ืฆื” ืฉืœ ืžื™ื›ืœ) ื”ื•ื ืชื•ืกืฃ ื”ืžืืคืฉืจ ืœ-kubelet ืœื”ืฉืชืžืฉ ื‘ืกื‘ื™ื‘ื•ืช ื–ืžืŸ ืจื™ืฆื” ืฉื•ื ื•ืช ืฉืœ ืžื™ื›ืœ. ื”-CRI API ืžื•ื‘ื ื” ื‘ื–ืžื ื™ ืจื™ืฆื” ืฉื•ื ื™ื, ื›ืš ืฉืžืฉืชืžืฉื™ื ื™ื›ื•ืœื™ื ืœื‘ื—ื•ืจ ืืช ื–ืžืŸ ื”ืจื™ืฆื” ืœืคื™ ื‘ื—ื™ืจืชื.

ืžื” ื–ื” CNI?

ืคืจื•ื™ืงื˜ CNI ื”ื•ื ืžึดืคืจึธื˜ ืœืืจื’ืŸ ืคืชืจื•ืŸ ืจืฉืช ืื•ื ื™ื‘ืจืกืœื™ ืขื‘ื•ืจ ืžื™ื›ืœื™ ืœื™ื ื•ืงืก. ื‘ื ื•ืกืฃ, ื”ื•ื ื›ื•ืœืœ ืชื•ืกืคื™ื, ืื—ืจืื™ ืขืœ ืคื•ื ืงืฆื™ื•ืช ืฉื•ื ื•ืช ื‘ืขืช ื”ืงืžืช ืจืฉืช ืคื•ื“ื™ื. ื”ืคืœืื’ื™ืŸ CNI ื”ื•ื ืงื•ื‘ืฅ ื”ืคืขืœื” ื”ืชื•ืื ืืช ื”ืžืคืจื˜ (ื ื“ื•ืŸ ื‘ื›ืžื” ืชื•ืกืคื™ื ื‘ื”ืžืฉืš).

ื”ืงืฆืืช ืจืฉืชื•ืช ืžืฉื ื” ืœืฆืžืชื™ื ืœื”ืงืฆืืช ื›ืชื•ื‘ื•ืช IP ืœืชืจืžื™ืœื™ื

ืžื›ื™ื•ื•ืŸ ืฉืœื›ืœ ืคื•ื“ ื‘ืืฉื›ื•ืœ ื—ื™ื™ื‘ืช ืœื”ื™ื•ืช ื›ืชื•ื‘ืช IP, ื—ืฉื•ื‘ ืœื•ื•ื“ื ืฉื›ืชื•ื‘ืช ื–ื• ืชื”ื™ื” ื™ื™ื—ื•ื“ื™ืช. ื–ื” ืžื•ืฉื’ ืขืœ ื™ื“ื™ ื”ืงืฆืืช ื›ืœ ืฆื•ืžืช ืชืช-ืจืฉืช ื™ื™ื—ื•ื“ื™ืช, ืฉืžืžื ื” ืžื•ืงืฆื•ืช ืœืชืจืžื™ืœื™ื ื‘ืื•ืชื• ืฆื•ืžืช ื›ืชื•ื‘ื•ืช IP.

ื‘ืงืจ IPAM ืฉืœ ืฆื•ืžืช

ื›ืืฉืจ nodeipam ื”ื•ืขื‘ืจ ื›ืคืจืžื˜ืจ ื“ื’ืœ --controllers kube-ื‘ืงืจ-ืžื ื”ืœ, ื”ื•ื ืžืงืฆื” ืชืช-ืจืฉืช ื ืคืจื“ืช (podCIDR) ืœื›ืœ ืฆื•ืžืช ืž-Cluster CIDR (ื›ืœื•ืžืจ, ื˜ื•ื•ื— ื›ืชื•ื‘ื•ืช ื”-IP ืขื‘ื•ืจ ืจืฉืช ื”ืืฉื›ื•ืœ). ืžื›ื™ื•ื•ืŸ ืฉ-podCIDRs ืืœื” ืื™ื ื ื—ื•ืคืคื™ื, ื ื™ืชืŸ ื™ื”ื™ื” ืœื”ืงืฆื•ืช ืœื›ืœ ืคื•ื“ ื›ืชื•ื‘ืช IP ื™ื™ื—ื•ื“ื™ืช.

ืœืฆื•ืžืช Kubernetes ืžื•ืงืฆื” podCIDR ื›ืืฉืจ ื”ื•ื ืจืฉื•ื ื‘ืชื—ื™ืœื” ื‘ืืฉื›ื•ืœ. ื›ื“ื™ ืœืฉื ื•ืช ืืช ื”-podCIDR ืฉืœ ืฆืžืชื™ื, ืขืœื™ืš ืœื‘ื˜ืœ ืืช ื”ืจื™ืฉื•ื ืฉืœื”ื ื•ืื– ืœืจืฉื•ื ืื•ืชื ืžื—ื“ืฉ, ืชื•ืš ื‘ื™ืฆื•ืข ืฉื™ื ื•ื™ื™ื ืžืชืื™ืžื™ื ื‘ืชืฆื•ืจืช ืฉื›ื‘ืช ื”ื‘ืงืจื” ืฉืœ Kubernetes ื‘ื™ื ื™ื”ื. ืืชื” ื™ื›ื•ืœ ืœื”ืฆื™ื’ ืืช ื”-podCIDR ืฉืœ ืฆื•ืžืช ื‘ืืžืฆืขื•ืช ื”ืคืงื•ื“ื” ื”ื‘ืื”:

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

Kubelet, ื–ืžืŸ ืจื™ืฆื” ืฉืœ ืžื™ื›ืœ ื•ืชื•ืกืคื™ CNI: ืื™ืš ื”ื›ืœ ืขื•ื‘ื“

ืชื–ืžื•ืŸ ืชืจืžื™ืœ ืœื›ืœ ืฆื•ืžืช ื›ืจื•ืš ื‘ื”ืจื‘ื” ืฉืœื‘ื™ ื”ื›ื ื”. ื‘ื—ืœืง ื–ื” ืืชืžืงื“ ืจืง ื‘ืืœื” ืฉืงืฉื•ืจื•ืช ื™ืฉื™ืจื•ืช ืœื”ืงืžืช ืจืฉืช ืคื•ื“ื™ื.

ืชื–ืžื•ืŸ ืคื•ื“ ืœืฆื•ืžืช ืžืกื•ื™ื ืžืคืขื™ืœ ืืช ืฉืจืฉืจืช ื”ืื™ืจื•ืขื™ื ื”ื‘ืื”:

ื›ื™ืฆื“ ืคื•ื“ Kubernetes ืžืงื‘ืœ ื›ืชื•ื‘ืช IP?

ืขื–ืจื”: ืืจื›ื™ื˜ืงื˜ื•ืจื” ืฉืœ ืชื•ืกืคื™ Containerd CRI.

ืื™ื ื˜ืจืืงืฆื™ื” ื‘ื™ืŸ ื–ืžืŸ ืจื™ืฆื” ืฉืœ ืžื™ื›ืœ ื•ืชื•ืกืคื™ CNI

ืœื›ืœ ืกืคืง ืจืฉืช ื™ืฉ ืชื•ืกืฃ CNI ืžืฉืœื•. ื–ืžืŸ ื”ืจื™ืฆื” ืฉืœ ื”ืžื›ื•ืœื” ืžืจื™ืฅ ืื•ืชื• ื›ื“ื™ ืœื”ื’ื“ื™ืจ ืืช ื”ืจืฉืช ืขื‘ื•ืจ ื”ืคื•ื“ ืขื ื”ืคืขืœืชื•. ื‘ืžืงืจื” ืฉืœ containerd, ืชื•ืกืฃ CNI ืžื•ืคืขืœ ืขืœ ื™ื“ื™ ื”ืคืœืื’ื™ืŸ Containerd CRI.

ื™ืชืจื” ืžื›ืš, ืœื›ืœ ืกืคืง ื™ืฉ ืกื•ื›ืŸ ืžืฉืœื•. ื”ื•ื ืžื•ืชืงืŸ ื‘ื›ืœ ื”ืฆืžืชื™ื ืฉืœ Kubernetes ื•ื”ื•ื ืื—ืจืื™ ืขืœ ืชืฆื•ืจืช ื”ืจืฉืช ืฉืœ ื”ืคื•ื“ื™ื. ืกื•ื›ืŸ ื–ื” ื›ืœื•ืœ ื‘ืชืฆื•ืจืช ื”-CNI ืื• ื™ื•ืฆืจ ืื•ืชื• ื‘ืื•ืคืŸ ืขืฆืžืื™ ื‘ืฆื•ืžืช. ื”ืชืฆื•ืจื” ืขื•ื–ืจืช ืœืคืœืื’ื™ืŸ CRI ืœื”ื’ื“ื™ืจ ืœืื™ื–ื” ืชื•ืกืฃ CNI ืœื”ืชืงืฉืจ.

ื ื™ืชืŸ ืœื”ืชืื™ื ืื™ืฉื™ืช ืืช ื”ืžื™ืงื•ื ืฉืœ ืชืฆื•ืจืช ื”-CNI; ื›ื‘ืจื™ืจืช ืžื—ื“ืœ ื”ื•ื ื ืžืฆื ื‘ /etc/cni/net.d/<config-file>. ืžื ื”ืœื™ ืืฉื›ื•ืœื•ืช ืื—ืจืื™ื ื’ื ืœื”ืชืงื ืช ืชื•ืกืคื™ CNI ื‘ื›ืœ ืฆื•ืžืช ืืฉื›ื•ืœ. ื’ื ืžื™ืงื•ืžื ื ื™ืชืŸ ืœื”ืชืืžื” ืื™ืฉื™ืช; ืกืคืจื™ื™ืช ื‘ืจื™ืจืช ืžื—ื“ืœ - /opt/cni/bin.

ื‘ืขืช ืฉื™ืžื•ืฉ ื‘-containerd, ื ื™ืชืŸ ืœื”ื’ื“ื™ืจ ืืช ื”ื ืชื™ื‘ื™ื ืขื‘ื•ืจ ืชืฆื•ืจืช ื”ืคืœืื’ื™ืŸ ื•ื”ืงื‘ืฆื™ื ื”ื‘ื™ื ืืจื™ื™ื ื‘ืงื˜ืข [plugins.ยซio.containerd.grpc.v1.criยป.cni] ะฒ ืงื•ื‘ืฅ ื”ืชืฆื•ืจื” ืฉืœ containerd.

ืžื›ื™ื•ื•ืŸ ืฉืื ื• ืžืฉืชืžืฉื™ื ื‘-Flannel ื›ืกืคืง ื”ืจืฉืช ืฉืœื ื•, ื‘ื•ืื• ื ื“ื‘ืจ ืงืฆืช ืขืœ ื”ื”ื’ื“ืจื”:

  • ืคืœืื ืœื“ (ื”ื“ืžื•ืŸ ืฉืœ ืคืœื ืœ) ืžื•ืชืงืŸ ื‘ื“ืจืš ื›ืœืœ ื‘ืืฉื›ื•ืœ ื›-DaemonSet ืขื install-cni ื›ืžื• ืžื™ื›ืœ init.
  • Install-cni ื™ื•ืฆืจ ืงื•ื‘ืฅ ืชืฆื•ืจื” ืฉืœ CNI (/etc/cni/net.d/10-flannel.conflist) ื‘ื›ืœ ืฆื•ืžืช.
  • ืคืœื ืœื“ ื™ื•ืฆืจ ื”ืชืงืŸ vxlan, ืžืื—ื–ืจ ืžื˜ื-ื ืชื•ื ื™ื ืฉืœ ื”ืจืฉืช ืžืฉืจืช ื”-API ื•ืžื ื˜ืจ ืขื“ื›ื•ื ื™ ืชืจืžื™ืœื™ื. ื›ืฉื”ื ื ื•ืฆืจื™ื, ื”ื•ื ืžืคื™ืฅ ืžืกืœื•ืœื™ื ืœื›ืœ ื”ืชืจืžื™ืœื™ื ื‘ืจื—ื‘ื™ ื”ืืฉื›ื•ืœ.
  • ืžืกืœื•ืœื™ื ืืœื• ืžืืคืฉืจื™ื ืœืชืจืžื™ืœื™ื ืœืชืงืฉืจ ื–ื” ืขื ื–ื” ื‘ืืžืฆืขื•ืช ื›ืชื•ื‘ื•ืช IP.

ืœืžื™ื“ืข ืžืคื•ืจื˜ ื™ื•ืชืจ ืขืœ ืขื‘ื•ื“ืชื• ืฉืœ ืคืœื ืœ, ืื ื™ ืžืžืœื™ืฅ ืœื”ืฉืชืžืฉ ื‘ืงื™ืฉื•ืจื™ื ื‘ืกื•ืฃ ื”ืžืืžืจ.

ืœื”ืœืŸ ืชืจืฉื™ื ืฉืœ ื”ืื™ื ื˜ืจืืงืฆื™ื” ื‘ื™ืŸ ืชื•ืกืฃ Containerd CRI ืœืชื•ืกืคื™ CNI:

ื›ื™ืฆื“ ืคื•ื“ Kubernetes ืžืงื‘ืœ ื›ืชื•ื‘ืช IP?

ื›ืคื™ ืฉื ื™ืชืŸ ืœืจืื•ืช ืœืขื™ืœ, ื”-kubelet ืงื•ืจื ืœืคืœืื’ื™ืŸ Containerd CRI ื›ื“ื™ ืœื™ืฆื•ืจ ืืช ื”ืคื•ื“, ื•ืœืื—ืจ ืžื›ืŸ ืงื•ืจื ืœืคืœืื’ื™ืŸ CNI ื›ื“ื™ ืœื”ื’ื“ื™ืจ ืืช ื”ืจืฉืช ืฉืœ ื”ืคื•ื“. ืชื•ืš ื›ื“ื™ ื›ืš, ืชื•ืกืฃ ื”-CNI ืฉืœ ืกืคืง ื”ืจืฉืช ืงื•ืจื ืœืชื•ืกืคื™ CNI ืœื™ื‘ื” ืื—ืจื™ื ื›ื“ื™ ืœื”ื’ื“ื™ืจ ื”ื™ื‘ื˜ื™ื ืฉื•ื ื™ื ืฉืœ ื”ืจืฉืช.

ืื™ื ื˜ืจืืงืฆื™ื” ื‘ื™ืŸ ืชื•ืกืคื™ื ืฉืœ CNI

ื™ืฉื ื ืชื•ืกืคื™ื ืฉื•ื ื™ื ืฉืœ CNI ืฉืชืคืงื™ื“ื ืœืกื™ื™ืข ื‘ื”ื’ื“ืจืช ืชืงืฉื•ืจืช ืจืฉืช ื‘ื™ืŸ ืงื•ื ื˜ื™ื™ื ืจื™ื ื‘ืžืืจื—. ืžืืžืจ ื–ื” ื™ื“ื•ืŸ ื‘ืฉืœื•ืฉื” ืžื”ื.

ืคืœืื ืœ ืชื•ืกืฃ CNI

ื›ืืฉืจ ืžืฉืชืžืฉื™ื ื‘-Flannel ื›ืกืคืง ืจืฉืช, ืจื›ื™ื‘ ื”-CRI ืฉืœ Containerd ืžืชืงืฉืจ ืคืœืื ืœ ืชื•ืกืฃ CNIื‘ืืžืฆืขื•ืช ืงื•ื‘ืฅ ื”ืชืฆื•ืจื” ืฉืœ 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
      }
    }
  ]
}

ื”ืชื•ืกืฃ Flanell CNI ืขื•ื‘ื“ ื‘ืฉื™ืœื•ื‘ ืขื Flanelleld. ื‘ืžื”ืœืš ื”ืืชื—ื•ืœ, ืคืœื ืœื“ ืžืื—ื–ืจ podCIDR ื•ืคืจื˜ื™ื ืื—ืจื™ื ื”ืงืฉื•ืจื™ื ืœืจืฉืช ืžืฉืจืช ื”-API ื•ืฉื•ืžืจ ืื•ืชื ื‘ืงื•ื‘ืฅ /run/flannel/subnet.env.

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

ื”ืคืœื ืœ CNI ืžืฉืชืžืฉ ื‘ื ืชื•ื ื™ื ืž /run/flannel/subnet.env ื›ื“ื™ ืœื”ื’ื“ื™ืจ ื•ืœื”ืชืงืฉืจ ืœืคืœืื’ื™ืŸ ื’ืฉืจ CNI.

CNI plugin Bridge

ืชื•ืกืฃ ื–ื” ื ืงืจื ืขื ื”ืชืฆื•ืจื” ื”ื‘ืื”:

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

ื›ืืฉืจ ืงื•ืจืื™ื ืœื• ื‘ืคืขื ื”ืจืืฉื•ื ื”, ื”ื•ื ื™ื•ืฆืจ ื’ืฉืจ ืœื™ื ื•ืงืก ืขื ยซnameยป: ยซcni0ยป, ืฉืžืฆื•ื™ืŸ ื‘ืชืฆื•ืจื”. ืœืื—ืจ ืžื›ืŸ ื ื•ืฆืจ ื–ื•ื’ ื•ื•ืช' ืขื‘ื•ืจ ื›ืœ ืชืจืžื™ืœ. ืงืฆื” ืื—ื“ ืฉืœื• ืžื—ื•ื‘ืจ ืœืžืจื—ื‘ ื”ืฉืžื•ืช ืฉืœ ื”ืจืฉืช ืฉืœ ื”ืžื›ื•ืœื”, ื”ืงืฆื” ื”ืฉื ื™ ื›ืœื•ืœ ื‘ื’ืฉืจ ืœื™ื ื•ืงืก ื‘ืจืฉืช ื”ืžืืจื—ืช. CNI plugin Bridge ืžื—ื‘ืจ ืืช ื›ืœ ื”ืงื•ื ื˜ื™ื™ื ืจื™ื ื”ืžืืจื— ืœื’ืฉืจ ืœื™ื ื•ืงืก ื‘ืจืฉืช ื”ืžืืจื—ืช.

ืœืื—ืจ ืฉืกื™ื™ื ืœื”ื’ื“ื™ืจ ืืช ืฆืžื“ ื”-Veth, ืชื•ืกืฃ Bridge ืงื•ืจื ืœืคืœืื’ื™ืŸ IPAM CNI ื”ืžืงื•ืžื™ ื”ืžืืจื—. ื ื™ืชืŸ ืœื”ื’ื“ื™ืจ ืืช ืกื•ื’ ื”ืคืœืื’ื™ืŸ ืฉืœ IPAM ื‘ืชืฆื•ืจืช ื”-CNI ืฉื‘ื” ืžืฉืชืžืฉ ื”ืคืœืื’ื™ืŸ ืฉืœ ื”-CRI ื›ื“ื™ ืœืงืจื•ื ืœืคืœืื ืœ CNI.

ืชื•ืกืคื™ื IPAM CNI ืžืงื•ืžื™ื™ื ืžืืจื—

ื’ืฉืจ ืฉื™ื—ื•ืช CNI ืชื•ืกืฃ IPAM CNI ืžืงื•ืžื™ ืžืืจื— ืขื ื”ืชืฆื•ืจื” ื”ื‘ืื”:

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

ืชื•ืกืฃ IPAM ืžืงื•ืžื™ ืžืืจื— (IP Address Management - ื ื™ื”ื•ืœ ื›ืชื•ื‘ื•ืช IP) ืžื—ื–ื™ืจื” ืืช ื›ืชื•ื‘ืช ื”-IP ืขื‘ื•ืจ ื”ืงื•ื ื˜ื™ื™ื ืจ ืžืจืฉืช ื”ืžืฉื ื” ื•ืžืื—ืกื ืช ืืช ื”-IP ื”ืžื•ืงืฆื” ืขืœ ื”ืžืืจื— ื‘ืกืคืจื™ื™ื” ื”ืžืฆื•ื™ื ืช ื‘ืกืขื™ืฃ dataDir - /var/lib/cni/networks/<network-name=cni0>/<ip>. ืงื•ื‘ืฅ ื–ื” ืžื›ื™ืœ ืืช ื”ืžื–ื”ื” ืฉืœ ื”ืžื›ื•ืœื” ืฉืืœื™ื• ืžื•ืงืฆื™ืช ื›ืชื•ื‘ืช ื”-IP ื”ื–ื•.

ื‘ืขืช ืงืจื™ืื” ืœืคืœืื’ื™ืŸ IPAM ื”ืžืงื•ืžื™ ื”ืžืืจื—, ื”ื•ื ืžื—ื–ื™ืจ ืืช ื”ื ืชื•ื ื™ื ื”ื‘ืื™ื:

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

ืชืงืฆื™ืจ

Kube-controller-manager ืžืงืฆื” podCIDR ืœื›ืœ ืฆื•ืžืช. ื”ืคื•ื“ื™ื ืฉืœ ื›ืœ ืฆื•ืžืช ืžืงื‘ืœื™ื ื›ืชื•ื‘ื•ืช IP ืžืžืจื—ื‘ ื”ื›ืชื•ื‘ื•ืช ื‘ื˜ื•ื•ื— ื”-podCIDR ื”ืžื•ืงืฆื”. ืžื›ื™ื•ื•ืŸ ืฉื”-podCIDRs ืฉืœ ื”ืฆืžืชื™ื ืื™ื ื ื—ื•ืคืคื™ื, ื›ืœ ื”ืคื•ื“ื™ื ืžืงื‘ืœื™ื ื›ืชื•ื‘ื•ืช IP ื™ื™ื—ื•ื“ื™ื•ืช.

ืžื ื”ืœ ื”ืืฉื›ื•ืœ ืฉืœ Kubernetes ืžื’ื“ื™ืจ ื•ืžืชืงื™ืŸ ืืช kubelet, ื–ืžืŸ ื”ืจื™ืฆื” ืฉืœ ืงื•ื ื˜ื™ื™ื ืจ, ืกื•ื›ืŸ ืกืคืง ื”ืจืฉืช, ื•ืžืขืชื™ืง ืืช ื”ืชื•ืกืคื™ื ืฉืœ CNI ืœื›ืœ ืฆื•ืžืช. ื‘ืžื”ืœืš ื”ื”ืคืขืœื”, ืกื•ื›ืŸ ืกืคืง ื”ืจืฉืช ื™ื•ืฆืจ ืชืฆื•ืจืช CNI. ื›ืืฉืจ ืคื•ื“ ืžืชื•ื–ืžืŸ ืœืฆื•ืžืช, ื”ืงื•ื‘ืœื˜ ืงื•ืจื ืœืคืœืื’ื™ืŸ CRI ื›ื“ื™ ืœื™ืฆื•ืจ ืื•ืชื•. ืœืื—ืจ ืžื›ืŸ, ืื ื ืขืฉื” ืฉื™ืžื•ืฉ ื‘-containerd, ื”ืคืœืื’ื™ืŸ Containerd CRI ืงื•ืจื ืœืคืœืื’ื™ืŸ CNI ืฉืฆื•ื™ืŸ ื‘ืชืฆื•ืจืช ื”-CNI ื›ื“ื™ ืœื”ื’ื“ื™ืจ ืืช ื”ืจืฉืช ืฉืœ ื”ืคื•ื“. ื›ืชื•ืฆืื” ืžื›ืš, ื”ืคื•ื“ ืžืงื‘ืœ ื›ืชื•ื‘ืช IP.

ืœืงื— ืœื™ ืงืฆืช ื–ืžืŸ ืœื”ื‘ื™ืŸ ืืช ื›ืœ ื”ื“ืงื•ื™ื•ืช ื•ื”ื ื™ื•ืื ืกื™ื ืฉืœ ื›ืœ ื”ืื™ื ื˜ืจืืงืฆื™ื•ืช ื”ืืœื”. ืื ื™ ืžืงื•ื•ื” ืฉื”ื—ื•ื•ื™ื” ื”ื–ื• ืชืขื–ื•ืจ ืœืš ืœื”ื‘ื™ืŸ ื˜ื•ื‘ ื™ื•ืชืจ ืื™ืš Kubernetes ืขื•ื‘ื“. ืื ืื ื™ ื˜ื•ืขื” ื‘ืžืฉื”ื•, ืื ื ืฆื•ืจ ืื™ืชื™ ืงืฉืจ ื‘ื›ืชื•ื‘ืช ื˜ื•ื™ื˜ืจ ืื• ื‘ื›ืชื•ื‘ืช [ืžื•ื’ืŸ ื‘ื“ื•ื"ืœ]. ืืœ ืชื”ืกืก ืœืคื ื•ืช ืื ืชืจืฆื” ืœื“ื•ืŸ ื‘ื”ื™ื‘ื˜ื™ื ืฉืœ ืžืืžืจ ื–ื” ืื• ื›ืœ ื“ื‘ืจ ืื—ืจ. ืืฉืžื— ืœืฉื•ื—ื— ืื™ืชืš!

ืชื–ื›ื•ืจ

ืžื›ื•ืœื•ืช ื•ืจืฉืช

ืื™ืš ืคืœื ืœ ืขื•ื‘ื“?

CRI ื•-CNI

ื .ื‘ ืžื”ืžืชืจื’ื

ืงืจื ื’ื ื‘ื‘ืœื•ื’ ืฉืœื ื•:

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”