此架构的目的是,让Kubernetes中Docker与物理网络,如虚拟机、物理机,混合云等通讯(使用BGP反射器)
SpringCloud 注册到Eureka注册中心,会获取使用容器的IP注册上去。如果有一部分应用不跑在容器里面,而跑在虚拟机或者物理机上面同时注册上去,由于容器内部overlay与虚拟机网络只能单向通讯(overlay通过NAT), 当需要通过微服务Fegin客户端@调用的时候不能通讯,所以直接让容器与虚拟机和物理机能互相ping通就很有必要
10.42.1.11 | Calico Node | AS 64512 |
10.42.1.12 | Calico Node | AS 64512 |
10.42.1.15 | Calico Node | AS 64512 |
10.42.2.11 | 华为Cloud Engine交换机 | AS 64512 |
Calico使用BGP协议作为通讯,默认采用node-to-node mash模式,即互相组播学习,两两配对只能适应小规模场景
下载Calico
curl https://docs.projectcalico.org/v3.8/manifests/calico.yaml -O
使用sed工具更改你所想要的网段
POD_CIDR="" \
sed -i -e "s?192.168.0.0/16?$POD_CIDR?g" calico.yaml
kubectl apply -f calico.yaml 应用一下就安装完毕了
calicoctl get bgpconfig default
创建完毕后查看一下BGP情况用官方脚本创建默认应该是没有配置的,关闭node-to-node mash,AS自制号使用64512
cat << EOF | calicoctl create -f -
apiVersion: projectcalico.org/v3
kind: BGPConfiguration
metadata:
name: default
spec:
logSeverityScreen: Info
nodeToNodeMeshEnabled: false
asNumber: 64512
配置完毕后配置BGP Peer指向华为交换机10.42.2.11,该交换机作为一个BGP反射器
cat << EOF | calicoctl create -f -
apiVersion: projectcalico.org/v3
kind: BGPPeer
metadata:
name: bgppeer-global-211
spec:
peerIP: 10.42.2.11
asNumber: 64512
EOF
华为交换机作为BGP反射器配置如下
至此配置完毕,我们到某个节点,可以看到路由已经都学习到了。
calico的路由都指向了tunl0虚拟网卡走calico隧道;到物理网络走eth0到华为三层交换机 ;calidexxxxxx开头的为 calico自己给容器添加的网卡,通讯完全没问题