Calico在K8S中的几种BGP配置模式

在了解Calico K8S BGP之前,需要了解Calico的几种网络模式,以及哪些网络网络模式适合使用BGP

1.Calico在k8s中的几种网络模式

1.1.VXLANCrossSubnet模式

VXLANCrossSubnet的解释

  • 定义:当Pod位于不同的子网时,使用VXLAN(Virtual Extensible LAN)隧道模式进行通信
  • 原理:源节点上的VTEP(VXLAN Tunnel Endpoint)将Pod发出的以太网帧封装在VXLAN报文中,并通过三层网络传输到目标节点的VTEP。目标节点的VTEP解封报文并将原始的以太网帧转发给目标Pod
  • 优势:能够跨越不同的三层网络(如不同的子网或VLAN)实现Pod之间的通信
  • 缺点:增加网络传输的开销,因为每个以太网帧都需要额外的封装和解封过程。
  • 场景:VXLANCrossSubnet主要适用于需要跨越多个数据中心、需要实现网络和业务维护自动化、多租户环境下二层互联、以及需要跨越IP网络基础设施和第2层网络的场景

1.2.CrossSubnet模式

CrossSubnet的解释

如果需要将Caclico设置成BGP模式,需要将ipipMode设置为Never

  • 定义:当Pod跨子网通信时,使用IPIP(IP-in-IP)隧道模式。
  • 原理:将一个IP数据包套在另一个IP包里,使用Linux提供的隧道技术。可以理解为一个基于IP层的网桥,将两个本不通的网络通过点对点连接起来。
  • 性能:由于IPIP隧道封包解包的过程,会有一定的性能损失。
  • 场景:在宿主机网络不完全支持BGP路由协议时,作为一种妥协的overlay机制。

1.3.ipipMode模式

ipipMode的解释

在k8s环境内,如果calico插件使用的网络模式为ipipMode,其本身不支持BGP,如果Caclico需要设置成BGP模式,需要将ipipMode设置为Never

  • 定义:始终使用IPIP隧道模式,无论Pod是否位于同一子网。
  • 影响:由于始终使用IPIP隧道,即使Pod位于同一子网,也会带来额外的封装和解封开销,从而影响性能。
  • 场景:在需要强制使用IPIP隧道模式的场景中,例如某些特定的网络环境或安全策略要求。

2.Calico在k8s中的几种BGP模式

2.1.Full-mesh (全互联模式)

启用 BGP 后,Calico 的默认行为是创建完整的内部 BGP (iBGP)连接,其中每个节点相互对等。这允许 Calico 在任何 L2 网络上运行,无论是公有云还是私有云
全网格非常适合 100 个或更少的中小型部署,但在更大的规模下,Full-mesh的效率会降低,官方建议使用路由反射模式。

2.2.Route reflectors (路由器反射模式)

若要构建内部BGP(iBGP)的大型集群,可以使用 BGP 路由反射器来减少每个节点上使用的 BGP 对等互连数。在此模型中,一些节点充当路由反射器,并配置为在它们之间建立Full-mesh模式。然后,将其他节点配置为与这些路由反射器的子集(通常为2 个用于冗余)对等互连,与Full-mesh模式相比,减少了BGP对等连接的总数。

2.3.Top of Rack(物理边缘路由器)

  • 在使用Top of Rack模式时,可考虑与路由器反射模式一起使用

在本地部署中,可以将 Calico 配置为直接与物理网络基础结构对等互连。通常,这涉及禁用 Calico 的默认Full-mesh模式,而是将 Calico与L3 Top of Rack 路由器对等。构建本地 BGP 网络的方法有很多种。如何配置 BGP 由您决定 - Calico 适用于 iBGP 和 eBGP 配置,您可以有效地将 Calico 视为网络设计中的任何其他路由器。

3.Calico中的Full-mesh样例

3.1. Full-mesh模式查询

Calico默认配置模式下,Full-mesh模式为开启状态,节点和节点之间使用BGP协议进行互联

  • 样例分析
root@master:~/calico/v3.26.4# calicoctl node status
Calico process is running.

IPv4 BGP status
+--------------+-------------------+-------+----------+-------------+
| PEER ADDRESS |     PEER TYPE     | STATE |  SINCE   |    INFO     |
+--------------+-------------------+-------+----------+-------------+
| 10.22.4.12   | node-to-node mesh | up    | 07:58:12 | Established |
| 10.22.4.13   | node-to-node mesh | up    | 07:58:12 | Established |
+--------------+-------------------+-------+----------+-------------+

IPv6 BGP status
No IPv6 peers found.

root@master:~/calico/v3.26.4#
# 默认情况下calico bgp的as号为64512
root@master:~/calico/v3.26.4# calicoctl get nodes -o wide
NAME             ASN       IPV4            IPV6   
master.sec.lab   (64512)   10.22.4.11/24          
node01.sec.lab   (64512)   10.22.4.12/24          
node02.sec.lab   (64512)   10.22.4.13/24          

root@master:~/calico/v3.26.4# 
# 采用默认配置情况下,ipipmode模式为never
root@master:~/calico/v3.26.4# calicoctl get ippool -o wide
NAME                  CIDR            NAT    IPIPMODE   VXLANMODE     DISABLED   DISABLEBGPEXPORT   SELECTOR   
default-ipv4-ippool   10.244.0.0/16   true   Never      CrossSubnet   false      false              all()      

