首页 > 解决方案 > 从 azure-aks pod 调用具有不同源 IP 地址的外部服务

问题描述

我们尝试将我们的多微服务应用程序部署到一家大公司。但是,公司基础架构团队要求我们使用某些私有 IP 地址请求他们的服务。我们在公司网络和 azure 虚拟网络之间建立了 vpn 连接。

例如,我们从我们的一个微服务中调用 company-service-1、company-service-2 和 company-service-3,infra 团队说,使用 XXX.XXX.XXX.121 源 IP 调用 company-service-1 ,使用 XXX.XXX.XXX.122 源 ip 调用 company-service-2 并使用 XXX.XXX.XXX.123 源 ip 调用 company-service-3。他们已经为这些 ip 定义了防火墙规则,并且由于某些安全限制而不会更改它们。

我们可以通过为虚拟机定义不同的网络接口并创建一些 ip 路由来做到这一点,例如“ip route add XXX.XXX.XXX.YYY/32 via XXX.XXX.XXX.1 src XXX.XXX.XXX.123”。但那时,我们正在努力解决网络接口添加限制。因为,归根结底,我们要用不同的 ip 调用 20 个不同的服务。此外,我们可能有多个 aks 集群,因此这种方法并不好。

我们尝试通过像微软所说的出口负载平衡器来实现这一点。我们尝试通过 aks 添加一些负载均衡器,它似乎获得了真实的 IP 地址。但问题是我们无法为某些外部端点定义某些 IP 地址。来自 Pod 的每个请求都尝试直接访问公司 Web 服务,而无需访问负载均衡器并从防火墙返回错误。

aks 中的负载均衡器

我们在下面使用 yaml 创建了负载均衡器。这些是内部负载均衡器,因为当我们尝试创建公共负载均衡器时,我们无法为其分配特定的 IP 地址,或者我们可能会遗漏一些东西。我们还尝试使用公共负载均衡器,但没有运气。

内部负载均衡器 Yaml

此外,我们尝试使用 Istio - egress 功能来做到这一点,我们使用 sidecar 注入安装 istio 并标记一个命名空间以进行测试。我们创建了 virtualService、ServiceEntry、Gateway 和 DestionationRule,但我们找不到为某些外部主机提供特定负载均衡器或特定 IP 的方法。

ServiceEntry、Gateway、VirtualService、DestinationRule yaml

我们从 azure 和 istio 页面中阅读了很多文档并进行了很多搜索。我们尝试了很多东西,我不能把它们都写在这里。我认为,这不应该是一个很难的话题,应该有一个有效的方法来做到这一点。恐怕我们会迷路。我们的内部团队没有基础设施人员,这是我们第一次使用 Azure 和 azure-aks。

我们对所有想法持开放态度,并提前感谢您的所有想法。

环境:我们正在使用 azure kubernetes 服务。服务器版本:version.Info{Major:"1", Minor:"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 boot 微服务

标签: azureistioazure-aksazure-load-balancer

解决方案


推荐阅读