Kubernetes学习笔记(三十五):Cluster Networking、Pod Networking、CNI in kubernetes、CNI weave
Cluster Networking
kubernetes集群由master node和worker node组成。每个节点必须至少有一个连接到网络的接口,每个接口必须配置一个IP地址,host必须设置唯一的主机名以及唯一的mac地址。如果通过现在VM克隆来创建VM,则应特别注意这一点。还有一些端口也需要打开,这些由控制平面中的各种组件使用。
因此,当您在防火墙中为节点设置网络时,或者在GCP、Azure或AWS等云环境中设置ip表规则或网络安全组时,请考虑这些问题。
Pod Networking
到目前为止,k8s还没有为此提供内置解决方案,它希望您实施一个网络解决方案来解决这些难题。
但是k8s已经明确列出了对pod networking的要求:
- 每个POD都应该有一个IP地址
- 每个POD都应该能够与同一节点中的其他POD通信
- 每个POD应该能够在没有NAT的情况下与其他节点上的每个其他POD通信
步骤:
- 在每个节点上创建一个bridge网络
ip link add v-net-0 type bridge
- 然后
ip link set dev v-net-0 up
- 设置bridge的IP地址
ip addr add 10.244.1.0/24 dev v-net-0
- 向默认网关添加IP地址
ip route add 10.244.1.0/24 via 192.168.15.5
但与其在每台服务器上配置路由,不如在路由器上配置路由。如果您的网络中有一个网关,并指定所有主机使用该网关作为默认网关,这样,您就可以轻松地管理路由器上路由表中所有网络的路由。
然后,我们编写了一个脚本,可以为每个容器运行该脚本,那么当我们在 k8s 上创建端口时,我们如何自动运行脚本呢?这就是 CNI 充当中间人的原因。CNI 告诉 k8s,这是您在创建容器后应该立即调用脚本的方式。
根据 CNI 标准,脚本应该有 ADD
和 DEL
部分。
执行步骤:
kubelet
在运行时查看之前的配置--cni-conf-dir=/etc/cni/net.d
并识别脚本名称- 然后在目录
--cni-bin-dir=/etc/cni/bin
中寻找脚本 - 使用命令
./net-script.sh add <container> <namespace>
执行脚本
CNI in kubernetes
ps -aux | grep kubelet
:查看设置为CNI的网络插件和一些与CNI相关的其他选项,如CNI bin目录和CNI config目录
ls /opt/cni/bin
:bin目录包含所有支持的CNI插件作为可执行文件,如bridge、DHCP、flannel等
ls /etc/cni/net.d
:conf文件是kubelet查找需要使用哪个插件的地方
CNI weave
weave CNI插件部署在集群上,会在每个节点上部署一个代理或服务
一个pod可以连接到多个bridge
安装:kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')&env.IPALLOC_RANGE=10.50.0.0/16"
,可以指定IP范围以防止和host系统IP重叠