当前位置:   article > 正文

kubernates的网络设置flannel_kube-flannel-cfg设置网卡的参数是哪个

kube-flannel-cfg设置网卡的参数是哪个
K8s网络说明
一、docker

bridge:容器的默认网络
joined:使用别的容器的网络空间
open:容器直接共享宿主机的网络空间
none:不使用网络空间

二、Kubernetes网络通信:

容器间通信:同一个Pod内的多个容器间的通信
Pod通信:Pod IP <=> Pod IP
Pod与Service通信: Pod IP <=> ClusterIP
Service与集群外部客户端的通信

kubernetes集群内的网络需要借助网络插件来解决;
CNI:(Container Network Interface)常用的网络插件有:

flannel (部署简单,支持网络地址分配,但不支持网络策略)
calico (部署麻烦,支持网络地址分配,也支持网络策略,而且支持基于BGP协议实现三层网络路由)
canel (flannel与calico的组合)
kube-router (由kubernetes研发的网络插件)

flannel
支持多种后端

  1. Vxlan 扩展的虚拟局域网(V虚拟的,X扩展的,lan局域网)

vxlan:
flannel默认使用VxLAN方式来作为后端网络传输方式的;使用网络叠加方式,通过隧道(主机网卡中的flannel.x,默认为10.244.0.0 255.255.255.255)专门封装隧道协议报文的,而且一旦后端存在被分配到网络地址的pod时,会创建一个cni接口,而且cni的网络地址与flannel在同一网段。可以理解为类似于四层隧道的协议。VxLAN因为要进行封装多层报文,是额外开销,所以使得性能相对于其他方式较弱一点,但好在可以单独管理一个网络,而且物理网络之间是彼此不相干扰的。

Dirextrouting:
若集群过于庞大,则避免不了跨网段通信,或者既想使用VxLAN可以跨网段的特性,又想host-gw的高性能,我们可以设置为Directrouting,使其同网段的用host-gw,不同网段的自动使用VxLAN网络叠加。

  1. Host-gw:host Gateway主机网关

把主机自己的网络接口当作网关使用,使Pod的网络地址能通过此接口对外进行传递信息。
报文通过路由到达对方,而不会通过隧道网络叠加,所以这种比VxLAN性能高一点。
但是这种方式要求每个节点必须工作在同一网络中,不推荐,只能在二层网络中,不支持跨网络,如果有成千上万的Pod,容易产生广播风暴

  1. UDP:性能差

查看CNI使用的网络插件(master)

