docker

  bridge

  joined

  open

  none

 

 

 

kubernetes网络通信:

  (1) 容器间通信: 同一个Pod内的多个容器间的通信,lo

  (2) Pod通信: Pod IP <--> Pod IP

  (3) Pod与Service通信: PodIP <--> ClusterIP

  (4) Service与集群外部客户端的通信;

CNI:

  flannel

  calico

  canel

  ...

  解决方案:

    虚拟网桥

    多路复用: MacVLAN

    硬件交换: SR-IOV

  kubelete, /etc/cni/net.d/

  flannel:

    支持多种后端:

      VxLAN

        (1) vxlan

        (2) Directrouting

      host-gw: Host Gateway

      UDP:

    flannel的配置参数:

      Network: flannel使用的CIDR格式的网络地址,用于为Pod配置网络功能;

        10.244.0.0/16 ->

          master: 10.244.0.0/24

          node01: 10.244.1.0/24

          ...

          node255: 10.244.255.0/24

        10.0.0.0/8

          10.0.0.0/24

          ...

          10.255.255.0/24

      SubnetLen: 把Network切分子网供各节点使用时,使用多长的掩码进行切分,默认为24位;

      SubnetMin: 10.244.10.0/24

      SubnetMax: 10.244.100.0/24

      Backed: vxlan, host-gw, udp

        vxlan:

 

master:

[root@master ~]# kubectl get configmap -n kube-system
NAME                                 DATA      AGE
coredns                              1         32d
extension-apiserver-authentication   6         32d
kube-flannel-cfg                     2         31d
kube-proxy                           2         32d
kubeadm-config                       1         32d
kubelet-config-1.11                  1         32d
kubernetes-dashboard-settings        1         2d
[root@master ~]# kubectl get configmap kube-proxy -o yaml -n kube-system
    mode: ""
[root@master ~]# ll /etc/cni/net.d/
总用量 4
-rw-r--r--. 1 root root 92 7月   8 21:42 10-flannel.conf
[root@master ~]# cat /etc/cni/net.d/10-flannel.conf 
{
  "name": "cbr0",
  "type": "flannel",
  "delegate": {
    "isDefaultGateway": true
  }
}
[root@master ~]# ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:e1:8a:5b brd ff:ff:ff:ff:ff:ff
    inet 172.20.0.70/16 brd 172.20.255.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::ec26:6bfb:12af:4133/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 02:42:30:1a:f5:44 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever
4: flannel.1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UNKNOWN group default 
    link/ether 36:da:91:ec:ce:59 brd ff:ff:ff:ff:ff:ff
    inet 10.244.0.0/32 scope global flannel.1
       valid_lft forever preferred_lft forever
    inet6 fe80::34da:91ff:feec:ce59/64 scope link 
       valid_lft forever preferred_lft forever
5: cni0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UP group default qlen 1000
    link/ether 0a:58:0a:f4:00:01 brd ff:ff:ff:ff:ff:ff
    inet 10.244.0.1/24 scope global cni0
       valid_lft forever preferred_lft forever
    inet6 fe80::c406:3dff:feb1:1283/64 scope link 
       valid_lft forever preferred_lft forever
6: veth18b7199a@if3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue master cni0 state UP group default 
    link/ether 3e:22:ec:54:e6:87 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet6 fe80::3c22:ecff:fe54:e687/64 scope link 
       valid_lft forever preferred_lft forever
7: veth5c092db0@if3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue master cni0 state UP group default 
    link/ether be:6a:4f:4d:e6:77 brd ff:ff:ff:ff:ff:ff link-netnsid 1
    inet6 fe80::bc6a:4fff:fe4d:e677/64 scope link 
       valid_lft forever preferred_lft forever
