美文网首页
ipvlan 手动测试参考

ipvlan 手动测试参考

作者: cloudFans | 来源:发表于2021-12-16 17:03 被阅读0次

ipvlan l2

  1. 升级内核
ubuntu20.04 
root@zbb-test-aap:~# uname -r
5.4.0-71-generic

  1. 实验:

参考: https://kernel.taobao.org/2019/11/ipvlan-for-kubernete-net/

macvlan 和 ipvlan的区别, macvlan 不同子接口拥有不同的mac, 而 ipvlan 不同子接口,不同ip,同一mac

2.1 ipvlan 官方教程

https://www.kernel.org/doc/html/latest/networking/ipvlan.html

create IPvlan link in L2 bridge mode:

ip link add link eth0 name ipvl0 type ipvlan mode l2 bridge

  1. Example configuration:
+=============================================================+
|  Host: host1                                                |
|                                                             |
|   +----------------------+      +----------------------+    |
|   |   NS:ns0             |      |  NS:ns1              |    |
|   |                      |      |                      |    |
|   |                      |      |                      |    |
|   |        ipvl0         |      |         ipvl1        |    |
|   +----------#-----------+      +-----------#----------+    |
|              #                              #               |
|              ################################               |
|                              # eth0                         |
+==============================#==============================+
Create two network namespaces - ns0, ns1:

ip netns add ns0
ip netns add ns1
Create two ipvlan slaves on eth0 (master device):

ip link add link ens3 ipvl0 type ipvlan mode l2
ip link add link ens3 ipvl1 type ipvlan mode l2
Assign slaves to the respective network namespaces:

ip link set dev ipvl0 netns ns0
ip link set dev ipvl1 netns ns1
Now switch to the namespace (ns0 or ns1) to configure the slave devices

For ns0:

(1) 
ip netns exec ns0 bash

(2) 

ip link set dev ipvl0 up

(3) 

ip link set dev lo up

(4) 

ip -4 addr add 127.0.0.1 dev lo

(5) 
IPADDR=10.119.0.124/21
ip -4 addr add $IPADDR dev ipvl0

(6) 
ROUTER=10.119.0.1
ip -4 route add default via $ROUTER dev ipvl0
ip -4 route add 169.254.169.254 via 10.119.0.10  dev ipvl0




For ns1:

(1) ip netns exec ns1 bash
(2) ip link set dev ipvl1 up
(3) ip link set dev lo up
(4) ip -4 addr add 127.0.0.1 dev lo
(5) ip -4 addr add $IPADDR dev ipvl1
(6) ip -4 route add default via $ROUTER dev ipvl1




############################

  1. 首先参考ipvlan-ref了解 pod基于ipvlan的使用方式

在以上基础上,为了做到node直通pod,需要在node也建一个子接口并配置ip以及路由

参考如下命令


ip link add link eth0 name ipvl0 type ipvlan mode l2 bridge

ip link add link ens3 ipvl0 type ipvlan mode l2


ip link set dev ipvl0 up


IPADDR=10.119.0.124/21
ip -4 addr add $IPADDR dev ipvl0

ROUTER=10.119.0.1
ip -4 route add default via $ROUTER dev ipvl0
ip -4 route add 169.254.169.254 via 10.119.0.10  dev ipvl0




## node上操作


# ipvl 子接口配置ip 和eth1 一致


ip addr add 172.22.0.22/32 dev ipvl_1

# terway需要eth1有ip
ip addr add 172.22.0.22/16 dev eth1


# pod ip配置路由,实现node本地基于eth1 ipvla 子接口直通pod

ip route add 172.22.1.8/32 via 0.0.0.0 dev ipvl_1 proto kernel scope


# node 内核配置,关闭反向路径校验,让node可以转发pod访问svc ip的流量,不丢该包

echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter

sysctl -a | grep  rp_filter 

确认都已关闭

# pod内部操作

pod内部添加svc访问的路由操作:

ip route add 172.29.0.0/16 dev eth0

pod内部添加访问localdns的路由操作:

ip route add 169.254.25.10/16 dev eth0

扩展:

基于同样的模式, linux-bridge ovs-bridge在node也搞一个子接口,也是可以pod访问node本地的svc以及localdns的。

ipvlan网卡表现:

一旦一张网卡启用ipvlan 模式之后:

  1. 从外部一个节点ping 该node上的ipvlan 主网卡无法ping 通
  2. 从node 内部 基于该网卡ping外部也无法工作

基于以上,该网卡的ip是无效的,应该被"借"到网卡子接口

相关文章

网友评论

      本文标题:ipvlan 手动测试参考

      本文链接:https://www.haomeiwen.com/subject/plpvfrtx.html