calico跨网段不通_多对网桥ip地址相同

calico跨网段不通_多对网桥ip地址相同Calico简介Calico是一个基于BGP协议的网络互联解决方案。它是一个纯3层的方法,使用路由来实现报文寻址和传输。相比flannel,ovs等SDN解决方案,Calico避免了层叠网络带来的性能损耗。将节点当做router,位于节点上的container被当做router的直连设备。利用Kernel来实现高效的路由转发。节点间的路由信息通过BGP协议在…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

Calico 简介

Calico 是一个基于BGP协议的网络互联解决方案。它是一个纯3层的方法,使用路由来实现报文寻址和传输。
相比 flannel, ovs等SDN解决方案,Calico 避免了层叠网络带来的性能损耗。将节点当做 router ,位于节点上的 container 被当做 router 的直连设备。利用 Kernel 来实现高效的路由转发。 节点间的路由信息通过 BGP 协议在整个 Calico 网络中传播。 具有以下特点:
1. 在 calico 中的数据包不需要进行封包和解封。
2. 基于三层网络通信,troubleshoot 会更方便。
3. 网络安全策略使用 ACL 定义,基于 iptables 实现,比起 overlay 方案中的复杂机制更只管和容易操作。

Environment

img

server ip mac gw mac
walker-1 172.16.6.47 fa:16:3e:02:8b:17 00:23:89:8C:E8:31
walker-2 172.16.6.249 fa:16:3e:8c:21:13 00:23:89:8C:E8:31
demi-1 172.16.199.114 fa:16:3e:d9:a0:5e 00:23:89:8C:E8:31
busybox-1 192.168.187.211 3a:1d:1e:91:f5:9e 66:39:fa:e7:9f:a9
busybox-2 192.168.135.74 de:16:fc:1c:44:35 5a:4a:df:5e:c9:6c
busybox-3 192.168.121.2 de:16:fc:1c:44:35 8e:6b:fa:f7:5d:3b

node2 单独位于vlan 199 中,和master以及node1间的通信需要经过网关(Router)转发。

使用 IP-in-IP

ipip enable=false

$ calicoctl apply -f - << EOF
apiVersion: v1
kind: ipPool
metadata:
  cidr: 192.168.0.0/16
spec:
  nat-outgoing: true
EOF

Jetbrains全家桶1年46,售后保障稳定

ipip 模式禁用时,busybox-3busybox-{1,2} 之间无法通信。

分析如下:

主机路由:

[root@walker-1 manifests]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         172.16.6.254    0.0.0.0         UG    0      0        0 eth0
169.254.169.254 172.16.6.87     255.255.255.255 UGH   0      0        0 eth0
172.16.6.0      0.0.0.0         255.255.255.0   U     0      0        0 eth0
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0
192.168.121.0   172.16.199.114  255.255.255.192 UG    0      0        0 eth0
192.168.135.64  172.16.6.249    255.255.255.192 UG    0      0        0 eth0
192.168.187.192 0.0.0.0         255.255.255.192 U     0      0        0 *
192.168.187.209 0.0.0.0         255.255.255.255 UH    0      0        0 calic6611247c43
192.168.187.211 0.0.0.0         255.255.255.255 UH    0      0        0 calie50081a277c

busybox-1 发往 busybox-3 的报文头部如下所示:

src max | dst mac | src ip | dst ip 
---     | ---     | ---    | ---    
3a:1d:1e:91:f5:9e | 66:39:fa:e7:9f:a9  | 192.168.187.211 | 192.168.121.2

根据宿主机路由,报文会从eth0 发往 172.16.199.114。

由于二者位于不通广播域,需要通过网关转发。因此报文的 dst mac 会被修改为 172.16.6.254(gw) 对应的mac。

src max | dst mac | src ip | dst ip | enc src IP | enc dst IP 
---     | ---     | ---    | ---    | --- | ---
fa:16:3e:02:8b:17 | 00:23:89:8C:E8:31  | 192.168.187.211 | 192.168.121.2

gw 收到该报文后,会比对本地路由条目。由于 router 中并没有到 192.168.121.0\26 网段的路由,因此报文被丢弃。

ipip enable=true

$ calicoctl apply -f - << EOF
apiVersion: v1
kind: ipPool
metadata:
  cidr: 192.168.0.0/16
spec:
  ipip:
    enabled: true
    mode: always
  nat-outgoing: true
EOF

这种模式下,可实现跨网段节点上容器的互通。

[root@walker-1 manifests]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         172.16.6.254    0.0.0.0         UG    0      0        0 eth0
169.254.169.254 172.16.6.87     255.255.255.255 UGH   0      0        0 eth0
172.16.6.0      0.0.0.0         255.255.255.0   U     0      0        0 eth0
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0
192.168.121.0   172.16.199.114  255.255.255.192 UG    0      0        0 tunl0
192.168.135.64  172.16.6.249    255.255.255.192 UG    0      0        0 tunl0
192.168.187.192 0.0.0.0         255.255.255.192 U     0      0        0 *
192.168.187.209 0.0.0.0         255.255.255.255 UH    0      0        0 calic6611247c43
192.168.187.211 0.0.0.0         255.255.255.255 UH    0      0        0 calie50081a277c

