我们尝试将我们的多微服务应用程序部署到一家大公司的aks中。但是,公司基础架构团队要求我们使用某些专用IP地址来请求其服务。公司网络和天蓝色的虚拟网络之间建立了vpn连接。
例如,我们从我们的一个微服务中调用company-service-1,company-service-2和company-service-3,以下团队说,将XXX.XXX.XXX称为company-service-1。 121源ip,使用XXX.XXX.XXX.122源ip呼叫company-service-2,并使用XXX.XXX.XXX.123源ip呼叫company-service-3。他们已经为这些ip定义了防火墙规则,并且由于一些安全限制而没有更改它们。
我们可以通过为虚拟机定义不同的网络接口并创建一些ip路由来做到这一点,例如“ ip route通过XXX.XXX.XXX.1 src XXX.XXX.XXX.123添加XXX.XXX.XXX.YYY / 32。 ”。但是到那时,我们正在努力限制网络接口的增加。因为最终,我们将用不同的ip调用20种不同的服务。另外,我们可能有多个aks集群,所以这种方法不好。
我们尝试通过出口负载平衡器(如Microsoft所说的)来做到这一点。我们尝试通过aks添加一些负载均衡器,看来它获得了真实的IP地址。但是问题是我们无法为某些外部端点定义某些ip地址。来自pod的每个请求都尝试直接进入公司的Web服务,而无需访问负载平衡器并从防火墙返回错误。
我们使用下面的yaml创建了负载均衡器。这些是内部负载平衡器,因为当我们尝试创建公共负载平衡器时,我们无法为其分配某些ip地址,或者我们可能错过了一些东西。我们也尝试过使用公共负载平衡器,但是没有运气。
此外,我们尝试使用Istio-出口功能进行此操作,我们使用sidecar注入安装istio,并标记了要测试的名称空间。我们创建了virtualService,ServiceEntry,Gateway和DestionationRule,但找不到为特定外部主机提供特定负载均衡器或特定IP的方法。
我们从azure和istio页面上阅读了很多文档,并进行了大量搜索。我们尝试了很多我无法在这里写的东西。我认为,这不应该是一个艰巨的话题,应该有一种有效的方法来做到这一点。恐怕我们迷路了。我们的内部团队中没有基础人员,这是我们首次与Azure和Azure-aks合作。
我们对所有想法持开放态度,并感谢所有想法。
环境:我们正在使用azure kubernetes服务。 服务器版本:version.Info {主要:“ 1”,次要:“ 10”,GitVersion:“ v1.10.13”,GitCommit:“ 954ff68d59e9dc62fa8252ffa9023a90ff8a358c”,GitTreeState:“ clean”,BuildDate:“ 2019-02-13T11:03: 32Z”,GoVersion:“ go1.9.3”,编译器:“ gc”,平台:“ linux / amd64”}
集群大小:1个节点(测试环境) 集群中工作负载的一般描述:一个应用程序包含多个java-spring引导微服务