block/blockSzie: block主要功能是路由聚合,减少对外宣告路由条目 。block在POD所在节点自动创建,如在worker01节点创建1.1.1.1的POD时,blocksize为29 , 则该节点自动创建1.1.1.0/29的block,对外宣告1.1.1.0/29的BGP路由,并且节点下发1.1.1.0/29的黑洞路由和1.1.1.1/32的明细路由 。在IBGP模式下,黑洞路由可避免环路 。如果blockSize设置为32,则不下发黑洞路由也不会造成环路 , 缺点是路由没有聚合,路由表项会比较多,需要考虑交换机路由器的容量 。
Calico创建block时,会出现借用IP的情况 。如在 worker01节点存在1.1.1.0/29的block , 由于worker01节点负载很高 , 地址为1.1.1.2的POD被调度到worker02节点,这种现象为IP借用 。woker02节点会对外宣告1.1.1.2/32的明细路由,在IBGP模式下,交换机需要开启RR模式 , 将路由反射给worker01上,否则在不同worker节点的同一个block的POD,由于黑洞路由的存在 , 导致POD之间网络不通 。可通过ipamconfigs来管理是否允许借用IP(strictAffinity)、每个节点上最多允许创建block的数量(maxBlocksPerHost)等 。
4 BGP模式下路由分析举例说明,创建1.1.1.0/31的地址池,IPPool配置如下:
root@master1:~# calicoctl get ippool ippool-test-0NAMECIDRSELECTORippool-test-01.1.1.0/31all()
使用该地址池,创建一个名字为nettool的POD,创建完成后,查看workloadendpoint资源信息 。可查看得到,POD的IP地址为1.1.1.1/32 , 其网络接口对应在worker01节点的网卡为cali200f7a51a47 。
root@master1:~# calicoctl get workloadendpointNAMESPACEWORKLOADNODENETWORKSINTERFACEdefaultnettoolworker011.1.1.1/32cali200f7a51a47
进入该容器,查看路由和接口信息 。可查看得到,容器默认路由为169.254.1.1 , 且均指向eth0 。通过ethtool查看得到,eth0接口的peer_ifindex为532 。
root@master1:~# kubectl exec -it nettool shkubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.sh-4.4# ip a1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft forever2: tunl0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN group default qlen 1000link/ipip 0.0.0.0 brd 0.0.0.04: eth0@if532: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1480 qdisc noqueue state UP group defaultlink/ether 86:61:23:4e:4e:d0 brd ff:ff:ff:ff:ff:ff link-netnsid 0inet 1.1.1.1/32 scope global eth0valid_lft forever preferred_lft foreversh-4.4# ip routedefault via 169.254.1.1 dev eth0169.254.1.1 dev eth0 scope linksh-4.4# ethtool -S eth0NIC statistics:peer_ifindex: 532rx_queue_0_xdp_packets: 0rx_queue_0_xdp_bytes: 0rx_queue_0_xdp_drops: 0
登录worker01节点,查看index为532的网卡接口,正是该接口cali200f7a51a47 。worker01节点已经配置了ARP代理(主机上网卡不管ARP请求的内容 , 直接将自己的mac地址作为应答的行为称为ARP Proxy) 。Calico把worker01节点当做容器的默认网关使用,所有报文会发送到节点上,节点再根据路由信息进行转发 。
root@worker01:~# ip a |grep 532532: cali200f7a51a47@if4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1480 qdisc noqueue state UP group defaultroot@worker01:~# cat /proc/sys/net/ipv4/conf/cali200f7a51a47/proxy_arp1
针对回程报文,我们查看节点的1.1.1.1对应路由,也正是该接口cali200f7a51a47 。此时worker01节点的收发报文通路已经明了 。
root@worker01:~# route -n |grep cali200f7a51a471.1.1.10.0.0.0255.255.255.255 UH000 cali200f7a51a47
最后,确认下交换机的路由情况 。目的地址为1.1.1.1的下一跳为192.168.1.4,该IP地址是worker01主机IP 。此时POD就可以跟外部进行通信 。
Destination/MaskProtoPreCostFlagsNextHopInterface1.1.1.1/32IBGP2550RD192.168.1.4vlanif100<switch>
全栈云探索实践综合考虑微隔离、网路可观测等技术储备已在G行推广使用,Calico默认不开启网络安全策略,依靠微隔离做网络安全管控 。主要考虑BGP和IPAM上设计和管理网络 。
1.BGP配置1) 创建BGPconfigurations配置文件,声明节点的默认AS号 。
root@master1:~# cat bgpconfigurations.yamlapiVersion: crd.projectcalico.org/v1kind: BGPConfigurationmetadata:name: defaultspec:asNumber: 1111111logSeverityScreen: InfonodeToNodeMeshEnabled: false
2) 创建BGPPeer , 明确交换机的AS号、BGP Peer IP,并将含有rr-group=rr1 的节点与交换机建立邻居 。
root@master:~# cat bgppper1.yamlapiVersion: crd.projectcalico.org/v1kind: BGPPeermetadata:name: bgp-peer-1spec:asNumber: 1111111nodeSelector: rr-group == 'rr1'peerIP: 192.168.1.1
推荐阅读
- 聊聊常见的限流算法有哪些?
- 德云社云字科仅剩13人,其中六位早已成名,今天咱聊聊剩余的七位
- 抗老面霜的最终目的到底是什么?聊聊这9款抗老面霜的真实用意
- 聊聊接口重试机制的几种解决方案
- 聊聊Golang饱受争议的Error
- 数据库索引只能用 B 树吗?
- 聊聊网络结构搜索方法AutoFormer
- 聊聊SQL中的排名问题
- 为什么不吃米饭和面后,身体很快就瘦下来了?和你聊聊减肥的误区
- 聚类算法全面总结!!