[root@master ~]# kubectl get configmap -n kube-system
NAME                                 DATA      AGE
coredns                              1         35d
extension-apiserver-authentication   6         35d
kube-flannel-cfg                     2         34d
kube-proxy                           2         35d
kubeadm-config                       1         35d
kubelet-config-1.11                  1         35d
kubernetes-dashboard-settings        1         5d
[root@master ~]# kubectl get daemonset -n kube-system
NAME              DESIRED   CURRENT   READY     UP-TO-DATE   AVAILABLE   NODE SELECTOR                   AGE
kube-flannel-ds   3         3         3         3            3           beta.kubernetes.io/arch=amd64   34d
kube-proxy        3         3         3         3            3           beta.kubernetes.io/arch=amd64   35d
[root@master ~]# kubectl get pods -n kube-system -o wide
NAME                                       READY     STATUS    RESTARTS   AGE       IP            NODE
coredns-78fcdf6894-bt5g6                   1/1       Running   1          35d       10.244.0.4    master.smoke.com
coredns-78fcdf6894-zzbll                   1/1       Running   1          35d       10.244.0.5    master.smoke.com
etcd-master.smoke.com                      1/1       Running   1          35d       172.20.0.70   master.smoke.com
kube-apiserver-master.smoke.com            1/1       Running   1          35d       172.20.0.70   master.smoke.com
kube-controller-manager-master.smoke.com   1/1       Running   1          35d       172.20.0.70   master.smoke.com
kube-flannel-ds-5hjb9                      1/1       Running   1          34d       172.20.0.67   node02.smoke.com
kube-flannel-ds-6l2ht                      1/1       Running   2          34d       172.20.0.66   node01.smoke.com
kube-flannel-ds-nspfq                      1/1       Running   1          34d       172.20.0.70   master.smoke.com
kube-proxy-5jppm                           1/1       Running   1          34d       172.20.0.66   node01.smoke.com
kube-proxy-7lg96                           1/1       Running   1          35d       172.20.0.70   master.smoke.com
kube-proxy-qmrq7                           1/1       Running   1          34d       172.20.0.67   node02.smoke.com
kube-scheduler-master.smoke.com            1/1       Running   1          35d       172.20.0.70   master.smoke.com
kubernetes-dashboard-6948bdb78-7rkwz       1/1       Running   0          4d        10.244.2.70   node02.smoke.com
[root@master ~]# kubectl get configmap -n kube-system
NAME                                 DATA      AGE
coredns                              1         35d
extension-apiserver-authentication   6         35d
kube-flannel-cfg                     2         34d
kube-proxy                           2         35d
kubeadm-config                       1         35d
kubelet-config-1.11                  1         35d
kubernetes-dashboard-settings        1         5d
[root@master ~]# kubectl get configmap kube-flannel-cfg -o json -n kube-system
{
    "apiVersion": "v1",
    "data": {
        "cni-conf.json": "{\n  \"name\": \"cbr0\",\n  \"type\": \"flannel\",\n  \"delegate\": {\n    \"isDefaultGateway\": true\n  }\n}\n",
        "net-conf.json": "{\n  \"Network\": \"10.244.0.0/16\",\n  \"Backend\": {\n    \"Type\": \"vxlan\"\n  }\n}\n"
    },
    "kind": "ConfigMap",
    "metadata": {
        "annotations": {
            "kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"v1\",\"data\":{\"cni-conf.json\":\"{\\n  \\\"name\\\": \\\"cbr0\\\",\\n  \\\"type\\\": \\\"flannel\\\",\\n  \\\"delegate\\\": {\\n
    \\\"isDefaultGateway\\\": true\\n  }\\n}\\n\",\"net-conf.json\":\"{\\n  \\\"Network\\\": \\\"10.244.0.0/16\\\",\\n  \\\"Backend\\\": {\\n    \\\"Type\\\": \\\"vxlan\\\"\\n  }\\n}\\n\"},\"kind\":\"ConfigMap\",\
"metadata\":{\"annotations\":{},\"labels\":{\"app\":\"flannel\",\"tier\":\"node\"},\"name\":\"kube-flannel-cfg\",\"namespace\":\"kube-system\"}}\n"
        },
        "creationTimestamp": "2020-06-17T11:59:01Z",
        "labels": {
            "app": "flannel",
            "tier": "node"
        },
        "name": "kube-flannel-cfg",
        "namespace": "kube-system",
        "resourceVersion": "810",
        "selfLink": "/api/v1/namespaces/kube-system/configmaps/kube-flannel-cfg",
        "uid": "ef4fca45-b091-11ea-9ec2-000c29e18a5b"
    }
}

vxlan网络

master:

[root@master manifests]# vim deploy-demo.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp-deploy
  namespace: default
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
      release: canary
  template:
    metadata:
      labels:
        app: myapp
        release: canary
    spec:
      containers:
      - name: myapp
        image: ikubernetes/myapp:v2
        ports:
        - name: http
          containerPort: 80
[root@master manifests]# kubectl apply -f deploy-demo.yaml
[root@master manifests]# kubectl get pods -o wide 
NAME                            READY     STATUS    RESTARTS   AGE       IP            NODE
myapp-deploy-67f6f6b4dc-hc2xt   1/1       Running   0          27s       10.244.1.59   node01.smoke.com
myapp-deploy-67f6f6b4dc-mmwgx   1/1       Running   0          27s       10.244.1.58   node01.smoke.com
myapp-deploy-67f6f6b4dc-wz9lp   1/1       Running   0          27s       10.244.2.71   node02.smoke.com
pod-sa-demo                     1/1       Running   1          14d       10.244.1.54   node01.smoke.com
pod-vol-hostpath                1/1       Running   1          26d       10.244.2.63   node02.smoke.com
[root@master manifests]# kubectl exec -it myapp-deploy-67f6f6b4dc-hc2xt -- /bin/sh    #连接node01上的myapp
/ # ping 10.244.2.71
PING 10.244.2.71 (10.244.2.71): 56 data bytes
64 bytes from 10.244.2.71: seq=0 ttl=62 time=0.977 ms
64 bytes from 10.244.2.71: seq=1 ttl=62 time=0.789 ms
[root@master manifests]# kubectl exec -it myapp-deploy-67f6f6b4dc-wz9lp -- /bin/sh    #连接node02上的myapp
/ # 

node01:

[root@node01 ~]# yum -y install bridge-utils
[root@node01 ~]# brctl show cni0
bridge name	bridge id		STP enabled	interfaces
cni0		8000.0a580af40101	no		veth01dbb94a
							veth6806c0af
							veth7e3e1a21
							vethff4c21ce
[root@node01 ~]# yum -y install tcpdump
[root@node01 ~]# tcpdump -i cni0 -nn icmp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on cni0, link-type EN10MB (Ethernet), capture size 262144 bytes
21:50:44.383142 IP 10.244.1.59 > 10.244.2.71: ICMP echo request, id 3072, seq 625, length 64
21:50:44.384277 IP 10.244.2.71 > 10.244.1.59: ICMP echo reply, id 3072, seq 625, length 64
21:50:45.383641 IP 10.244.1.59 > 10.244.2.71: ICMP echo request, id 3072, seq 626, length 64
21:50:45.384213 IP 10.244.2.71 > 10.244.1.59: ICMP echo reply, id 3072, seq 626, length 64
^C
4 packets captured
4 packets received by filter
0 packets dropped by kernel
[root@node01 ~]# tcpdump -i flannel.1 -nn icmp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on flannel.1, link-type EN10MB (Ethernet), capture size 262144 bytes
21:53:19.442737 IP 10.244.1.59 > 10.244.2.71: ICMP echo request, id 3072, seq 780, length 64
21:53:19.443443 IP 10.244.2.71 > 10.244.1.59: ICMP echo reply, id 3072, seq 780, length 64
21:53:20.443071 IP 10.244.1.59 > 10.244.2.71: ICMP echo request, id 3072, seq 781, length 64
21:53:20.443367 IP 10.244.2.71 > 10.244.1.59: ICMP echo reply, id 3072, seq 781, length 64
^C
4 packets captured
4 packets received by filter
0 packets dropped by kernel
[root@node01 ~]# tcpdump -i ens33 -nn host 172.20.0.66 and host 172.20.0.67
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes
21:57:23.539650 IP 172.20.0.66.47712 > 172.20.0.67.8472: OTV, flags [I] (0x08), overlay 0, instance 1
IP 10.244.1.59 > 10.244.2.71: ICMP echo request, id 3072, seq 1024, length 64
21:57:23.540114 IP 172.20.0.67.40407 > 172.20.0.66.8472: OTV, flags [I] (0x08), overlay 0, instance 1
IP 10.244.2.71 > 10.244.1.59: ICMP echo reply, id 3072, seq 1024, length 64
21:57:23.554831 ARP, Request who-has 172.20.0.66 tell 172.20.0.67, length 46
21:57:23.554858 ARP, Reply 172.20.0.66 is-at 00:0c:29:93:0e:b9, length 28
21:57:24.539977 IP 172.20.0.66.47712 > 172.20.0.67.8472: OTV, flags [I] (0x08), overlay 0, instance 1
IP 10.244.1.59 > 10.244.2.71: ICMP echo request, id 3072, seq 1025, length 64
21:57:24.540296 IP 172.20.0.67.40407 > 172.20.0.66.8472: OTV, flags [I] (0x08), overlay 0, instance 1
IP 10.244.2.71 > 10.244.1.59: ICMP echo reply, id 3072, seq 1025, length 64
^C
6 packets captured
6 packets received by filter
0 packets dropped by kernel

Directrouting网络

master:

[root@master manifests]# mkdir flannel
[root@master manifests]# cd flannel/
[root@master flannel]# vim net-conf.json
{
  "Network": "10.244.0.0/16",
  "Bacend": {
    "Type": "vxlan",
    "Directrouting": "true"
  }
}
[root@master flannel]# kubectl edit configmap kube-flannel-cfg -n kube-system
# Please edit the object below. Lines beginning with a '#' will be ignored,
# and an empty file will abort the edit. If an error occurs while saving this file will be
# reopened with the relevant failures.
#
apiVersion: v1
data:
  cni-conf.json: |
    {
      "name": "cbr0",
      "type": "flannel",
      "delegate": {
        "isDefaultGateway": true
      }
    }
  net-conf.json: |
    {
      "Network": "10.244.0.0/16",
      "Backend": {
        "Type": "vxlan",
        "Directrouting": true    #添加Directrouting为true
      }
    }
kind: ConfigMap
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"v1","data":{"cni-conf.json":"{\n  \"name\": \"cbr0\",\n  \"type\": \"flannel\",\n  \"delegate\": {\n    \"isDefaultGateway\": true\n  }\n}\n","net-conf.json":"{\n  \"Network\": \"10.244.0.0/16\"
,\n  \"Backend\": {\n    \"Type\": \"vxlan\"\n  }\n}\n"},"kind":"ConfigMap","metadata":{"annotations":{},"labels":{"app":"flannel","tier":"node"},"name":"kube-flannel-cfg","namespace":"kube-system"}}
  creationTimestamp: 2020-06-17T11:59:01Z
  labels:
    app: flannel
    tier: node
  name: kube-flannel-cfg
  namespace: kube-system
  resourceVersion: "810"
  selfLink: /api/v1/namespaces/kube-system/configmaps/kube-flannel-cfg
  uid: ef4fca45-b091-11ea-9ec2-000c29e18a5b
[root@master flannel]# ip route show    #路由还没有改变
default via 172.20.0.2 dev ens33 proto static metric 100 
10.244.0.0/24 dev cni0 proto kernel scope link src 10.244.0.1 
10.244.1.0/24 via 10.244.1.0 dev flannel.1 onlink 
10.244.2.0/24 via 10.244.2.0 dev flannel.1 onlink 
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 
172.20.0.0/16 dev ens33 proto kernel scope link src 172.20.0.70 metric 100
[root@master flannel]# kubectl get configmap kube-flannel-cfg -o json -n kube-system
{
    "apiVersion": "v1",
    "data": {
        "cni-conf.json": "{\n  \"name\": \"cbr0\",\n  \"type\": \"flannel\",\n  \"delegate\": {\n    \"isDefaultGateway\": true\n  }\n}\n",
        "net-conf.json": "{\n  \"Network\": \"10.244.0.0/16\",\n  \"Backend\": {\n    \"Type\": \"vxlan\",\n    \"Directrouting\": true\n  }\n}\n"    #已改为Directrouting
    },
    "kind": "ConfigMap",
    "metadata": {
        "annotations": {
            "kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"v1\",\"data\":{\"cni-conf.json\":\"{\\n  \\\"name\\\": \\\"cbr0\\\",\\n  \\\"type\\\": \\\"flannel\\\",\\n  \\\"delegate\\\": {\\n
    \\\"isDefaultGateway\\\": true\\n  }\\n}\\n\",\"net-conf.json\":\"{\\n  \\\"Network\\\": \\\"10.244.0.0/16\\\",\\n  \\\"Backend\\\": {\\n    \\\"Type\\\": \\\"vxlan\\\"\\n  }\\n}\\n\"},\"kind\":\"ConfigMap\",\"
metadata\":{\"annotations\":{},\"labels\":{\"app\":\"flannel\",\"tier\":\"node\"},\"name\":\"kube-flannel-cfg\",\"namespace\":\"kube-system\"}}\n"
        },
        "creationTimestamp": "2020-06-17T11:59:01Z",
        "labels": {
            "app": "flannel",
            "tier": "node"
        },
        "name": "kube-flannel-cfg",
        "namespace": "kube-system",
        "resourceVersion": "312977",
        "selfLink": "/api/v1/namespaces/kube-system/configmaps/kube-flannel-cfg",
        "uid": "ef4fca45-b091-11ea-9ec2-000c29e18a5b"
    }
}
[root@master flannel]# cd ..
[root@master manifests]# kubectl delete -f deploy-demo.yaml 
[root@master manifests]# kubectl apply -f deploy-demo.yaml 
[root@master manifests]# kubectl get pods
NAME                            READY     STATUS    RESTARTS   AGE
myapp-deploy-67f6f6b4dc-9h56w   1/1       Running   0          23s
myapp-deploy-67f6f6b4dc-hbgvg   1/1       Running   0          23s
myapp-deploy-67f6f6b4dc-td5fv   1/1       Running   0          23s
pod-sa-demo                     1/1       Running   1          14d
pod-vol-hostpath                1/1       Running   1          27d

