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 通,那么證明配置成功;

具體操虛擬機配置使用網橋請參照虛擬機使用網橋的說明文檔;


免責聲明!

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



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