Estos contenidos se han traducido de forma automática para su comodidad, pero Huawei Cloud no garantiza la exactitud de estos. Para consultar los contenidos originales, acceda a la versión en inglés.
Centro de ayuda/ Cloud Container Engine/ Guía del usuario/ Red/ DNS/ Uso de CoreDNS para la resolución personalizada de nombres de dominio
Actualización más reciente 2024-09-10 GMT+08:00

Uso de CoreDNS para la resolución personalizada de nombres de dominio

Desafíos

Al usar CCE, es posible que deba resolver nombres de dominio internos personalizados en los siguientes escenarios:

  • En el código heredado, se configura un nombre de dominio fijo para invocar a otros servicios internos. Si el sistema decide usar Kubernetes Services, la carga de trabajo de refactorización de código podría ser pesada.
  • Se crea un servicio fuera del clúster. Los datos del clúster deben enviarse al servicio con un nombre de dominio fijo.

Solución

Existen varias soluciones basadas en CoreDNS para la resolución personalizada de nombres de dominio:

Precauciones

La modificación incorrecta en la configuración de CoreDNS puede provocar errores de resolución de nombres de dominio en el clúster. Realice pruebas antes y después de la modificación.

Configuración del dominio Stub para CoreDNS

Los administradores de clústeres pueden modificar el ConfigMap para CoreDNS Corefile para cambiar el funcionamiento de la detección de servicios.

Suponga que un administrador de clúster tiene un servidor de Consul DNS ubicado en 10.150.0.1 y que todos los nombres de dominio Consul tienen el sufijo .consul.local.

  1. Inicie sesión en la consola de CCE y acceda a la consola del clúster.
  2. En el panel de navegación, elija Add-ons. En la página mostrada, haga clic en Edit en CoreDNS.
  3. Agregue un dominio stub en el área Parameters.

    Modifique el parámetro stub_domains en el formato de un par clave-valor. La clave es un nombre de dominio de sufijo de DNS y el valor es una dirección IP de DNS o un grupo de direcciones IP de DNS.
    {
    	"stub_domains": {
                    "consul.local": [
    			"10.150.0.1"
    		]
    	},
    	"upstream_nameservers": []
    }

  4. Haga clic en OK.

También puede modificar el ConfigMap de la siguiente manera:

Los valores de los parámetros en rojo en el ejemplo solo se pueden modificar y no se pueden eliminar.

$ kubectl edit configmap coredns -n kube-system
apiVersion: v1
data:
  Corefile: |-
    .:5353 {
        bind {$POD_IP}
        cache 30
        errors
        health {$POD_IP}:8080
        kubernetes cluster.local in-addr.arpa ip6.arpa {
            pods insecure
            fallthrough in-addr.arpa ip6.arpa
        }
        loadbalance round_robin
        prometheus {$POD_IP}:9153
        forward . /etc/resolv.conf {
            policy random
        }
        reload
    }

    consul.local:5353 {
        bind {$POD_IP}
        errors
        cache 30
        forward . 10.150.0.1
    }
kind: ConfigMap
metadata:
  creationTimestamp: "2022-05-04T04:42:24Z"
  labels:
    app: coredns
    k8s-app: coredns
    kubernetes.io/cluster-service: "true"
    kubernetes.io/name: CoreDNS
    release: cceaddon-coredns
  name: coredns
  namespace: kube-system
  resourceVersion: "8663493"
  uid: bba87142-9f8d-4056-b8a6-94c3887e9e1d

