通过 dns 名称而不是 ip 地址访问 azure kubernetes-internal 负载均衡器
azure kubernetes-internal load balancer access by dns name instead of ip address
问题陈述
我们计划使用 azure api 管理服务作为我们 AKS 的反向代理。我参考了以下 URL 使用 AKS 配置 azure api 管理器。虽然它提供了有关节点端口的信息,但同样可以通过内部负载均衡器 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 名称。
应该可以将 Azure VNET 配置为依赖于您自己的 DNS 服务器:https://docs.microsoft.com/en-us/azure/virtual-network/virtual-networks-name-resolution-for-vms-and-role-instances#name-resolution-that-uses-your-own-dns-server。一旦设置 APIM 将使用它来解析所有传出请求的地址。只需确保您也支持解析 public 地址,因为对 APIM 的依赖很少,没有它就无法工作。
如果您在服务上使用注释以使用内部负载均衡器,您将在 vNet 上为您的服务获得一个 IP 地址,而不是外部 IP。
注解:
service.beta.kubernetes.io/azure-load-balancer-internal: "true"
然后您可以使用外部 dns 服务 (https://github.com/kubernetes-incubator/external-dns) 自动为 Azure DNS 区域内的服务创建 DNS 条目。然后您应该能够解析为服务 DNS 名称。
虽然没有明确支持,但它也适用于私有 DNS 区域。
部分问题由@Ben 解答。我会谨慎使用 external-dns open source,因为您可能不希望对这个非常重要的功能产生依赖。它需要您授予额外的权限!
您将需要一个虚拟专用 ip,它是通过内部负载平衡器注释实现的,并且可以正常工作。我最近用内部负载平衡器记录了结束 tls/ssl,可以在 https://blogs.aspnet4you.com/2019/01/06/end-to-end-tlsssl-offloading-with-application-gateway-and-kubernetes-ingress/.
找到它
请记住,在我删除 http 应用程序路由附加组件之前,我的解决方案效果很好。为什么?该附加组件附带 Azure Dns (public) 和 public 负载均衡器。当我删除附加组件时,它们都被永久删除,但删除破坏了与内部负载平衡器的 vip 关联的 dns 条目。我不打算删除 dns 区域。我尝试创建新的 DNS 区域并添加具有私有 IP 的 A 记录没有成功。 Kubernetes 无法解析 fqdn。尝试使用 Azure 私有 DNS,但它也无法解析!我尝试将 configmap 与 kube-dns 一起使用没有用,如果我包含上游,它会破坏其他东西的 dns 解析!所以,调查继续!
我很想听听你是如何解决 fqdn 问题的。
乐观地说,我认为基于 VM 的自定义 DNS 服务器是不错的选择,您可能会有一个用于混合解决方案。
问题陈述
我们计划使用 azure api 管理服务作为我们 AKS 的反向代理。我参考了以下 URL 使用 AKS 配置 azure api 管理器。虽然它提供了有关节点端口的信息,但同样可以通过内部负载均衡器 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 名称。
应该可以将 Azure VNET 配置为依赖于您自己的 DNS 服务器:https://docs.microsoft.com/en-us/azure/virtual-network/virtual-networks-name-resolution-for-vms-and-role-instances#name-resolution-that-uses-your-own-dns-server。一旦设置 APIM 将使用它来解析所有传出请求的地址。只需确保您也支持解析 public 地址,因为对 APIM 的依赖很少,没有它就无法工作。
如果您在服务上使用注释以使用内部负载均衡器,您将在 vNet 上为您的服务获得一个 IP 地址,而不是外部 IP。
注解: service.beta.kubernetes.io/azure-load-balancer-internal: "true"
然后您可以使用外部 dns 服务 (https://github.com/kubernetes-incubator/external-dns) 自动为 Azure DNS 区域内的服务创建 DNS 条目。然后您应该能够解析为服务 DNS 名称。
虽然没有明确支持,但它也适用于私有 DNS 区域。
部分问题由@Ben 解答。我会谨慎使用 external-dns open source,因为您可能不希望对这个非常重要的功能产生依赖。它需要您授予额外的权限!
您将需要一个虚拟专用 ip,它是通过内部负载平衡器注释实现的,并且可以正常工作。我最近用内部负载平衡器记录了结束 tls/ssl,可以在 https://blogs.aspnet4you.com/2019/01/06/end-to-end-tlsssl-offloading-with-application-gateway-and-kubernetes-ingress/.
找到它请记住,在我删除 http 应用程序路由附加组件之前,我的解决方案效果很好。为什么?该附加组件附带 Azure Dns (public) 和 public 负载均衡器。当我删除附加组件时,它们都被永久删除,但删除破坏了与内部负载平衡器的 vip 关联的 dns 条目。我不打算删除 dns 区域。我尝试创建新的 DNS 区域并添加具有私有 IP 的 A 记录没有成功。 Kubernetes 无法解析 fqdn。尝试使用 Azure 私有 DNS,但它也无法解析!我尝试将 configmap 与 kube-dns 一起使用没有用,如果我包含上游,它会破坏其他东西的 dns 解析!所以,调查继续!
我很想听听你是如何解决 fqdn 问题的。
乐观地说,我认为基于 VM 的自定义 DNS 服务器是不错的选择,您可能会有一个用于混合解决方案。