azurekubernetes内部负载均衡器访问通过dns名称而不是ip地址



问题陈述

我们计划使用azureapi管理服务作为AKS的反向代理。我参考了下面的URL,用AKS配置azureapi管理器。虽然它提供了关于节点端口的信息,但同样可以通过内部负载均衡器IP地址应用。

https://fizzylogic.nl/2017/06/16/how-to-connect-azure-api-management-to-your-kubernetes-cluster/

我们目前有多个环境,如dev1、dev2、dev3、dev、uat、stage、prod。我们正在尝试自动化这个配置步骤,不需要绑定到特定的IP,但需要指向与k8s的内部负载均衡器相关的dns名称。

如果您在服务上使用注释来使用内部负载均衡器,您将在vNet上获得服务的IP地址,而不是外部IP。

注释:service.beta.kubernetes.io/azure-load-babalancer-internal:"true">

然后您可以使用外部dns服务(https://github.com/kubernetes-incubator/external-dns)为Azure DNS区域内的服务自动创建DNS条目。然后,您应该能够解析到服务的DNS名称。

虽然没有明确支持,但它也适用于私有DNS区域。

@Ben回答了部分问题。我会谨慎使用外部dns开源,因为你可能不想创建对这个非常重要的函数的依赖。它需要您授予额外的权限!

您将需要一个虚拟专用ip,它是通过内部负载均衡器注释实现的,并且可以工作。我最近记录了带有内部负载均衡器的端到端tls/ssl,可以在https://blogs.aspnet4you.com/2019/01/06/end-to-end-tlsssl-offloading-with-application-gateway-and-kubernetes-ingress/.

请记住,在删除http应用程序路由插件之前,我的解决方案运行良好。为什么?该加载项附带Azure Dns(公共)和公共负载平衡器。当我删除插件时,它们都被永久删除了,但删除破坏了与内部负载均衡器的vip相关的dns条目。我不打算删除dns区域。我尝试创建新的DNS区域并添加具有专用IP的记录没有成功。Kubernetes无法解析fqdn。尝试使用Azure专用DNS,但都无法解决!我尝试将configmap与kube-dns一起使用,但没有成功,如果我包括上游,它会破坏其他东西的dns解析!所以,调查还在继续!

我很想听听你是如何解决fqdn问题的。

乐观地说,我认为基于VM的自定义dns服务器是一个不错的选择,您可能会有一个混合解决方案。

应该可以将Azure VNET配置为依赖于您自己的DNS服务器:https://learn.microsoft.com/en-us/azure/virtual-network/virtual-networks-name-resolution-for-vms-and-role-instances#name-使用您自己的dns服务器的解析。ONce设置APIM将使用它来解析所有传出请求的地址。只需确保您也支持解析公共地址,因为APIM的依赖关系很少,没有这些依赖关系它就无法工作。

最新更新