ืืขืจื. ืชืจืืื: ืืืืจ ืื, ืฉื ืืชื ืขื ืืื ืืื ืืก SRE ื-LinkedIn, ืืคืจื ืืช ืืงืกื ืืคื ืืื ื-Kubernetes - ืืืชืจ ืืืืง, ืืืื ืืจืืงืฆืื ืฉื CRI, CNI ื-kube-apiserver - ืฉืงืืจื ืืืฉืจ ืืคืื ืืื ืฆืจืื ืืืงืฆืืช ืืชืืืช IP.
ืืืช ืืืจืืฉืืช ืืืกืืกืืืช
ืืฉืืชืืืชื ืืขืืื ืขื Kubernetes, ืื ืืื ืืจืืจ ืื ืืืืจื ืืื ืืืืืง ืคืืืื ืืงืืืื ืืช ืืชืืืืช ื-IP ืฉืืื. ืืคืืื ืขื ืืื ื ืฉื ืืืคื ืคืขืืืชื ืฉื ืืจืืืืื ืืืืืืื, ืืื ืงืฉื ืืืืืื ืืืชื ืขืืืืื ืืื. ืืืืืื, ืืืขืชื ืืื ืืืืขืืื ืชืืกืคืื ืฉื CNI, ืืื ืื ืืื ืื ืืืฉื ืืื ืืืืืง ืงืืจืืื ืืื. ืืื, ืืืืืชื ืืืชืื ืืืืจ ืื ืืื ืืืืืง ืืืข ืขื ืจืืืื ืืจืฉืช ืืฉืื ืื ืืืืฆื ืื ืคืืขืืื ืืื ืืืฉืืื Kubernetes, ืืืืคืฉืจ ืืื ืคืื ืืงืื ืืชืืืช IP ืืืืืืืช ืืฉืื.
ืืฉื ื ืืจืืื ืฉืื ืืช ืืืจืื ืจืฉืช ื-Kubernetes, ืืืืืง ืืื ืฉืืฉ ืืคืฉืจืืืืช ืฉืื ืืช ืฉื ืืื ืจืืฆื ืืงืื ืืืื ืจืื. ืคืจืกืื ืื ืืฉืชืืฉ
ืืื ืืืฉืื ืืกืื
ืงืื ืืืื ืจืื ืืืจืฉืช: ืกืงืืจื ืงืฆืจื
ืืฉ ืืจืื ืคืจืกืืืื ืืฆืืื ืื ืืืื ืืจื ื ืฉืืกืืืจืื ืืื ืงืื ืืืื ืจืื ืืชืงืฉืจืื ืื ืขื ืื ืืจื ืืจืฉืช. ืืื, ืืชื ืจืง ืกืงืืจื ืืืืืช ืฉื ืืืืฉืืื ืืืกืืกืืื ืืืืืื ืืช ืขืฆืื ืืืืฉื ืืืช, ืืืืืืช ืืฆืืจืช ืืฉืจ ืืื ืืงืก ืืืงืืขืช ืืืืืืช. ืคืจืืื ื ืฉืืืื, ืืืืืื ืฉืื ืืฉื ืฉื ืจืฉืช ืงืื ืืืื ืจ ืขืฆืื ืจืืื ืืืืืจ ื ืคืจื. ืงืืฉืืจืื ืืืื ืคืจืกืืืื ืืขืื ืชืืื ืืช ืืืื ืืืืืช ืืืืืื ืืกืืคืงื ืืืื.
ืืืืืื ืขื ืืืจื ืืื
ืืจื ืืืช ืืืจืื ืชืงืฉืืจืช ืืืืฆืขืืช ืืชืืืืช IP ืืื ืงืื ืืืื ืจืื ืืคืืขืืื ืขื ืืืชื ืืืจื ืืืืืช ืืฆืืจืช ืืฉืจ ืืื ืืงืก. ืืฉื ืื, ืืืฉืืจืื ืืืจืืืืืืื ื ืืฆืจืื ื-Kubernetes (ื- Docker)
ืืื ืืงืื ืืืื ืจืื ืืืืชื ืืืจื ืืฉ ืงืฆื ืืื ืฉื ื-Veth ืืืืืืจ ืืืฉืจ ืฉืืจืื ืื ืืืืืื ืืชืงืฉืจ ืื ืขื ืื ืืืืฆืขืืช ืืชืืืืช IP. ืืืฉืจ ืืื ืืงืก ืืฉ ืื ืืชืืืช IP ืืืื ืืฉืืฉ ืืฉืขืจ ืืชืขืืืจืช ืืฆืืื ืืืคืืืื ืืืืืขืืื ืืฆืืชืื ืืืจืื.
ืืืืืื ืขื ืืืจืืื ืฉืื ืื
Encapsulation ืฉื ืื ืืช ืืื ืฉืืื ืืืช ืืืืคืฉืจืช ืืืืืืื ืืฆืืชืื ืฉืื ืื ืืชืงืฉืจ ืื ืขื ืื ืืืืฆืขืืช ืืชืืืืช IP. ื-Flannel, ืืืื ืืืืืื ืืืจืืืช ืืืืืื ืืช ืื.
ืืืฉืืื Kubernetes, Flannel ืืืฆืจ ืืืฉืืจ vxlan ืืืขืืื ืืช ืืืืช ืืืกืืืืื ืืื ืฆืืืช ืืืชืื. ืื ืืืืื ืืืืืขืืช ืืืืื ืืืืจื ืืืจ ืขืืืจืช ืืจื ืืชืงื vxlan ืืืืืืขืช ืืืืืืช UDP. ืืืขื, ืืืืืื ืืืงืื ื ืช ืืืืืฆืช ืืืืขืืจืช ืืชืจืืื ืืจืฆืื.
ืืขืจื: ืืืื ืจืง ืืจื ืืืช ืืืจืื ืชืงืฉืืจืช ืจืฉืช ืืื ืงืื ืืืื ืจืื.
ืื ืื CRI?
ืื ืื CNI?
ืืงืฆืืช ืจืฉืชืืช ืืฉื ื ืืฆืืชืื ืืืงืฆืืช ืืชืืืืช IP ืืชืจืืืืื
ืืืืืื ืฉืืื ืคืื ืืืฉืืื ืืืืืช ืืืืืช ืืชืืืช IP, ืืฉืื ืืืืื ืฉืืชืืืช ืื ืชืืื ืืืืืืืช. ืื ืืืฉื ืขื ืืื ืืงืฆืืช ืื ืฆืืืช ืชืช-ืจืฉืช ืืืืืืืช, ืฉืืื ื ืืืงืฆืืช ืืชืจืืืืื ืืืืชื ืฆืืืช ืืชืืืืช IP.
ืืงืจ IPAM ืฉื ืฆืืืช
ืืืฉืจ nodeipam
ืืืขืืจ ืืคืจืืืจ ืืื --controllers
ืืฆืืืช Kubernetes ืืืงืฆื podCIDR ืืืฉืจ ืืื ืจืฉืื ืืชืืืื ืืืฉืืื. ืืื ืืฉื ืืช ืืช ื-podCIDR ืฉื ืฆืืชืื, ืขืืื ืืืื ืืช ืืจืืฉืื ืฉืืื ืืื ืืจืฉืื ืืืชื ืืืืฉ, ืชืื ืืืฆืืข ืฉืื ืืืื ืืชืืืืื ืืชืฆืืจืช ืฉืืืช ืืืงืจื ืฉื Kubernetes ืืื ืืื. ืืชื ืืืื ืืืฆืื ืืช ื-podCIDR ืฉื ืฆืืืช ืืืืฆืขืืช ืืคืงืืื ืืืื:
$ kubectl get no <nodeName> -o json | jq '.spec.podCIDR'
10.244.0.0/24
Kubelet, ืืื ืจืืฆื ืฉื ืืืื ืืชืืกืคื CNI: ืืื ืืื ืขืืื
ืชืืืื ืชืจืืื ืืื ืฆืืืช ืืจืื ืืืจืื ืฉืืื ืืื ื. ืืืืง ืื ืืชืืงื ืจืง ืืืื ืฉืงืฉืืจืืช ืืฉืืจืืช ืืืงืืช ืจืฉืช ืคืืืื.
ืชืืืื ืคืื ืืฆืืืช ืืกืืื ืืคืขืื ืืช ืฉืจืฉืจืช ืืืืจืืขืื ืืืื:
ืขืืจื:
ืืื ืืจืืงืฆืื ืืื ืืื ืจืืฆื ืฉื ืืืื ืืชืืกืคื CNI
ืืื ืกืคืง ืจืฉืช ืืฉ ืชืืกืฃ CNI ืืฉืื. ืืื ืืจืืฆื ืฉื ืืืืืื ืืจืืฅ ืืืชื ืืื ืืืืืืจ ืืช ืืจืฉืช ืขืืืจ ืืคืื ืขื ืืคืขืืชื. ืืืงืจื ืฉื containerd, ืชืืกืฃ CNI ืืืคืขื ืขื ืืื ืืคืืืืื
ืืชืจื ืืื, ืืื ืกืคืง ืืฉ ืกืืื ืืฉืื. ืืื ืืืชืงื ืืื ืืฆืืชืื ืฉื Kubernetes ืืืื ืืืจืื ืขื ืชืฆืืจืช ืืจืฉืช ืฉื ืืคืืืื. ืกืืื ืื ืืืื ืืชืฆืืจืช ื-CNI ืื ืืืฆืจ ืืืชื ืืืืคื ืขืฆืืื ืืฆืืืช. ืืชืฆืืจื ืขืืืจืช ืืคืืืืื CRI ืืืืืืจ ืืืืื ืชืืกืฃ CNI ืืืชืงืฉืจ.
ื ืืชื ืืืชืืื ืืืฉืืช ืืช ืืืืงืื ืฉื ืชืฆืืจืช ื-CNI; ืืืจืืจืช ืืืื ืืื ื ืืฆื ื /etc/cni/net.d/<config-file>
. ืื ืืื ืืฉืืืืืช ืืืจืืื ืื ืืืชืงื ืช ืชืืกืคื CNI ืืื ืฆืืืช ืืฉืืื. ืื ืืืงืืื ื ืืชื ืืืชืืื ืืืฉืืช; ืกืคืจืืืช ืืจืืจืช ืืืื - /opt/cni/bin
.
ืืขืช ืฉืืืืฉ ื-containerd, ื ืืชื ืืืืืืจ ืืช ืื ืชืืืื ืขืืืจ ืชืฆืืจืช ืืคืืืืื ืืืงืืฆืื ืืืื ืืจืืื ืืงืืข [plugins.ยซio.containerd.grpc.v1.criยป.cni]
ะฒ
ืืืืืื ืฉืื ื ืืฉืชืืฉืื ื-Flannel ืืกืคืง ืืจืฉืช ืฉืื ื, ืืืื ื ืืืจ ืงืฆืช ืขื ืืืืืจื:
- ืคืืื ืื (ืืืืื ืฉื ืคืื ื) ืืืชืงื ืืืจื ืืื ืืืฉืืื ื-DaemonSet ืขื
install-cni
ืืืืืืื init . Install-cni
ืืืฆืจืงืืืฅ ืชืฆืืจื ืฉื CNI (/etc/cni/net.d/10-flannel.conflist
) ืืื ืฆืืืช.- ืคืื ืื ืืืฆืจ ืืชืงื vxlan, ืืืืืจ ืืื-ื ืชืื ืื ืฉื ืืจืฉืช ืืฉืจืช ื-API ืืื ืืจ ืขืืืื ื ืชืจืืืืื. ืืฉืื ื ืืฆืจืื, ืืื ืืคืืฅ ืืกืืืืื ืืื ืืชืจืืืืื ืืจืืื ืืืฉืืื.
- ืืกืืืืื ืืื ืืืคืฉืจืื ืืชืจืืืืื ืืชืงืฉืจ ืื ืขื ืื ืืืืฆืขืืช ืืชืืืืช IP.
ืืืืืข ืืคืืจื ืืืชืจ ืขื ืขืืืืชื ืฉื ืคืื ื, ืื ื ืืืืืฅ ืืืฉืชืืฉ ืืงืืฉืืจืื ืืกืืฃ ืืืืืจ.
ืืืื ืชืจืฉืื ืฉื ืืืื ืืจืืงืฆืื ืืื ืชืืกืฃ Containerd CRI ืืชืืกืคื CNI:
ืืคื ืฉื ืืชื ืืจืืืช ืืขืื, ื-kubelet ืงืืจื ืืคืืืืื Containerd CRI ืืื ืืืฆืืจ ืืช ืืคืื, ืืืืืจ ืืื ืงืืจื ืืคืืืืื CNI ืืื ืืืืืืจ ืืช ืืจืฉืช ืฉื ืืคืื. ืชืื ืืื ืื, ืชืืกืฃ ื-CNI ืฉื ืกืคืง ืืจืฉืช ืงืืจื ืืชืืกืคื CNI ืืืื ืืืจืื ืืื ืืืืืืจ ืืืืืื ืฉืื ืื ืฉื ืืจืฉืช.
ืืื ืืจืืงืฆืื ืืื ืชืืกืคืื ืฉื CNI
ืืฉื ื ืชืืกืคืื ืฉืื ืื ืฉื CNI ืฉืชืคืงืืื ืืกืืืข ืืืืืจืช ืชืงืฉืืจืช ืจืฉืช ืืื ืงืื ืืืื ืจืื ืืืืจื. ืืืืจ ืื ืืืื ืืฉืืืฉื ืืื.
ืคืืื ื ืชืืกืฃ CNI
ืืืฉืจ ืืฉืชืืฉืื ื-Flannel ืืกืคืง ืจืฉืช, ืจืืื ื-CRI ืฉื Containerd ืืชืงืฉืจ /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ยป
, ืฉืืฆืืื ืืชืฆืืจื. ืืืืจ ืืื ื ืืฆืจ ืืื ืืืช' ืขืืืจ ืื ืชืจืืื. ืงืฆื ืืื ืฉืื ืืืืืจ ืืืจืื ืืฉืืืช ืฉื ืืจืฉืช ืฉื ืืืืืื, ืืงืฆื ืืฉื ื ืืืื ืืืฉืจ ืืื ืืงืก ืืจืฉืช ืืืืจืืช.
ืืืืจ ืฉืกืืื ืืืืืืจ ืืช ืฆืื ื-Veth, ืชืืกืฃ Bridge ืงืืจื ืืคืืืืื IPAM CNI ืืืงืืื ืืืืจื. ื ืืชื ืืืืืืจ ืืช ืกืื ืืคืืืืื ืฉื IPAM ืืชืฆืืจืช ื-CNI ืฉืื ืืฉืชืืฉ ืืคืืืืื ืฉื ื-CRI ืืื ืืงืจืื ืืคืืื ื CNI.
ืชืืกืคืื IPAM CNI ืืงืืืืื ืืืจื
ืืฉืจ ืฉืืืืช 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
ื .ื ืืืืชืจืื
ืงืจื ืื ืืืืื ืฉืื ื:
- ยซ
Calico ืื ืืืืจืงืื ื ื-Kubernetes: ืืืืจืืช ืืงืฆืช ื ืืกืืื "; - "ืืืจืื ืืืืืจ ืืจืฉืช ื-Kubernetes":
ืืืงืื 1 ื-2 (ืืื ืจืฉืช, ืจืฉืชืืช ืฉืืืช ืขื) ,ืืืง 3 (ืฉืืจืืชืื ืืขืืืื ืชืขืืืจื) ; - ยซ
Container Networking Interface (CNI) - ืืืฉืง ืจืฉืช ืืชืงื ืืงืื ืืืื ืจืื ืฉื ืืื ืืงืก ".
ืืงืืจ: www.habr.com