Este conteúdo foi traduzido por máquina para sua conveniência e a Huawei Cloud não pode garantir que o conteúdo foi traduzido com precisão. Para exibir o conteúdo original, use o link no canto superior direito para mudar para a página em inglês.
Central de ajuda/ Cloud Container Engine/ Guia de usuário/ Rede/ DNS/ Uso de CoreDNS para resolução de nome de domínio personalizado
Atualizado em 2024-11-28 GMT+08:00

Uso de CoreDNS para resolução de nome de domínio personalizado

Desafios

Ao usar o CCE, talvez seja necessário resolver nomes de domínio internos personalizados nos seguintes cenários:

  • No código legado, um nome de domínio fixo é configurado para chamar outros serviços internos. Se o sistema decidir usar os Serviços do Kubernetes, a carga de trabalho de refatoração de código pode ser pesada.
  • Um serviço é criado fora do cluster. Os dados no cluster precisam ser enviados para o serviço por meio de um nome de domínio fixo.

Solução

Existem várias soluções baseadas em CoreDNS para resolução de nomes de domínio personalizados:

Precauções

A modificação incorreta na configuração do CoreDNS pode causar falhas de resolução de nome de domínio no cluster. Realize testes antes e depois da modificação.

Configurar o domínio de stub para CoreDNS

Os administradores de cluster podem modificar o ConfigMap do CoreDNS Corefile para alterar o funcionamento da descoberta de serviços.

Suponha que um administrador de cluster tem um servidor DNS Consul localizado em 10.150.0.1 e todos os nomes de domínio Consul têm o sufixo .consul.local.

  1. Efetue logon no console do CCE e clique no nome do cluster para acessar o console do cluster.
  2. No painel de navegação, escolha Add-ons. Na página exibida, clique em Edit em CoreDNS.
  3. Adicione um domínio de stub na área Parameters. O formato é um par chave-valor. A chave é um nome de domínio de sufixo do DNS e o valor é um endereço IP do DNS ou um grupo de endereços IP do DNS, por exemplo, consul.local -- 10.150.0.1.

  4. Clique em OK.
  5. Escolha ConfigMaps and Secrets no painel de navegação, selecione o namespace do kube-system e veja os dados do ConfigMap do CoreDNS para verificar se a atualização foi bem-sucedida.

    O conteúdo do Corefile correspondente é o seguinte:

    .: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
        ready {$POD_IP}:8081
    }
    consul.local:5353 {
        bind {$POD_IP}
        errors
        cache 30
        forward . 10.150.0.1
    }

Modificar o arquivo de configuração de hosts do CoreDNS

Depois de modificar o arquivo hosts no CoreDNS, você não precisa configurar o arquivo hosts em cada pod para adicionar registros de resolução.

  1. Efetue logon no console do CCE e clique no nome do cluster para acessar o console do cluster.
  2. No painel de navegação, escolha Add-ons. Na página exibida, clique em Edit em CoreDNS.
  3. Edite a configuração avançada em Parameters e adicione o seguinte conteúdo ao campo plugins:

    {
      "configBlock": "192.168.1.1 www.example.com\nfallthrough",
      "name": "hosts"
    }

    O campo fallthrough deve ser configurado. fallthrough indica que quando o nome de domínio a ser resolvido não pode ser encontrado no arquivo hosts, a tarefa de resolução é transferida para o próximo plug-in de CoreDNS. Se fallthrough não for especificado, a tarefa termina e a resolução do nome de domínio pára. Como resultado, a resolução de nome de domínio no cluster falha.

    Para obter detalhes sobre como configurar o arquivo hosts, visite https://coredns.io/plugins/hosts/.

  4. Clique em OK.
  5. Escolha ConfigMaps and Secrets no painel de navegação, selecione o namespace do kube-system e veja os dados do ConfigMap do CoreDNS para verificar se a atualização foi bem-sucedida.

    O conteúdo do Corefile correspondente é o seguinte:

    .:5353 {
        bind {$POD_IP}
        hosts {
          192.168.1.1 www.example.com
          fallthrough
        }
        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
        ready {$POD_IP}:8081
    }

Adicionar a configuração de reescrita do CoreDNS para apontar o nome de domínio para Serviços no cluster

Use o plug-in de reescrita do CoreDNS para resolver um nome de domínio especificado para o nome de domínio de um Serviço. Por exemplo, a solicitação para acessar o nome de domínio example.com é redirecionada para o nome de domínio example.default.svc.cluster.local, ou seja, o serviço de exemplo no namespace padrão.

  1. Efetue logon no console do CCE e clique no nome do cluster para acessar o console do cluster.
  2. No painel de navegação, escolha Add-ons. Na página exibida, clique em Edit em CoreDNS.
  3. Edite a configuração avançada em Parameters e adicione o seguinte conteúdo ao campo plugins:

    {
       "name": "rewrite",
       "parameters": "name example.com example.default.svc.cluster.local"
    }

  4. Clique em OK.
  5. Escolha ConfigMaps and Secrets no painel de navegação, selecione o namespace do kube-system e veja os dados do ConfigMap do CoreDNS para verificar se a atualização foi bem-sucedida.

    Conteúdo do Corefile correspondente:

    .:5353 {
        bind {$POD_IP}
        rewrite name example.com example.default.svc.cluster.local
        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
        ready {$POD_IP}:8081
    }

Usar CoreDNS para DNS autoconstruído em cascata

Por padrão, o CoreDNS usa o arquivo /etc/resolv.conf do nó para resolução. Você também pode alterar o endereço de resolução para o do DNS externo.

  1. Efetue logon no console do CCE e clique no nome do cluster para acessar o console do cluster.
  2. No painel de navegação, escolha Add-ons. Na página exibida, clique em Edit em CoreDNS.
  3. Edite a configuração avançada em Parameters e modifique o seguinte conteúdo no campo plugins:

    {
        "configBlock": "policy random",
        "name": "forward",
        "parameters": ". 192.168.1.1"
    }

  4. Clique em OK.
  5. Escolha ConfigMaps and Secrets no painel de navegação, selecione o namespace do kube-system e veja os dados do ConfigMap do CoreDNS para verificar se a atualização foi bem-sucedida.

    O conteúdo do Corefile correspondente é o seguinte:

    .: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 {
            policy random
        }
        reload
        ready {$POD_IP}:8081
    }