我在GKE中有一个库伯内特斯集群(1.3.2),我想从我的谷歌项目连接虚拟机和服务,该项目与集群共享相同的网络。
子网内部但群集本身内部的VM是否有办法连接到服务而不命中外部IP?
我知道你可以做很多事情来明确地确定服务的IP和端口,比如ENV和DNS…但是集群IP在集群之外是不可访问的(显然)。
我遗漏了什么吗?一个重要的组成部分是,这是一个对项目“公共”的服务,这样我就不知道项目上的哪些虚拟机想要连接到该服务(这可能会排除loadBalancerSourceRanges)。我知道服务实际包装的endpoint是我可以访问的内部IP,但到达IP的唯一好方法是通过KubeAPI或kubectl,这两种方式都不是访问我的服务的理想方式。
在这里查看我更全面的答案,但最常见的解决方案是在您的GCP项目中创建堡垒路线。
在最简单的形式中,您可以创建单个GCE路由,将集群服务IP范围内dest_ip的所有流量引导到您的GKE节点之一。如果该SPOF吓到您,您可以创建多个指向不同节点的路由,流量将在它们之间循环。
如果管理开销不是您未来想要做的事情,您可以在GKE集群中编写一个简单的控制器来监视节点APIendpoint,并确保您在任何给定时间都有一条到至少N个节点的实时堡垒路由。
GCP内部负载平衡刚刚作为alpha发布,因此将来GCP上的库贝代理可以使用它来实现,这将消除对堡垒路由来处理内部服务的需求。