解析 kubernetes 集群 (AKS) 中的自定义 dns

Resolve custom dns in kubernetes cluster (AKS)

我们目前在 kubernetes 集群 (AKS) 中有 pods 需要解析两个不同的域。

第一个域是集群域 default.svc.cluster.local,第二个域是 mydns.local

如何实现?

我认为你可以使用 ingress 和 ingress controller 来管理域,path.with ingress 你可以管理多个域并将服务添加到特定域。

https://kubernetes.github.io/ingress-nginx/

这里还分享了从数字海洋设置入口的教程,您可以关注它:

https://www.digitalocean.com/community/tutorials/how-to-set-up-an-nginx-ingress-with-cert-manager-on-digitalocean-kubernetes

我自己找到了解决方案。

有两种方法可以实现所需的名称解析:

  1. 如果您的 AKS 群集位于 Azure VNET 中,您可以将 VNET 中的 DNS 设置设置为能够解析您的自定义域的自定义 DNS 服务器。如果您的 Pods 没有指定的 dns 设置,那么解析将以这种方式工作:

首先 Pods 尝试在 CoreDNS 中解析 DNS 请求,如果他们不能,那么他们会获取主机的 DNS 设置并询问主机中配置的 DNS 服务器。由于在 azure 中 VNET 的 DNS 设置应用于虚拟机,它将询问正确的 DNS 服务器。

  1. 使用以下 json 修改 AKS 群集中的 coreDNS 设置:

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: coredns-custom
      namespace: kube-system
    data:
      yourdns.server: |
        yourdns.com:53 {
          errors
          cache 1
          proxy . 10.1.0.40
        }
    

重要的是要知道,在 AKS 中你不能覆盖 coredns ConfigMap。几秒钟后,Kubernetes master 总是会将其重置为默认值。如果要在 AKS 中编辑 ConfigMap,则必须将 configmap 命名为 "coredns-custom".

yourdns.server其实不是服务器。就是domain.server。 DNS 服务器 IP 在代理设置后面。

您的第二点“2.Modify AKS 群集中的 coreDNS 设置具有以下 json:”

请注意,应使用 "forward" 插件代替 "proxy",如下所述:

https://github.com/Azure/AKS/issues/1304