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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM