• KVM 虚拟机使用Vxlan通讯


    Linux KVM 虚拟机使用Vxlan通讯

    本文的实验环境:

    两台物理服务器:浪潮

    服务器操作系统:Centos8 Server

    Linux 内核版本:4.18.0-147.el8.x86_64

    虚拟机系统:centos8 mini

    一、点对点的VXLAN :

    过程介绍:一台物理服务器架vxlan 虚拟网卡,将其绑定在物理网卡上,物理网卡负责传输报文,从而能够正常通讯;

    最简单的vlxan ,直接用两台服务器构成一个vxlan 网络,每台机器有一个 vtep,vtep 通过它们的 IP 互相通信;

    流程如下:

    vxlan1(192.168.8.101/24)---->eth0(10.20.1.2)----->eth0(10.20.1.3)----->vxlan1(192.168.8.100)

    1、物理服务器设置IP

    过程在这里不进行叙述;

    2、建vxlan 网络

    这里我们全部采用IP 命令;

    [root@centos111 ~]# ip link add vxlan0 type vxlan  id 42 dstport 4789 remote 192.168.8.101 local 192.168.8.100 dev ens47f1

    相关参数解释:

    Id:vxlan 里的VNI 值,理解为tag 值即可;

    Remote:远端vtep IP,这个IP 是指的对端的网卡IP;

    Local: 当前节点 vtep 要使用的 IP 地址;

    dstport:vtep 通信的端口,linux 默认使用 8472(为了保持兼容,默认值一直没有更改),而 IANA 分配的端口是 4789,所以我们这里显式指定了它的值;

    dev ens47f1:当节点用于 vtep 通信的网卡设备,用来读取 IP 地址;

    查看vxlan 虚拟机网卡的相关信息:

    [root@centos111 ~] # ip -d link show vxlan0

    20: vxlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1550 qdisc noqueue master br0 state UNKNOWN mode DEFAULT group default qlen 1000

        link/ether ea:5a:4c:51:85:cf brd ff:ff:ff:ff:ff:ff promiscuity 1

        vxlan id 42 remote 192.168.8.100 local 192.168.8.101 dev ens47f1 srcport 0 0 dstport

    3、为创建的虚拟网卡设置IP

    [root@centos111 ~]# ip addr add 10.20.1.2/24 dev vxlan0

    4、启动网卡

    [root@centos111 ~]# ip link set vxlan0 up

    5、服务器2 设置

    第二台进行与第一台相同的过程,需要注意的是IP 要设置成规划中的,要保证 VNI 也是 42,dstport 也是 4789,比如物理服务器网卡IP 需要设置成192.168.8.100 ,虚拟网卡IP 要设置成10.20.1.3即可;

    6、测试vxlan 之间是否能通讯

    ping 测试:

    在一台服务器上进行pingd 对端:如在10.20.1.2 上ping 10.20.1.3;

    [root@centos111 ~]#  ping -c 3 10.20.1.3

    PING 10.20.1.3 (10.20.1.3) 56(84) bytes of data.

    64 bytes from 10.20.1.3: icmp_seq=1 ttl=64 time=1.84 ms

    64 bytes from 10.20.1.3: icmp_seq=2 ttl=64 time=0.462 ms

    64 bytes from 10.20.1.3: icmp_seq=3 ttl=64 time=0.427 ms

    二、多播模式的 vxlan

    多播组本来的功能就是把网络中的某些节点组成一个虚拟的组,所以 vxlan 最初想到用多播来实现是很自然的事情。

    这个实验和前面一个非常相似,只不过主机之间不是点对点的连接,而是通过多播组成一个虚拟的整体;

    流程:

    流程如下:

    vxlan1(192.168.8.101/24)---->eth0(10.20.1.2)---mulcast group(239.1.1.1)-->eth0(10.20.1.3)----->vxlan1(192.168.8.100)

    1、物理服务器设置IP

    过程在这里不进行叙述;

    2、创建vxlan 网络

    这里我们全部采用IP 命令;

    [root@centos111 ~]# ip link add vxlan0 type vxlan  id 42 dstport 4789 group 239.1.1.1 dev ens47f1

    参数:

    参数 group 239.1.1.1 表示把 vtep 加入到这个多播组;

    运行上面的命令之后,一样添加了对应的路由,不同是的 fdb 表项:

    [root@centos111 ~]# bridge fdb

    00:00:00:00:00:00 dev vxlan0 dst 239.1.1.1 via enp0s8 self permanent

    这里默认表项的 dst 字段的值变成了多播地址 239.1.1.1,而不是之前对方的 vtep 地址。

    3、为创建的虚拟网卡设置IP

    [root@centos111 ~]# ip addr add 10.20.1.2/24 dev vxlan0

    4、启动网卡

    [root@centos111 ~]# ip link set vxlan0 up

    对端需要同样进行设置;

    5、测试vxlan 之间是否能通讯

    ping 测试:

    在一台服务器上进行pingd 对端:如在10.20.1.2 上ping 10.20.1.3;

    [root@centos111 ~]#  ping -c 3 10.20.1.3

    PING 10.20.1.3 (10.20.1.3) 56(84) bytes of data.

    64 bytes from 10.20.1.3: icmp_seq=1 ttl=64 time=1.84 ms

    64 bytes from 10.20.1.3: icmp_seq=2 ttl=64 time=0.462 ms

    64 bytes from 10.20.1.3: icmp_seq=3 ttl=64 time=0.427 ms

    三、利用 bridge 来连接虚拟机之间通讯

    尽管上面的方法能够通过多播实现自动化的 overlay 网络构建,但是通信的双方只有 vtep,在实际的生产中,每台主机上都有几十台甚至上百台的虚拟机或者容器需要通信,因此我们需要找到一种方法能够把这些通信实体组织起来。

    在 linux 中把同一个网段的 interface 组织起来正是网桥(bridge,或者 switch,这两个名称等价)的功能,因此这部分我们介绍如何用网桥把多个虚拟机或者容器放到同一个 vxlan overlay 网络中;

    流程:

    vm1 --->br1 --->vxlan1(192.168.8.101/24)---->eth0(10.20.1.2)---mulcast group(239.1.1.1)-->eth0(10.20.1.3)----->vxlan1(192.168.8.100)--->br1 --->vm2

    1、网桥与vxlan 虚拟IP设置

    [root@centos111 ~]# ip link add vxlan0 type vxlan  id 42 dstport 4789 group 239.1.1.1 dev ens47f1

    [root@centos111 ~]# ip addr add 10.20.1.2/24 dev vxlan0

    [root@centos111 ~]# ip link add br0 type bridge

    [root@centos111 ~]# ip link set vxlan0 master br0

    [root@centos111 ~]# ip link set vxlan0 up

    [root@centos111 ~]# ip link set br0 up

    2、网桥与Vxlan 相关配置查看

    [root@centos111 ~]# ip -d link show vxlan0

    30: vxlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1550 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000

        link/ether de:6a:ea:48:19:54 brd ff:ff:ff:ff:ff:ff promiscuity 0

        vxlan id 42 group 239.1.1.1 dev ens39f1 srcport 0 0 dstport 4789 ttl inherit ageing 300 udpcsum noudp6zerocsumtx noudp6zerocsumrx addrgenmode eui64 numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535

    [root@centos111 ~]# ip route

    default via 192.168.107.254 dev eno4 proto static metric 103

    10.20.1.0/24 dev vxlan0 proto kernel scope link src 10.20.1.2

    192.168.8.0/24 dev ens39f1 proto kernel scope link src 192.168.8.100

    192.168.107.0/24 dev eno4 proto kernel scope link src 192.168.107.111 metric 103

    192.168.122.0/24 dev virbr0 proto kernel scope link src 192.168.122.1 linkdown

    [root@centos111 ~]# ip -d link show br0

    31: br0: <BROADCAST,MULTICAST> mtu 1550 qdisc noop state DOWN mode DEFAULT group default qlen 1000

        link/ether de:6a:ea:48:19:54 brd ff:ff:ff:ff:ff:ff promiscuity 0

        bridge forward_delay 1500 hello_time 200 max_age 2000 ageing_time 30000 stp_state 0 priority 32768 vlan_filtering 0 vlan_protocol 802.1Q bridge_id 8000.de:6a:ea:48:19:54 designated_root 8000.de:6a:ea:48:19:54 root_port 0 root_path_cost 0 topology_change 0 topology_change_detected 0 hello_timer    0.00 tcn_timer    0.00 topology_change_timer    0.00 gc_timer    0.00 vlan_default_pvid 1 vlan_stats_enabled 0 group_fwd_mask 0 group_address 01:80:c2:00:00:00 mcast_snooping 1 mcast_router 1 mcast_query_use_ifaddr 0 mcast_querier 0 mcast_hash_elasticity 4 mcast_hash_max 512 mcast_last_member_count 2 mcast_startup_query_count 2 mcast_last_member_interval 100 mcast_membership_interval 26000 mcast_querier_interval 25500 mcast_query_interval 12500 mcast_query_response_interval 1000 mcast_startup_query_interval 3125 mcast_stats_enabled 0 mcast_igmp_version 2 mcast_mld_version 1 nf_call_iptables 0 nf_call_ip6tables 0 nf_call_arptables 0 addrgenmode eui64 numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535

    mac 地址转发表

    [root@centos111 ~]# bridge fdb

    01:00:5e:00:00:01 dev dev eno1 self permanent

    01:00:5e:00:00:01 dev dev eno2 self permanent

    01:00:5e:00:00:01 dev dev eno3 self permanent

    01:00:5e:00:00:01 dev dev eno4 self permanent

    33:33:00:00:00:01 dev dev eno4 self permanent

    33:33:ff:47:c8:92 dev dev eno4 self permanent

    33:33:00:00:00:fb dev dev eno4 self permanent

    01:00:5e:00:00:fb dev dev eno4 self permanent

    01:00:5e:00:00:01 dev dev ens39f0 self permanent

    33:33:00:00:00:01 dev dev ens39f0 self permanent

    01:00:5e:00:00:01 dev dev ens39f1 self permanent

    33:33:00:00:00:01 dev dev ens39f1 self permanent

    01:00:5e:00:00:fb dev dev ens39f1 self permanent

    01:00:5e:01:01:01 dev dev ens39f1 self permanent

    01:00:5e:00:00:01 dev dev virbr0 self permanent

    01:00:5e:00:00:fb dev dev virbr0 self permanent

    52:54:00:ef:fa:d0 dev dev virbr0-nic vlan 1 master virbr0 permanent

    52:54:00:ef:fa:d0 dev dev virbr0-nic master virbr0 permanent

    33:33:00:00:00:01 dev dev vnet0 self permanent

    01:00:5e:00:00:01 dev dev vnet0 self permanent

    33:33:ff:ba:7c:55 dev dev vnet0 self permanent

    33:33:00:00:00:fb dev dev vnet0 self permanent

    de:6a:ea:48:19:54 dev dev vxlan0 vlan 1 master br0 permanent

    de:6a:ea:48:19:54 dev dev vxlan0 master br0 permanent

    00:00:00:00:00:00 dev dev vxlan0 dst 239.1.1.1 via ens39f1 self permanent

    33:33:00:00:00:01 dev dev br0 self permanent

    3、第二台主机配置

    [root@localhost ~]# ip link add vxlan0 type vxlan  id 42 dstport 4789 group 239.1.1.1 dev ens39f1

    [root@localhost ~]# ip addr add 10.20.1.3 dev vxlan0

    [root@localhost ~]# ip link set vxlan0 up

    [root@localhost ~]# ip link add br0 type bridge

    [root@localhost ~]# ip link set vxlan0 master br0

    [root@localhost ~]# ip link set br0 up

    4、将虚拟机配置

    网卡架在br0 上,启动虚拟机,随后对两台服务器上的虚拟机设置同网段的IP,进行Ping 测试,如果可以正常ping 通,那么证明配置成功;

    具体操虚拟机配置使用网桥请参照虚拟机使用网桥的说明文档;

  • 相关阅读:
    MIB Browser使用方法
    RestTemplate调用https接口跳过证书验证
    Looper&Handler
    Thread类以及常见得同步类
    Android 关键类(RefBase,sp, wp)
    JNI
    binder
    struct enum union区别
    Q_PROPERTY
    linux 命令
  • 原文地址:https://www.cnblogs.com/juzib/p/12895823.html
Copyright © 2020-2023  润新知