node01:

[root@node01 ~]# ip route show    #路由还是没有改变
default via 172.20.0.2 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 dev cni0 proto kernel scope link src 10.244.1.1 
10.244.2.0/24 via 10.244.2.0 dev flannel.1 onlink 
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 
172.20.0.0/16 dev ens33 proto kernel scope link src 172.20.0.66 metric 100 

下载kube-flannel.yml文件:https://raw.githubusercontent.com/coreos/flannel/v0.9.1/Documentation/kube-flannel.yml

master:

[root@master manifests]# cd flannel/
[root@master flannel]# rm net-conf.json 
[root@master flannel]# wget https://raw.githubusercontent.com/coreos/flannel/v0.9.1/Documentation/kube-flannel.yml
[root@master flannel]# vim kube-flannel.yml 
  net-conf.json: |
    {
      "Network": "10.244.0.0/16",
      "Backend": {
        "Type": "vxlan",
        "Directrouting": true    #增加Directrouting为true
      }
    }
[root@master flannel]# kubectl apply -f kube-flannel.yml 

node01:

[root@node01 ~]# ip route show    #路由还是没有改变
default via 172.20.0.2 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 dev cni0 proto kernel scope link src 10.244.1.1 
10.244.2.0/24 via 10.244.2.0 dev flannel.1 onlink 
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 
172.20.0.0/16 dev ens33 proto kernel scope link src 172.20.0.66 metric 100 

master:

[root@master flannel]# kubectl delete -f kube-flannel.yml 
[root@master flannel]# kubectl get pods -n kube-system
NAME                                       READY     STATUS    RESTARTS   AGE
coredns-78fcdf6894-bt5g6                   1/1       Running   1          36d
coredns-78fcdf6894-zzbll                   1/1       Running   1          36d
etcd-master.smoke.com                      1/1       Running   1          36d
kube-apiserver-master.smoke.com            1/1       Running   1          36d
kube-controller-manager-master.smoke.com   1/1       Running   1          36d
kube-proxy-5jppm                           1/1       Running   1          35d
kube-proxy-7lg96                           1/1       Running   1          36d
kube-proxy-qmrq7                           1/1       Running   1          35d
kube-scheduler-master.smoke.com            1/1       Running   1          36d
kubernetes-dashboard-6948bdb78-7rkwz       1/1       Running   0          6d
[root@master flannel]# kubectl apply -f kube-flannel.yml 
[root@master flannel]# kubectl get pods -n kube-system
NAME                                       READY     STATUS    RESTARTS   AGE
coredns-78fcdf6894-bt5g6                   1/1       Running   1          36d
coredns-78fcdf6894-zzbll                   1/1       Running   1          36d
etcd-master.smoke.com                      1/1       Running   1          36d
kube-apiserver-master.smoke.com            1/1       Running   1          36d
kube-controller-manager-master.smoke.com   1/1       Running   1          36d
kube-flannel-ds-9qwfx                      1/1       Running   0          1m
kube-flannel-ds-l5zqf                      1/1       Running   0          1m
kube-flannel-ds-vsqtl                      1/1       Running   0          1m
kube-proxy-5jppm                           1/1       Running   1          35d
kube-proxy-7lg96                           1/1       Running   1          36d
kube-proxy-qmrq7                           1/1       Running   1          35d
kube-scheduler-master.smoke.com            1/1       Running   1          36d
kubernetes-dashboard-6948bdb78-7rkwz       1/1       Running   0          6d
[root@master flannel]# cd ..
[root@master manifests]# kubectl delete -f deploy-demo.yaml 
[root@master manifests]# kubectl get pods
NAME               READY     STATUS    RESTARTS   AGE
pod-sa-demo        1/1       Running   1          15d
pod-vol-hostpath   1/1       Running   1          27d
[root@master manifests]# kubectl apply -f deploy-demo.yaml 
[root@master manifests]# kubectl get pods
NAME                            READY     STATUS    RESTARTS   AGE
myapp-deploy-67f6f6b4dc-92zpg   1/1       Running   0          38s
myapp-deploy-67f6f6b4dc-9lt9q   1/1       Running   0          38s
myapp-deploy-67f6f6b4dc-xv55c   1/1       Running   0          38s
pod-sa-demo                     1/1       Running   1          15d
pod-vol-hostpath                1/1       Running   1          27d