root@master:~/calico/v3.26.4# 

4.Calico中的Route reflectors样例

4.1. 关闭Full-mesh模式

  • 通过配置nodeToNodeMeshEnabled参数,进行Full-mesh关闭
root@master:~/bgp# cat DisableNodeMesh.yml 
apiVersion: projectcalico.org/v3
kind: BGPConfiguration
metadata:
  name: default
spec:
  logSeverityScreen: Info
  # 关闭calico默认的node-to-node mesh
  nodeToNodeMeshEnabled: false
  # 默认BGP集群的as号64512
  asNumber: 64512
root@master:~/bgp# 
root@master:~/bgp# kubectl apply -f DisableNodeMesh.yml 
bgpconfiguration.projectcalico.org/default created
root@master:~/bgp# calicoctl node status
Calico process is running.

IPv4 BGP status
No IPv4 peers found.

IPv6 BGP status
No IPv6 peers found.

root@master:~/bgp# 

4.2. 配置指定节点为反射路由器

  • 此处配置Master节点为反射路由器
root@master:~/bgp# kubectl label node master.sec.lab route-reflector=true
node/master.sec.lab labeled
root@master:~/bgp# 
  • 配置集群路由ID
root@master:~/bgp# kubectl annotate node master.sec.lab projectcalico.org/RouteReflectorClusterID=244.0.0.1
node/master.sec.lab annotated
root@master:~/bgp# kubectl get nodes master.sec.lab -o yaml | grep 244.0.0.1
    projectcalico.org/RouteReflectorClusterID: 244.0.0.1
root@master:~/bgp# 

4.3. 反射路由器配置BGP Peer

root@master:~/bgp# cat PeerBgp.yml 
apiVersion: projectcalico.org/v3
kind: BGPPeer
metadata:
  name: peer-with-route-reflectors
spec:
  nodeSelector: all()
  peerSelector: route-reflector == 'true'
root@master:~/bgp# 
root@master:~/bgp# kubectl apply -f PeerBgp.yml 
bgppeer.projectcalico.org/peer-with-route-reflectors created
root@master:~/bgp# 

4.4. 查看BGP连接状态

  • 在master集群
root@master:~/bgp# calicoctl node status
Calico process is running.

IPv4 BGP status
+--------------+---------------+-------+----------+-------------+
| PEER ADDRESS |   PEER TYPE   | STATE |  SINCE   |    INFO     |
+--------------+---------------+-------+----------+-------------+
| 10.22.4.12   | node specific | up    | 09:27:56 | Established |
| 10.22.4.13   | node specific | up    | 09:27:56 | Established |
+--------------+---------------+-------+----------+-------------+

IPv6 BGP status
No IPv6 peers found.

root@master:~/bgp# 
  • 在node01节点
root@node01:~# calicoctl node status
Calico process is running.

IPv4 BGP status
+--------------+---------------+-------+----------+-------------+
| PEER ADDRESS |   PEER TYPE   | STATE |  SINCE   |    INFO     |
+--------------+---------------+-------+----------+-------------+
| 10.22.4.11   | node specific | up    | 09:27:55 | Established |
+--------------+---------------+-------+----------+-------------+

IPv6 BGP status
No IPv6 peers found.

root@node01:~# 
  • 在node02节点
root@node02:~# calicoctl node status
Calico process is running.

IPv4 BGP status
+--------------+---------------+-------+----------+-------------+
| PEER ADDRESS |   PEER TYPE   | STATE |  SINCE   |    INFO     |
+--------------+---------------+-------+----------+-------------+
| 10.22.4.11   | node specific | up    | 09:27:56 | Established |
+--------------+---------------+-------+----------+-------------+

IPv6 BGP status
No IPv6 peers found.

root@node02:~# 

5.Calico中的Top of Rack模式

5.1. 关闭Full-mesh模式

root@master:~/bgp# cat top-node-bgp.yml
apiVersion: projectcalico.org/v3
kind: BGPConfiguration
metadata:
  name: default
spec:
  logSeverityScreen: Info
  # 关闭calico默认的node-to-node mesh
  nodeToNodeMeshEnabled: false
  # 配置BGP集群的as号65002
  asNumber: 64512
  listenPort: 179
  bindMode: NodeIP
  communities:
  - name: bgp-large-community
    value: 64512:300:100
  # 配置BGP发布pod网段
  prefixAdvertisements:
  - cidr: 10.244.0.0/16
    communities:
    - bgp-large-community
    - 64512:120

5.2. 配置节点与TOP路由器互联

root@master:~/bgp# cat top-peer-bgp.yml
apiVersion: projectcalico.org/v3
kind: BGPPeer
metadata:
  # 配置对端BGP name
  name: top-bgp-device
spec:
  # 配置对端BGP IP
  peerIP: 10.22.4.1
  # 配置BGP宣发路由上只发布对应node的
  keepOriginalNextHop: true
  # 配置对端as号
  asNumber: 65001
posted @ 2024-06-03 17:47  二乘八是十六  阅读(399)  评论(0编辑  收藏  举报