Bota5ky

Kubernetes学习笔记(三十五):Cluster Networking、Pod Networking、CNI in kubernetes、CNI weave

Cluster Networking


kubernetes集群由master node和worker node组成。每个节点必须至少有一个连接到网络的接口,每个接口必须配置一个IP地址,host必须设置唯一的主机名以及唯一的mac地址。如果通过现在VM克隆来创建VM,则应特别注意这一点。还有一些端口也需要打开,这些由控制平面中的各种组件使用。


参考文档:https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/#check-required-ports

因此,当您在防火墙中为节点设置网络时,或者在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 标准,脚本应该有 ADDDEL 部分。

执行步骤:

  • 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重叠

posted @ 2022-09-17 21:29  Bota5ky  阅读(54)  评论(0编辑  收藏  举报