Todos los productos
Search
Centro de documentos

Container Service for Kubernetes:Configurar CoreDNS no administrado

Última actualización: Sep 21, 2026

CoreDNS es el servidor del sistema de nombres de dominio (DNS) predeterminado de los clústeres de Container Service for Kubernetes (ACK). Este tema presenta los plugins que proporciona CoreDNS y cómo configurarlos en diversos escenarios.

Requisitos previos

Escenarios de uso

En este tema se utiliza como ejemplo un pod que emplea CoreDNS para la resolución DNS. dnsPolicy: ClusterFirst se especifica en la configuración de la política DNS del pod. Por ejemplo:

apiVersion: v1
kind: Pod
metadata:
  name: alpine
  namespace: default
spec:
  containers:
  - image: alpine
    command:
      - sleep
      - "10000"
    imagePullPolicy: Always
    name: alpine
  dnsPolicy: ClusterFirst

Para obtener más información sobre cómo establecer el parámetro dnsPolicy en varios escenarios, consulte Configure DNS resolution.

Configuraciones predeterminadas de CoreDNS

En el namespace kube-system encontrará un ConfigMap de CoreDNS. CoreDNS configura y habilita los plugins que se especifican en el ConfigMap. Los ConfigMaps de las distintas versiones de CoreDNS presentan ligeras diferencias. Lea la documentación oficial de CoreDNS antes de modificar las configuraciones. A continuación se muestra el contenido del archivo de configuración predeterminado que usa CoreDNS 1.6.2:

  Corefile: |
    .:53 {
        errors
        log
        health {
           lameduck 15s
        }
        ready
        kubernetes {{.ClusterDomain}} in-addr.arpa ip6.arpa {
          pods verified
          fallthrough in-addr.arpa ip6.arpa
        }
        prometheus :9153
        forward . /etc/resolv.conf {
              prefer_udp
        }
        cache 30
        loop
        reload
        loadbalance
    }
Nota

Reemplace ClusterDomain por el nombre de dominio del clúster que especifique al crear el clúster. El nombre de dominio predeterminado del clúster es cluster.local.

Parámetro

Descripción

errors

Imprime los errores en la salida estándar (stdout).

health

Genera informes de comprobación de estado para CoreDNS. El puerto de escucha predeterminado es el 8080. Este plugin sirve para evaluar el estado de salud de CoreDNS. Consulte http://localhost:8080/health para ver el informe de comprobación de estado de CoreDNS.

ready

Reporta el estado de los plugins de CoreDNS. El puerto de escucha predeterminado es el 8181. Este plugin evalúa si los plugins de CoreDNS están listos. Consulte http://localhost:8181/ready para verificar la disponibilidad de los plugins de CoreDNS. Cuando todos los plugins se encuentran en ejecución, se devuelve un código de respuesta 200 que indica su disponibilidad.

kubernetes

El plugin kubernetes de CoreDNS proporciona resolución DNS para los servicios de un clúster de ACK.

prometheus

Exporta las métricas de CoreDNS. Consulte http://localhost:9153/metrics para ver las métricas de CoreDNS en formato Prometheus.

forward o proxy

Reenvía las consultas DNS al servidor DNS predefinido. De forma predeterminada, las consultas DNS de nombres de dominio fuera del dominio del clúster de Kubernetes se reenvían al resolvedor DNS predefinido (/etc/resolv.conf). Las configuraciones predeterminadas se basan en el archivo /etc/resolv.conf del host.

cache

Habilita la caché DNS.

loop

Detecta bucles. Si detecta uno, suspende CoreDNS.

reload

Permite recargar automáticamente un Corefile modificado. Después de editar el ConfigMap, espere 2 minutos para que los cambios surtan efecto.

loadbalance

Funciona como un load balancer DNS de tipo round-robin para aleatorizar el orden de los registros A, AAAA y MX en la respuesta.

multisocket

CoreDNS v1.12.1 introduce el plugin multisocket para mejorar el rendimiento en entornos con alto consumo de CPU. Al habilitarlo, este plugin permite que CoreDNS escuche en el mismo puerto mediante varios sockets simultáneamente. Para obtener instrucciones detalladas, consulte DNS best practices.

Configurar funciones extendidas basadas en CoreDNS

