k8s网络插件-flannel

来源:kubernetes进阶实战 马永亮注

flannel在每个主机节点运行flannel的二进制代理程序,它负责从预留的网络中按照指定或者默认的掩码长度为当前节点分配一个子网,并将信息存储在etcd中。flannel使用后端的容器网络机制转发跨节点的POD报文,目前主流的后端由vxlan、host-gw

flannel下载:https://github.com/flannel-io/flannel/blob/master/Documentation/kube-flannel.yml

实验环境:

kube-master01:10.0.2.200

kube-node01:10.0.2.201

kube-node02:10.0.2.202

kube-node03:10.0.2.203

kube-node04:10.0.1.204

1、vxlan

默认配置,使用linux内核中的vxlan模块封装报文,以overlay网络模型支持跨节点的pod通信;同时该后端同样支持直接路由模式,该模式下位于同一网段的的node节点之上的pod通信直接通过路由发送,跨网段的node间通信仍然需要vxlan转发。flanneld监听udp端口8472端口 发送数据包

1.1、 默认配置

          修改kube-flannel.yaml文件中的configmap,网段配置为计划的网段和需要用户k8s的网口:

  

  

   在apply之前路由信息:

  

 apply之后在masterhenode都可以看到,到其他网段的都会经过生成的flannel.1接口

新建pod测试:

kind: Namespace
apiVersion: v1
metadata:
  name: test
  namespace: test

---
kind: Deployment
apiVersion: apps/v1
metadata:
  name: test
  namespace: test
spec:
  replicas: 5
  selector:
    matchLabels:
      app: demo
  template:
    metadata:
      name: demo
      namespace: test
      labels:
        app: demo
    spec:
      containers:
      - name: demov10
        image: ikubernetes/demoapp:v1.0
        imagePullPolicy: Always
        ports:
        - name: demov10
          containerPort: 80
          protocol: TCP
        resources:
          limits:
            cpu: 100m
            memory: 100Mi
          requests:
            cpu: 50m
            memory: 50Mi
test.yaml

可以看点在每node节点生成了cni0(用作node上的pod通信,跨节点通信还需要通过flannel.1封装)和veth接口(与每个pod的网口一一对对应,有几个pod就在主机生成几个vet

1.2.1、同一节点POD通信

node4上的两个pod:

在test-b9c4d648-gl9t5上访问test-b9c4d648-t7wxk,只在cni0接口能看到通信报文,flannel无报文

1.2.2、跨节点通信

在test-b9c4d648-4q7rp上访问test-b9c4d648-t7wxk,可以看到跨网段访问,还会经过flannel.1封装

1.3、Directingrouting

该模式下,当节点在同一网段时POD间通信直接通过节点二层网络通信,当节点跨网段时才启用vxlan

配置:修改configmap kube-flannel-cfg,增加  "Directrouting": true,然后删除flannel pod,重建flannel pod生效,可以看到,当node在同一网段时,通信直接通过节点IP,node4和其他节点不在同一网段,使用通过flannel.1 vxlan通信

2、host-gw

host-gw通过类似与直接路由,但是要求所有节点必须在同一网段,通过路由通信,由于不会通过vxlan,通信不会通过flannel.1

配置:修改configmap kube-flannel-cfg

可以看到没有到node4的pod网段的路由,网络也不通

3、卸载flannel

管理节点

kubectl delete -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

ip link set dev flannel.1 down

ip link delete flannel.1 

systemctl restart kubelet 

node节点

清理flannel网络留下的文件,然后重启kubelet

ip link set dev cni0 down
ip link delete cni0
ip link set dev flannel.1 down
ip link delete flannel.1
rm -rf /var/lib/cni/
rm -f /etc/cni/net.d/*
systemctl restart kubelet
View Code

 

posted @ 2022-01-25 16:31  西风发财  阅读(1072)  评论(0编辑  收藏  举报