我有VPC A, CIDR为10.A.0.0/16
, VPC B, CIDR为10.B.0.0/16
。我有VPC A和B对等和更新路由表,从10.B.0.0/16
中的服务器可以ping到10.A.0.0/16
中的服务器,反之亦然。
VPC A上的应用也使用了部分192.168.0.0/16
范围内的ip。不是我可以轻易改变的东西,但我需要能够从VPC b到达VPC A上的192.168.0.0/16
。
我已经尝试将192.168.0.0/16
添加到用于VPC B的路由表中,并设置对等连接的目标。这不起作用,我相信因为192.168.0.0/16
不在VPC a的CIDR块中。
我无法在VPC a中添加192.168.0.0/16
作为辅助CIDR,因为它受到限制。参见CIDR块关联限制及相关问题。我知道它是受限的,但为什么会受限呢?RFC1918似乎没有反对使用多个私有地址空间。
我还尝试制作一个过境网关,附加两个VPC,并为192.168.0.0/16
的过境网关路由表添加静态路由,目标是VPC a附件。但在VPC b内仍然无法达到这个范围
是否有另一种方法可以对等到同一VPC上的10.0.0.0/8
和192.168.0.0/16
CIDR块?
已更新,背景信息
两个不同的kubernetes集群使用vpc。旧版本使用project-calico,它使用默认集群CIDR192.168.0.0/16
,并且在该范围内分配pod ip。较新的一个是EKS集群,pod ip从VPC的CIDR范围分配。在过渡期间,我将两个集群的vpc放在一起。
路由表
VPC A的私有子网路由表
10.A.0.0/16 local
10.B.0.0/16 pcx-[VPC A - VPC B peering connection]
0.0.0.0/0 nat-[gateway for cluster A]
VPC B的私有子网路由表
10.B.0.0/16 local
10.A.0.0/16 pcx-[VPC A - VPC B peering connection]
192.168.0.0/16 pcx-[VPC A - VPC B peering connection]
0.0.0.0/0 nat-[gateway for cluster B]
这当然不行,因为192.168.0.0/16
不在VPC A的CIDR块中,也不能添加。
Calico在VPC (A) CIDR之上使用指定的集群CIDR (192.168.x.x)创建一个覆盖网络,以便该k8s集群中的pod/服务可以通信。覆盖网络路由信息既不公开,也不能用于AWS路由表。这与k8s集群在VPC (B)中运行不同,k8s集群使用VPC CNI,利用VPC CIDR作为集群CIDR。
Calico BGP对等在这里提供了一种方法,但对于这种情况,它不是一条容易的路线。
Calico节点可以通过BGP交换路由信息使能Calico网络工作负载的可达性(Kubernetes pod或OpenStack vm)。
如果您必须在不同的k8s集群和网络中实现pod到pod通信,但不通过Ingress/LB,请迁移其中一个k8s集群CNI使其与另一个相同,以便您可以充分利用它们独特的对等能力。