macvlan架构图


Macvlan允许您配置父级物理以太网接口(也称为上级设备)的子接口(也称为从设备),每个子接口都有自己的唯一MAC地址,因此也有自己的IP地址。然后,应用程序、VM和容器可以绑定到特定的子接口,以使用其自己的MAC和IP地址直接连接到物理网络。有些NIC对其在硬件中支持的MAC地址数量有限制。超过限制可能会影响性能。



Ipvlan与macvlan非常相似,但有一个重要区别。Ipvlan不会为创建的子接口分配唯一的MAC地址。所有子接口共享父接口的MAC地址,但使用不同的IP地址。

由于单个父接口上的所有VM或容器都使用相同的MAC地址,因此ipvlan也有一些缺点:

  • 共享的MAC地址会影响DHCP操作。如果您的VM或容器使用DHCP来获取网络设置,请确保它们在DHCP请求中使用唯一的ClientID,并确保您的DHCP服务器根据ClientID(而不是客户端的MAC地址)分配IP地址。

  • 自动配置的EUI-64 IPv6地址基于MAC地址。 共享相同父接口的所有VM或容器将自动生成相同的IPv6地址。确保您的VM或容器使用静态IPv6地址或IPv6隐私地址并禁用SLAAC。


在以下情况下使用Ipvlan:

  • 父接口是无线的。

  • 您的父接口性能下降是因为您已经超过了其他MAC地址的数量。对于生产,您应该考虑将NIC换成更好的NIC,并使用macvlans。

  • 物理交换机限制了端口允许的MAC地址数量(端口安全性)。对于生产,您应该与网络管理员一起解决此策略问题,并使用macvlans。

  • 您可以运行高级网络方案,例如使用在同一VM或容器中运行的BGP守护程序来宣传在VM或容器中运行的服务。


而macvlan适用于ipvlan的所有场景。


在OCP 4.3上测试macvlan。首先验证静态IP模式。

首先确认worker节点的网段:192.168.91.0/24

登录worker节点,查看节点的网卡:

确认192.168.137.0/24的网关是192.168.137.1

修改网络CO,增加如下,配置静态IP,赋予到tomcat项目:

oc edit networks.operator.openshift.iocluster

查看赋予项目的网络:


确认IP未被使用:



书写创建pod的yaml,使用cni网络注释

文本格式:

[root@lb.weixinyucluster ~]# cat 1.yaml

apiVersion: v1

kind: Pod

metadata:

  name: example-staticip

  annotations:

    k8s.v1.cni.cncf.io/networks: macvlan-network

spec:

  containers:

  - name: example-pod

    command: ["/bin/bash", "-c", "sleep 2000000000000"]

    image: centos/tools

[root@lb.weixinyucluster ~]# oc apply -f 1.yaml

pod/example-staticip created

登录pod,确认IP增加:

在pod里ping网关:

在外部主机ping pod ip:


增加DHCP网络:

修改网络co,增加如下内容,添加dhcp网络到tomcat1:

[root@lb.weixinyucluster ~]#  oc get network-attachment-definitions -n  tomcat1

NAME               AGE

macvlan-network1   9s


书写创建pod的yaml


但是,查看pod创建过程,出现报错,原因是我的和环境中没有配置dhcp server。需要注意的是,dhcp server不能配置在pod所在的worker节点上(Linux does not allow to communicate between macvlan interface and its master interface,),需要配置在外部。因此,即worker节点能够访问到的dhcp server。这与很多客户的环境不匹配,因此不再进行测试。建议使用静态分配IP的方式。


©著作权归作者所有:来自51CTO博客作者mob604756f145d3的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. uboot的常用命令及用法
  2. (unix domain socket)使用udp发送>=128K的消息会报ENOBUFS的错误
  3. 网工必备!超实用的九大常用的网络命令
  4. 怎么评价欧盟统一充电接口?
  5. Mybatis Mapper接口动态代理实现原理及二次开发
  6. Greenplum6 数据库数据库学习_外部表
  7. 「2020 新手必备 」极速入门 Retrofit + OkHttp 网络框架到实战,
  8. 支付宝支付开发代码-java版
  9. 【爬虫】利用Python爬虫爬取小麦苗itpub博客的所有文章的连接地

随机推荐

  1. golang中的defer关键字什么时候生效
  2. golang leaf用的多吗
  3. golang gf怎么使用
  4. golang map有什么用
  5. golang和erlang区别
  6. golang gin框架错误处理
  7. golang中创建错误的方法
  8. golang chan是否关闭
  9. golang web开发乱码的原因与解决方法
  10. golang与java语法上的区别