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:
- Configurar o domínio de stub para CoreDNS: você pode adicioná-lo no console, que é fácil de operar.
- Uso do plug-in de hosts do CoreDNS para configurar a resolução para qualquer nome de domínio: você pode adicionar qualquer conjunto de registros, o que é semelhante a adicionar um conjunto de registros no arquivo /etc/hosts local.
- Uso do plug-in de reescrita do CoreDNS para apontar um nome de domínio para um serviço no cluster: um apelido é atribuído ao Serviço do Kubernetes. Você não precisa saber o endereço IP do registro de resolução com antecedência.
- Uso do plug-in de encaminhamento do CoreDNS para definir o DNS autoconstruído como o DNS de upstream: o DNS autoconstruído pode gerenciar um grande número de registros de resolução. Você não precisa modificar a configuração do CoreDNS ao adicionar ou excluir registros.
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.
- Efetue logon no console do CCE e clique no nome do cluster para acessar o console do cluster.
- No painel de navegação, escolha Add-ons. Na página exibida, clique em Edit em CoreDNS.
- 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.
- Clique em OK.
- 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.
- Efetue logon no console do CCE e clique no nome do cluster para acessar o console do cluster.
- No painel de navegação, escolha Add-ons. Na página exibida, clique em Edit em CoreDNS.
- 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/.
- Clique em OK.
- 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.
- Efetue logon no console do CCE e clique no nome do cluster para acessar o console do cluster.
- No painel de navegação, escolha Add-ons. Na página exibida, clique em Edit em CoreDNS.
- 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" }
- Clique em OK.
- 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.
- Efetue logon no console do CCE e clique no nome do cluster para acessar o console do cluster.
- No painel de navegação, escolha Add-ons. Na página exibida, clique em Edit em CoreDNS.
- 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" }
- Clique em OK.
- 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 }