Es posible configurar funciones extendidas basadas en CoreDNS en los siguientes escenarios:

  • Escenario 1: habilitar la recopilación de registros

    Para recopilar el registro de todas las resoluciones DNS que ejecuta CoreDNS, habilite el plugin log. Agregue el parámetro log a Corefile. Por ejemplo:

      Corefile: |
        .:53 {
            errors
            log
            health {
               lameduck 15s
            }
            ready
            kubernetes cluster.local in-addr.arpa ip6.arpa {
              pods insecure
              fallthrough in-addr.arpa ip6.arpa
              ttl 30
            }
            prometheus :9153
            forward . /etc/resolv.conf {
                  prefer_udp
            }
            cache 30
            loop
            reload
            loadbalance
        }
  • Escenario 2: personalizar servidores DNS para nombres de dominio específicos

    Si necesita que un servidor DNS definido por el usuario resuelva los nombres de dominio con el sufijo example.com (por ejemplo, el servidor DNS 10.10.0.10), agregue una configuración de resolución personalizada para esos nombres de dominio. Por ejemplo:

    example.com:53 {
      errors
      cache 30
      forward . 10.10.0.10 {
      prefer_udp
      }
    }

    A continuación se muestra la configuración completa de Corefile:

      Corefile: |
        .:53 {
            errors
            health {
               lameduck 15s
            }
            ready
            kubernetes cluster.local in-addr.arpa ip6.arpa {
              pods insecure
              fallthrough in-addr.arpa ip6.arpa
              ttl 30
            }
            prometheus :9153
            forward . /etc/resolv.conf {
              prefer_udp
            }
            cache 30
            loop
            reload
            loadbalance
        }
        example.com:53 {
            errors
            cache 30
            forward . 10.10.0.10 {
            prefer_udp
            }
        }
  • Escenario 3: personalizar servidores DNS para nombres de dominio externos

    Cuando los nombres de dominio que deben resolverse mediante servidores DNS definidos por el usuario no comparten el mismo sufijo, utilice dichos servidores para resolver todos los nombres de dominio externos. En este escenario, debe reenviar a Alibaba Cloud DNS los nombres de dominio que los servidores personalizados no puedan resolver. No modifique los archivos /etc/resolv.conf de las instancias de Elastic Compute Service (ECS) del clúster de ACK. Por ejemplo, si las direcciones IP de los servidores DNS definidos por el usuario son 10.10.0.10 y 10.10.0.20, modifique el parámetro forward. Por ejemplo:

      Corefile: |
        .:53 {
            errors
            health {
               lameduck 15s
            }
            ready
            kubernetes cluster.local in-addr.arpa ip6.arpa {
              pods insecure
              fallthrough in-addr.arpa ip6.arpa
              ttl 30
            }
            prometheus :9153
            forward . 10.10.0.10 10.10.0.20 {
              prefer_udp
            }
            cache 30
            loop
            reload
            loadbalance
        }
  • Escenario 4: personalizar hosts para nombres de dominio específicos

    Configure el plugin hosts si desea personalizar los hosts para nombres de dominio específicos. Por ejemplo, cuando necesite dirigir www.example.com a 127.0.0.1. Por ejemplo:

      Corefile: |
        .:53 {
            errors
            health {
               lameduck 15s
            }
            ready
            
            hosts {
              127.0.0.1 www.example.com
              fallthrough
            }
          
            kubernetes cluster.local in-addr.arpa ip6.arpa {
              pods insecure
              fallthrough in-addr.arpa ip6.arpa
              ttl 30
            }
            prometheus :9153
            forward . /etc/resolv.conf {
              prefer_udp
            }
            cache 30
            loop
            reload
            loadbalance
        }
    Importante

    Debe especificar fallthrough. De lo contrario, podría fallar la resolución de los nombres de dominio distintos al especificado.

  • Escenario 5: habilitar el acceso externo a los servicios de un clúster de ACK

    Si desea que un proceso en una instancia ECS de un clúster de ACK acceda a los servicios del clúster, establezca la dirección IP del clúster de kube-dns como valor del parámetro nameserver en el archivo /etc/resolv.conf de la instancia ECS. No modifique otras configuraciones del archivo /etc/resolv.conf.

    Dentro de una red interna, utilice una instancia de Server Load Balancer (SLB) orientada a la red interna para permitir el acceso interno a los servicios del clúster de ACK. Luego, inicie sesión en la consola de Alibaba Cloud DNS PrivateZone y agregue un registro A que apunte a la dirección IP privada de la instancia SLB.

  • Escenario 6: usar un nombre de dominio para permitir el acceso a un servicio en un clúster de ACK o habilitar la resolución CNAME para un clúster de ACK

    Utilice foo.example.com para permitir todo el acceso a su servicio en un clúster de ACK desde Internet, redes internas y dentro del propio clúster. A continuación se describe cómo habilitar esta función:

    • Su servicio foo.default.svc.cluster.local está expuesto al acceso externo mediante una instancia SLB orientada a Internet. El nombre de dominio foo.example.com se resuelve a la dirección IP de dicha instancia SLB.

    • Su servicio foo.default.svc.cluster.local está expuesto al acceso interno mediante una instancia SLB orientada a la red interna. Inicie sesión en la consola de Alibaba Cloud DNS PrivateZone para dirigir foo.example.com a la dirección IP de la instancia SLB interna en la virtual private cloud (VPC) donde se despliega el clúster de ACK. Para conocer el procedimiento, consulte Scenario 4: Customize hosts for specified domain names.

    • Dentro del clúster de ACK, utilice el plugin rewrite para agregar un registro CNAME que dirija foo.example.com a foo.default.svc.cluster.local. Por ejemplo:

        Corefile: |
          .:53 {
              errors
              health {
                 lameduck 15s
              }
              ready
              
              rewrite stop {
                name exact foo.example.com foo.default.svc.cluster.local
                answer name foo.default.svc.cluster.local foo.example.com 
              }
      
              kubernetes cluster.local in-addr.arpa ip6.arpa {
                pods insecure
                fallthrough in-addr.arpa ip6.arpa
                ttl 30
              }
              prometheus :9153
              forward . /etc/resolv.conf {
                prefer_udp
              }
              cache 30
              loop
              reload
              loadbalance
          }
  • Escenario 7: configurar CoreDNS para que no devuelva direcciones IPv6 resueltas mediante registros AAAA

    Si sus pods de aplicación no requieren resultados de resolución basados en registros AAAA, configure CoreDNS para interceptar dichos resultados y devolver un código NODATA. Esto minimiza la transferencia de datos. Por ejemplo:

      Corefile: |
        .:53 {
            errors
            health {
               lameduck 15s
            }
            # Add the following line to enable the template plug-in. Do not modify other settings. 
            template IN AAAA .
        
        }
  • Escenario 8: habilitar la función MCS de ACK One

    Nota

    CoreDNS 1.9.3 o versiones posteriores admiten la función de servicios multiclúster (MCS) de Distributed Cloud Container Platform for Kubernetes (ACK One). Para habilitarla, compruebe que actualizó CoreDNS a la versión 1.9.3 o posterior. Para obtener más información, consulte Configure ACK to automatically update CoreDNS y Manually update CoreDNS.

    1. Ejecute el siguiente comando para actualizar el ConfigMap de CoreDNS:

      kubectl edit configmap/coredns -n kube-system
    2. Agregue una línea arriba de la que comienza con kubernetes y especifique multicluster clusterset.local en la nueva línea para habilitar el plugin multicluster, el cual activa la función MCS de ACK One. Esta configuración establece los sufijos de los nombres de dominio de los servicios multiclúster como clusterset.local.

      Corefile: |
          .:53 {
              # Irrelevant lines are not shown. 
              # Add the following line. 
              multicluster clusterset.local
              kubernetes cluster.local in-addr.arpa ip6.arpa {
                pods insecure
                fallthrough in-addr.arpa ip6.arpa
                ttl 30
              }
              # Irrelevant lines are not shown. 
          }
    3. Presione Esc, introduzca :wq! y luego presione Enter para guardar el archivo y salir del modo de edición.

  • Escenario 9: especificar distintos servidores DNS ascendentes para dominios externos

    Requisitos previos

    CoreDNS versión 1.11.3 o posterior.

    Configuración

    Defina varias directivas forward dentro de un solo bloque de servidor. Cada directiva puede especificar un servidor DNS ascendente distinto para un dominio específico. Para consultar la lista completa de parámetros, revise la documentación oficial del plugin forward.

    Ejemplo

    Corefile: |
        .:53 {
            # ... other configurations ...
            kubernetes cluster.local in-addr.arpa ip6.arpa {
              pods insecure
              fallthrough in-addr.arpa ip6.arpa
              ttl 30
            }
            # Forward queries for foo.com to DNS server 10.20.0.1
            forward foo.com 10.20.0.1
            # Forward queries for bar.com to DNS server 10.30.0.1
            forward bar.com 10.30.0.1
            # Forward all other queries to the DNS servers specified in the node's /etc/resolv.conf
            forward . /etc/resolv.conf
            # ... other configurations ...
        }