busybox-1 发送报文至 busybox-3 时,根据 master 上路由,会经过 tunl0 设备。tunl0 会为原来的IP报文在封装一层IP协议头。过程如下:

  1. busybox-1 向 busybox-3 发送 icmp 报文(略去容器至 calico 网卡步骤)。

    src max dst mac src ip dst ip
    3a:1d:1e:91:f5:9e 66:39:fa:e7:9f:a9 192.168.187.211 192.168.121.2
  2. 报文被node 截获,查询本机路由后由 tunl0 设备将报文发出。

    src max dst mac src ip dst ip enc src IP enc dst IP
    fa:16:3e:02:8b:17 00:23:89:8C:E8:31 192.168.187.211 192.168.121.2 172.16.6.47 172.16.199.114
  3. 报文发送至网关(router), 根据目的IP将报文路由至 172.16.199.114(略去ARP等步骤)。

    src max dst mac src ip dst ip enc src IP enc dst IP
    00:23:89:8C:E8:31 fa:16:3e:d9:a0:5e 192.168.187.211 192.168.121.2 172.16.6.47 172.16.199.114
  4. 到达 demi-1 后,根据 demi-1 上的路由策略,将报文发送至 busybox-3(略去容器至 calico 网卡步骤) 。

    src max dst mac src ip dst ip
    8e:6b:fa:f7:5d:3b de:16:fc:1c:44:35 192.168.187.211 192.168.121.2

Note: ==容器的 gw 为和该容器对应的 calico 网卡。==

虽然实现了 calico 跨网段通信,但对于 busybox-{1,2} 间的通信来说,IP-in-IP 就有点多余了,因为2者宿主机处于同一广播域,2层互通,直接走主机路由即可。

calico cross-subnet

$ calicoctl apply -f - << EOF
apiVersion: v1
kind: ipPool
metadata:
  cidr: 192.168.0.0/16
spec:
  ipip:
    enabled: true
    mode: cross-subnet
  nat-outgoing: true
EOF

为了解决IP-in-IP 模式下,同网段封装报文的问题,calico 提供了 cross-subnet 的配置选项

[root@walker-1 k8s]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         172.16.6.254    0.0.0.0         UG    0      0        0 eth0
169.254.169.254 172.16.6.87     255.255.255.255 UGH   0      0        0 eth0
172.16.6.0      0.0.0.0         255.255.255.0   U     0      0        0 eth0
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0
192.168.121.0   172.16.199.114  255.255.255.192 UG    0      0        0 tunl0
192.168.135.64  172.16.6.249    255.255.255.192 UG    0      0        0 eth0
192.168.187.192 0.0.0.0         255.255.255.192 U     0      0        0 *
192.168.187.209 0.0.0.0         255.255.255.255 UH    0      0        0 calic6611247c43
192.168.187.211 0.0.0.0         255.255.255.255 UH    0      0        0 calie50081a277c

从主机路由可看出,对于同一网段中的路由,直接走 eth0 网卡。

默认情况下,calico 在启动时会自动选择一块网卡。当主机上有多块网卡时,为了保证路由的正确性,需要手动指定 calico 使用哪块物理网卡。参考一下链接:

http://docs.projectcalico.org/v2.3/usage/configuration/node

Note

The cross-subnet mode option requires each Calico node to be configured with the IP address and subnet of the host. However, the subnet configuration was only introduced in Calico v2.1. If any nodes in your deployment were originally created with an older version of Calico, or if you if you are unsure whether your deployment is configured correctly, follow the steps in Upgrading from pre-v2.1 before enabling cross-subnet IPIP.

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/210028.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Linux下mysql数据库安装教程

    Linux下mysql数据库安装教程

    2021年8月23日
    66
  • vim怎么显示行号_vim型号

    vim怎么显示行号_vim型号1、临时使用  1、进入viorvim编辑环境下,进入命令行模式,然后输入setnumber,就可以显示行号了。如图:      2、输入setnonumber关闭行号      3、通过如上设置只能临时起作用,当你打开另外一个文件时我们的行号又没有了,所以接下来我们去永久配置一下吧。2、永久使用在/etc/vimrc(/etc/virc)文件中修改一下就ok了,在文件末尾加…

    2025年6月13日
    1
  • vue-router路由懒加载_vue数据懒加载

    vue-router路由懒加载_vue数据懒加载什么是路由懒加载官方的解释:当打包构建应用时,JavaScript包会变得非常大,影响页面加载。如果我们能把不同路由对应的组件分割成不同的代码块,然后当路由被访问的时候才加载对应组件,这样就更

    2022年8月7日
    5
  • ProxyCFG on Win2003 和 NetSH on Win2008

    ProxyCFG on Win2003 和 NetSH on Win2008

    2021年8月6日
    57
  • Runnable接口详细详解「建议收藏」

    Runnable接口详细详解「建议收藏」创建线程对象,默认有一个线程名,以Thread-开头,从0开始计数构造函数Thread()Thread-0Thread-1Thread-2其他构造方法Thread(Runnabletarget)如果在构造thread的时候没有传递Runnable或者没有复写Thread的run方法,该thread将不会调用任何的东西,如果传递了Runnable接口的实例,后者复写了Thread的run方法,则会执行该方法的逻辑单元(逻辑代码)publicclassCreateThread2..

    2025年6月9日
    2
  • react 创建新页面_如何新建react项目「建议收藏」

    在开发React项目前最关键的当然是项目的创建,现在的前端工程化使得前端项目的创建也变得越来越复杂,今天我们介绍的是浏览器中直接引入的方式搭建react项目。如何新建react项目前文中,我们介绍过了2种react项目的搭建方式,分别是webpack的方式搭建和create-react-app脚手架的方式搭建感兴趣的同学可以点击下方链接,进行学习。webpack的方式搭建项目:怎样搭建rea…

    2022年4月14日
    139

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号