本文档主要描述使用 calicoctl 来管理 BGP. 主要针对在私有云上部署calico的用户,使calico跟底层基础架构进行peer。
包含以下四个方面的配置:
全局默认 AS 号
node-to-node 全互联
全局 BGP Peers
指定节点BGP Peers
全局默认 AS 号就是当calico节点没有明确指定AS号时,即是你所有的calico node节点使用同一个AS号。
node-to-node 全互联就是所有 Calico node 自动跟网络中其他calico node节点进行BGP peer。默认开启node-to-node 全互联, node-to-node 全互联适应用小规模部署以及calico node节点在同一个2层网络。推荐关闭node-to-node 全互联,指定节点间的BGP Peer。
指定BGP peers 可配置成全局的或者部分节点间.
一个全局 BGP peer 就是一个跟网络中所有节点peer 的BGP agent. 典型用例就是当中规模部署的时候,所有在同一个二层网络的Calico node节点都跟同一个Route Reflector (或一组 Route Reflector)配对,此处的Route Reflector就是一个全局BGP peer。
大规模部署的时候, 有多种网络拓扑可选。例如在 AS per Rack model 里, 每个 Calico node节点 跟在ToR交换机上的Route Reflector配对。也就是说机架上的每个Calico node节点跟ToR Route Reflector配置成指定node的BGP peers模式。
当创建calico node的时候,可以指定 AS 号。如果没有指定,使用默认的全局AS号。
可使用 calicoctl config set asNumber 命令来配置全局的AS号. 若没有指定,默认的 AS 号是64512(2.0.0版本以前默认是64511)。
如果你所有的calico node节点都是同一个AS号,当你需要使用一个不同的 AS number(例如,当跟一个边界路由器进行配对时,以及中规模,大规模部署的时候需要自定义网络拓扑的时候),这时候就需要修改AS number
配置默认 AS number 为 64513, 运行如下calicoctl 命令在任意一个节点:
$ calicoctl config set asNumber 64513
查看当前默认的AS number
$ calicoctl config get asNumber
64513
当你需要自定义网络拓扑图的时候, 使用命令calicoctl config set nodeToNodeMesh 关闭node-to-node BGP 全互联。
如果你最开始就有计划自定义网络拓扑,建议最开始部署网络的时候就关闭node-to-node BGP 全互联。
如果你从 node-to-node BGP 全互联网络拓扑升级为其他网络拓扑模型(例如使用一组router reflector 来提高网络的性能), 为保证服务的连续性在关闭node-to-node BGP 全互联前就应该配置成合适的网络拓扑。
关闭 BGP node-to-node 全互联,运行如下calicoctl 命令在任意一个节点:
$ calicoctl config set nodeToNodeMesh off
开启 BGP node-to-node 全互联,运行如下calicoctl 命令在任意一个节点:
$ calicoctl config set nodeToNodeMesh on
获取当前BGP node-to-node 全互联模式的状态
$ calicoctl config get nodeToNodeMesh
on
有两种场景需要配置全局BGP peer
(1)添加一个边界路由器到 node-to-node 全互联模式里
(2) 当配置 route reflectors 来提高集群的规模的时候. 每一个 Calico node会跟每一个Route Reflector进行配对并关闭node-to-node 全互联。
添加一个IP 为 192.20.30.40 AS number 为 64567的全局 BGP peer。运行以下命令在任意node上:
$ cat << EOF | calicoctl create -f -
apiVersion: v1
kind: bgpPeer
metadata:
peerIP: 192.20.30.40
scope: global
spec:
asNumber: 64567
EOF
删除 IP 为 192.20.30.40的全局 BGP peer (AS number 可以不必提供) ,运行以下命令在任意node上:
$ calicoctl delete bgpPeer 192.20.30.40 --scope=global
查看集群当前全局BGP peers,运行以下命令在任意node上:
$ calicoctl get bgpPeer --scope=global
SCOPE PEERIP NODE ASN
global 192.20.30.40 64567
常用在AS per Rack model 和 AS per Compute Server model 两种模型中。
添加IP 为 aa:bb::ff AS number 为64514的BGP peer,跟“node1”配对, 运行以下命令在任意node上:
$ cat << EOF | calicoctl create -f -
apiVersion: v1
kind: bgpPeer
metadata:
peerIP: aa:bb::ff
scope: node
node: node1
spec:
asNumber: 64514
EOF
删除IP 为 aa:bb::ff(AS number 不必提够), 配对 “node1”的BGP peer, 运行以下命令在任意node上:
$ calicoctl delete bgpPeer aa:bb::ff --scope=node --node=node1
查看当前集群所有的跟 “node1”配对的指定节点BGP Peers, 运行以下命令在任意node上:
$ calicoctl get bgpPeer --node=node1
SCOPE PEERIP NODE ASN
node aa:bb::ff node1 64514
查看当前节点的所有BGP peer信息,使用 calicoctl node status 命令. 包括node-to-node 全互联的peer信息, 配置的全局 peer信息以及指定node节点的 peers信息.
查看“node1”节点的所有BGP peers信息, 在node1上运行以下命令:
$ sudo calicoctl node status
Calico process is running.
IPv4 BGP status
+--------------+-------------------+-------+----------+-------------+
| PEER ADDRESS | PEER TYPE | STATE | SINCE | INFO |
+--------------+-------------------+-------+----------+-------------+
| 172.17.8.102 | node-to-node mesh | up | 23:30:04 | Established |
| 10.20.30.40 | global | start | 16:28:38 | Connect |
| 192.10.0.0 | node specific | start | 16:28:57 | Connect |
+--------------+-------------------+-------+----------+-------------+
IPv6 BGP status
+--------------+-------------------+-------+----------+-------------+
| PEER ADDRESS | PEER TYPE | STATE | SINCE | INFO |
+--------------+-------------------+-------+----------+-------------+
| aa:bb::ff | node-to-node mesh | up | 16:17:26 | Established |
+--------------+-------------------+-------+----------+-------------+