[root@master ~]# cat /etc/cni/net.d/10-flannel.conflist 
{
  "name": "cbr0",
  "plugins": [
    {
      "type": "flannel",
      "delegate": {
        "hairpinMode": true,
        "isDefaultGateway": true
      }
    },
    {
      "type": "portmap",
      "capabilities": {
        "portMappings": true  #端口映射
      }
    }
  ]
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

注意:使用adm安装的k8s的插件flannel是使用的容器的形式

修改flannel的工作模式为VxLAN+Directrouting(参考下面两步)
一. 检查现在网络情况(注意:若要使修改生效,必须重装flannel插件,此修改最好在搭建K8S集群时做修改,不要在集群使用中做修改,否则会影响到所有使用flannel的后端客户端无法通信。)

1、找到flannel的configmap(该文件在“Kubernetes安装部署Master、Node”中的“14、安装 pod 网络附加组件”章节中有描述,可下载到本地即可修改,uat环境在:/srv/k8s-deploy/kubeadm_v1.11.0/kube-flannel.yml),
查看当前flannel的工作模式:

kubectl get cm kube-flannel-cfg -n kube-system -o yaml
  • 1

找到如下段:

net-conf.json: |
                {
                    "Network": "10.244.0.0/16",
                    "Backend": {
                        "Type": "vxlan"
                }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  1. 通过在node节点查看路由:
[root@k8s-node1 ~]# ip route show
default via 172.16.1.1 dev ens33 proto static metric 100
10.244.0.0/24 via 10.244.0.0 dev flannel.1 onlink
10.244.1.0/24 via 10.244.1.0 dev flannel.1 onlink 
10.244.2.0/24 dev cni0 proto kernel scope link src 10.244.2.1
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1
172.16.1.0/24 dev ens33 proto kernel scope link src 172.16.1.103 metric 100
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

可以看到,10.244.0.0<–>10.244.1.0是通过flannel.1网卡通信,不管是同网段还是不同网段,显然是通过隧道封装过的。

  1. 查看flannel.1网卡情况
 [root@k8s-node1 ~]#  ip addr s flannel.1
4: flannel.1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UNKNOWN
    link/ether 7e:ce:07:7e:b9:7d brd ff:ff:ff:ff:ff:ff
    inet 10.244.7.0/32 scope global flannel.1
       valid_lft forever preferred_lft forever
    inet6 fe80::7cce:7ff:fe7e:b97d/64 scope link
       valid_lft forever preferred_lft forever
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
二、在master上修改配置文件 kube-flannel.yaml,并重新生成网络

1、在kube-flannel.yaml中找到如下一段,修改配置清单的net-conf.json段,加入Directrouting

net-conf.json: |
				 {
					 "Network": "10.244.0.0/16",
					 "Backend": {
					"Type": "vxlan",
				 	"Directrouting": true  #默认没有这段,若要修改,必须重装flannel插件!!!
				 }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

2、在master上部署修改过的flannel插件:

[root@dev15 kubeadm_v1.11.0]#kubectl delete -f kube-flannel.yaml
[root@dev15 kubeadm_v1.11.0]#kubectl apply -f kube-flannel.yaml
  • 1
  • 2

3、查看节点路由表:

[root@dev15 kubeadm_v1.11.0]#ip route show
default via 172.16.1.1 dev ens33 proto static metric 100
10.244.0.0/24 via 172.16.1.100 dev ens33
10.244.1.0/24 via 172.16.1.102 dev ens33
10.244.2.0/24 dev cni0 proto kernel scope link src 10.244.2.1
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1
 172.16.1.0/24 dev ens33 proto kernel scope link src 172.16.1.103 metric 100
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

可以看出,10.244.0.0<–>10.244.1.0是通过宿主机网卡ens33通信的,明显看出是直接路由,同网段的用cni0接口直接转发,不同网段用ens33接口直接路由。

卸载网络
方法一 卸载flannel网络步骤:

第一步,在master节点删除flannel

[root@dev15 kubeadm_v1.11.0]#kubectl delete -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml(文件有可能在本地,有可能用网上的,这里用的网上的,最好下载到本地)
  • 1

第二步,在node节点清理flannel网络留下的文件(最好按照现有分段一段段执行,全部执行有问题)

systemctl stop kubelet

systemctl stop docker

ifconfig cni0 down
ip link delete cni0
ifconfig flannel.1 down
ip link delete flannel.1
rm -rf /var/lib/cni/
rm -f /etc/cni/net.d/*


systemctl start docker

systemctl  restart kubelet
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
方法二 删除节点,清除网络,重新加入:

第一步,在master节点删除flannel

[root@dev15 kubeadm_v1.11.0]#kubectl delete node **nodename**
  • 1

第二步,重置node,并清理flannel网络留下的文件(最好按照现有分段一段段执行,全部执行有问题)

kubeadm reset

systemctl stop kubelet

systemctl stop docker

rm -rf /var/lib/cni/
rm -rf /etc/cni/net.d/*
rm -rf /var/lib/kubelet/*
ifconfig cni0 down
ifconfig flannel.1 down
ifconfig docker0 down
ip link delete cni0
ip link delete flannel.1

systemctl start docker

systemctl  restart kubelet
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

第三步、将node节点挂载到master上(这个是master生成的token)

kubeadm join 172.26.48.4:6443 --token qc1eie.tviq9mcibgdssqgm \
    --discovery-token-ca-cert-hash sha256:4502298f771b00714e6f65e9a34a8f5651094aac917f1d42e9bcaf20658525bf
  • 1
  • 2

如果 token 失效或者没有token,请在master机器上运行如下命令获得token

kubeadm token create --print-join-command
  • 1
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/128366
推荐阅读
相关标签
  

闽ICP备14008679号