在微服务架构下,由于服务组件很多,开发在本地机器想测试应用需要启动整套服务,这对开发机器的性能确实是个考验;但如果直接连接测试环境的服务,由于服务发现问题最终得到的具体服务 IP 是 Kubernetes Pod IP,此 IP 由集群内部 Calico 维护与分配,外部不可访问;最终目标为打通开发环境与集群内部网络,实现开发网络下直连 Pod IP,这或许在以后对生产服务暴露负载均衡有一定帮助意义;目前网络环境如下:
开发网段: 10.10.0.0/24 测试网段: 172.16.0.0/24 Kubernetes Pod 网段: 10.20.0.0/16
二、打通网络
首先面临的第一个问题是 Calico 处理,因为如果想要让数据包能从开发网络到达 Pod 网络,那么必然需要测试环境宿主机上的 Calico Node 帮忙转发;因为 Pod 网络由 Calico 维护,只要 Calico Node 帮忙转发那么数据一定可以到达 Pod IP 上;
一开始我很天真的认为这就是个 ip route add 10.20.0.0/16 via 172.16.0.13 的问题… 后来发现
经过翻文档、issue、blog 等最终发现需要进行以下步骤
2.1、关闭全互联模式
注意: 关闭全互联时可能导致网络暂时中断,请在夜深人静时操作
首先执行以下命令查看是否存在默认的 BGP 配置
1
calicoctl get bgpconfig default
如果存在则将其保存为配置文件
1
calicoctl get bgpconfig default -o yaml > bgp.yaml
IPv4 BGP status +--------------+---------------+-------+----------+-------------+ | PEER ADDRESS | PEER TYPE | STATE | SINCE | INFO | +--------------+---------------+-------+----------+-------------+ | 172.16.0.19 | node specific | up | 05:43:51 | Established | | 172.16.0.16 | node specific | up | 05:43:51 | Established | | 172.16.0.17 | node specific | up | 05:43:51 | Established | | 172.16.0.13 | node specific | up | 13:01:17 | Established | +--------------+---------------+-------+----------+-------------+
IPv6 BGP status No IPv6 peers found.
PEER ADDRESS 应当包含所有非 RR 节点 IP(由于真实测试环境,以上输出已人为修改)
同时在非 RR 节点上使用 calicoctl node status 应该能看到以下输出
1 2 3 4 5 6 7 8 9 10 11 12
Calico process is running.
IPv4 BGP status +--------------+---------------+-------+----------+-------------+ | PEER ADDRESS | PEER TYPE | STATE | SINCE | INFO | +--------------+---------------+-------+----------+-------------+ | 172.16.0.10 | node specific | up | 05:43:51 | Established | | 172.16.0.13 | node specific | up | 13:01:20 | Established | +--------------+---------------+-------+----------+-------------+