Modificación del archivo de configuración hosts de CoreDNS

  1. Utilice kubectl para conectarse al clúster.
  2. Modifique el archivo de configuración de CoreDNS y agregue el nombre de dominio personalizado al archivo hosts.

    Apunte www.example.com a 192.168.1.1. Cuando CoreDNS resuelve www.example.com, 192.168.1.1 se devuelve.

    Se debe configurar el campo fallthrough. fallthrough indica que cuando el nombre de dominio a resolver no se encuentra en el archivo hosts, la tarea de resolución se transfiere al siguiente complemento de CoreDNS. Si no se especifica fallthrough, la tarea finaliza y la resolución del nombre de dominio se detiene. Como resultado, la resolución de nombres de dominio en el clúster falla.

    Para obtener más información sobre cómo configurar el archivo hosts, visite https://coredns.io/plugins/hosts/.

    $ kubectl edit configmap coredns -n kube-system
    apiVersion: v1
    data:
      Corefile: |-
        .:5353 {
            bind {$POD_IP}
            cache 30
            errors
            health {$POD_IP}:8080
            kubernetes cluster.local in-addr.arpa ip6.arpa {
              pods insecure
              fallthrough in-addr.arpa ip6.arpa
            }
            hosts {
              192.168.1.1 www.example.com
              fallthrough
            }
            loadbalance round_robin
            prometheus {$POD_IP}:9153
            forward . /etc/resolv.conf
            reload
        }
    kind: ConfigMap
    metadata:
      creationTimestamp: "2021-08-23T13:27:28Z"
      labels:
        app: coredns
        k8s-app: coredns
        kubernetes.io/cluster-service: "true"
        kubernetes.io/name: CoreDNS
        release: cceaddon-coredns
      name: coredns
      namespace: kube-system
      resourceVersion: "460"
      selfLink: /api/v1/namespaces/kube-system/configmaps/coredns
      uid: be64aaad-1629-441f-8a40-a3efc0db9fa9

    Después de modificar el archivo hosts en CoreDNS, no es necesario configurar el archivo hosts en cada pod.

Adición de la configuración Rewrite de CoreDNS para apuntar el nombre de dominio a los servicios en el clúster

Utilice el complemento Rewrite de CoreDNS para resolver un nombre de dominio especificado en el nombre de dominio de un Service.

  1. Utilice kubectl para conectarse al clúster.
  2. Modifique el archivo de configuración de CoreDNS para que apunte example.com al servicio example en el espacio de nombres default.

    $ kubectl edit configmap coredns -n kube-system
    apiVersion: v1
    data:
      Corefile: |-
        .:5353 {
            bind {$POD_IP}
            cache 30
            errors
            health {$POD_IP}:8080
            kubernetes cluster.local in-addr.arpa ip6.arpa {
              pods insecure
              fallthrough in-addr.arpa ip6.arpa
            }
            rewrite name example.com example.default.svc.cluster.local
            loadbalance round_robin
            prometheus {$POD_IP}:9153
            forward . /etc/resolv.conf
            reload
        }
    kind: ConfigMap
    metadata:
      creationTimestamp: "2021-08-23T13:27:28Z"
      labels:
        app: coredns
        k8s-app: coredns
        kubernetes.io/cluster-service: "true"
        kubernetes.io/name: CoreDNS
        release: cceaddon-coredns
      name: coredns
      namespace: kube-system
      resourceVersion: "460"
      selfLink: /api/v1/namespaces/kube-system/configmaps/coredns
      uid: be64aaad-1629-441f-8a40-a3efc0db9fa9

Uso de CoreDNS a DNS autoconstruido en cascada

  1. Utilice kubectl para conectarse al clúster.
  2. Modifique el archivo de configuración de CoreDNS y cambie /etc/resolv.conf después de forward a la dirección IP del servidor de DNS externo.

    $ kubectl edit configmap coredns -n kube-system
    apiVersion: v1
    data:
      Corefile: |-
        .:5353 {
            bind {$POD_IP}
            cache 30
            errors
            health {$POD_IP}:8080
            kubernetes cluster.local in-addr.arpa ip6.arpa {
              pods insecure
              fallthrough in-addr.arpa ip6.arpa
            }
            loadbalance round_robin
            prometheus {$POD_IP}:9153
            forward . 192.168.1.1
            reload
        }
    kind: ConfigMap
    metadata:
      creationTimestamp: "2021-08-23T13:27:28Z"
      labels:
        app: coredns
        k8s-app: coredns
        kubernetes.io/cluster-service: "true"
        kubernetes.io/name: CoreDNS
        release: cceaddon-coredns
      name: coredns
      namespace: kube-system
      resourceVersion: "460"
      selfLink: /api/v1/namespaces/kube-system/configmaps/coredns
      uid: be64aaad-1629-441f-8a40-a3efc0db9fa9