node01:

[root@node01 ~]# ip route show    #路由发生改变
default via 172.20.0.2 dev ens33 proto static metric 100 
10.244.0.0/24 via 172.20.0.70 dev ens33 
10.244.1.0/24 dev cni0 proto kernel scope link src 10.244.1.1 
10.244.2.0/24 via 172.20.0.67 dev ens33 
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 
172.20.0.0/16 dev ens33 proto kernel scope link src 172.20.0.66 metric 100 

master:

[root@master manifests]# kubectl get pods -o wide
NAME                            READY     STATUS    RESTARTS   AGE       IP            NODE
myapp-deploy-67f6f6b4dc-92zpg   1/1       Running   0          5m        10.244.1.62   node01.smoke.com
myapp-deploy-67f6f6b4dc-9lt9q   1/1       Running   0          5m        10.244.1.63   node01.smoke.com
myapp-deploy-67f6f6b4dc-xv55c   1/1       Running   0          5m        10.244.2.73   node02.smoke.com
pod-sa-demo                     1/1       Running   1          15d       10.244.1.54   node01.smoke.com
pod-vol-hostpath                1/1       Running   1          27d       10.244.2.63   node02.smoke.com
[root@master manifests]# kubectl exec -it myapp-deploy-67f6f6b4dc-92zpg -- /bin/sh
/ # ping 10.244.2.73
PING 10.244.2.73 (10.244.2.73): 56 data bytes
64 bytes from 10.244.2.73: seq=0 ttl=62 time=0.459 ms
64 bytes from 10.244.2.73: seq=1 ttl=62 time=0.710 ms
64 bytes from 10.244.2.73: seq=2 ttl=62 time=0.979 ms

node01:

[root@node01 ~]# tcpdump -i ens33 -nn icmp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes
21:50:36.053903 IP 10.244.1.62 > 10.244.2.73: ICMP echo request, id 4864, seq 456, length 64
21:50:36.054421 IP 10.244.2.73 > 10.244.1.62: ICMP echo reply, id 4864, seq 456, length 64
21:50:36.393663 IP 10.244.1.62 > 10.244.2.73: ICMP echo request, id 7936, seq 5, length 64
21:50:36.394419 IP 10.244.2.73 > 10.244.1.62: ICMP echo reply, id 7936, seq 5, length 64
21:50:37.054310 IP 10.244.1.62 > 10.244.2.73: ICMP echo request, id 4864, seq 457, length 64
21:50:37.054821 IP 10.244.2.73 > 10.244.1.62: ICMP echo reply, id 4864, seq 457, length 64
^C
6 packets captured
6 packets received by filter
0 packets dropped by kernel

master:

[root@master manifests]# cd flannel/
[root@master flannel]# vim kube-flannel.yml 
  net-conf.json: |
    {
      "Network": "10.244.0.0/16",
      "Backend": {
        "Type": "host-gw",
      }
    }
[root@master flannel]# kubectl apply -f kube-flannel.yml 

node01:

[root@node01 ~]# ip route show    #host-gw路有信息也是这样的
default via 172.20.0.2 dev ens33 proto static metric 100 
10.244.0.0/24 via 172.20.0.70 dev ens33 
10.244.1.0/24 dev cni0 proto kernel scope link src 10.244.1.1 
10.244.2.0/24 via 172.20.0.67 dev ens33 
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 
172.20.0.0/16 dev ens33 proto kernel scope link src 172.20.0.66 metric 100