Neste documento, mostramos como resolver problemas com o servidor de metadados do Compute Engine.
As VMs do Compute Engine armazenam metadados em um servidor de metadados. As VMs têm acesso automático à API do servidor de metadados, sem qualquer autorização adicional. No entanto, às vezes as VMs podem perder o acesso ao servidor de metadados devido a uma das seguintes causas:
- Falha ao resolver o nome de domínio do servidor de metadados
- A conexão com o servidor de metadados está bloqueada por uma das seguintes opções:
- Configuração de firewall no nível do SO
- Configuração de proxy
- Roteamento personalizado
Quando as VMs não conseguem acessar o servidor de metadados, alguns processos podem falhar.
Para informações sobre como solucionar o gke-metadata-server
, consulte
Resolver problemas de autenticação do GKE.
Antes de começar
-
Configure a autenticação, caso ainda não tenha feito isso.
A autenticação é
o processo de verificação da sua identidade para acesso a serviços e APIs do Google Cloud.
Para executar códigos ou amostras de um ambiente de desenvolvimento local, autentique-se no
Compute Engine da seguinte maneira.
Selecione a guia para como planeja usar as amostras nesta página:
Console
Quando você usa o console do Google Cloud para acessar os serviços e as APIs do Google Cloud, não é necessário configurar a autenticação.
gcloud
-
Instale a Google Cloud CLI e inicialize-a executando o seguinte comando:
gcloud init
- Defina uma região e uma zona padrão.
REST
Para usar as amostras da API REST nesta página em um ambiente de desenvolvimento local, use as credenciais fornecidas para a CLI gcloud.
Instale a Google Cloud CLI e inicialize-a executando o seguinte comando:
gcloud init
-
Erros comuns
Veja a seguir exemplos do que pode ser encontrado se a VM falhar ao acessar o servidor de metadados:
curl: (6) Could not resolve host: metadata.google.internal
postAttribute error: Put "http://metadata.google.internal/computeMetadata/v1/instance/guest-attributes/guestInventory/ShortName": dial tcp: lookup metadata.google.internal on [::1]:53: read udp [::1]:58319->[::1]:53: read: connection refused
Solução de problemas de solicitações com falha para o servidor de metadados
Se a VM tiver perdido o acesso ao servidor de metadados, faça o seguinte:
Linux
- Conecte-se à VM do Linux.
Na VM Linux, execute os seguintes comandos para testar a conectividade com o servidor de metadados:
Consulte o Servidor de Nomes de Domínio:
nslookup metadata.google.internal
A saída será parecida com esta:
Server: 169.254.169.254 Address: 169.254.169.254#53 Non-authoritative answer: Name: metadata.google.internal Address: 169.254.169.254
Verifique se o servidor de metadados está acessível. Para verificar, execute os seguintes comandos:
ping -c 3 metadata.google.internal
A saída será parecida com esta:
PING metadata.google.internal (169.254.169.254) 56(84) bytes of data. 64 bytes from metadata.google.internal (169.254.169.254): icmp_seq=1 ttl=255 time=0.812 ms
ping -c 3 169.254.169.254
A saída será parecida com esta:
PING 169.254.169.254 (169.254.169.254) 56(84) bytes of data. 64 bytes from 169.254.169.254: icmp_seq=1 ttl=255 time=1.11 ms
Se a saída dos comandos anteriores corresponder à saída sugerida, sua VM estará conectada ao servidor de metadados e nenhuma outra ação será necessária. Se os comandos falharem, faça o seguinte:
Verifique se o servidor de nomes está configurado para o servidor de metadados:
cat /etc/resolv.conf
A saída será parecida com esta:
domain ZONE.c.PROJECT_ID.internal search ZONE.c.PROJECT_ID.internal. c.PROJECT_ID.internal. google.internal. nameserver 169.254.169.254
Se a saída não tiver as linhas anteriores, consulte a documentação do sistema operacional para saber como editar a Política de DHCP e manter a configuração do servidor de nomes como
169.254.169.254
. Isso ocorre porque as alterações em/etc/resolv.conf
serão substituídas em uma hora se as configurações de DNS zonal forem aplicadas às VMs no projeto. Caso seu projeto ainda esteja usando um DNS global, o arquivoresolv.conf
vai ser revertido para o DHCP padrão em 24 horas.Verifique se existe o mapeamento entre o nome de domínio do servidor de metadados e o endereço IP dele:
cat /etc/hosts
Esta linha deve aparecer na saída:
169.254.169.254 metadata.google.internal # Added by Google
Se a saída não tiver a linha anterior, execute o seguinte comando:
echo "169.254.169.254 metadata.google.internal" >> /etc/hosts
Windows
- Conecte-se à VM do Windows:
Na VM do Windows, execute os seguintes comandos:
Consulte o Servidor de Nomes de Domínio:
nslookup metadata.google.internal
A saída será parecida com esta:
Server: UnKnown Address: 10.128.0.1 Non-authoritative answer: Name: metadata.google.internal Address: 169.254.169.254
Verifique se o servidor de metadados está acessível. Para verificar, execute os seguintes comandos:
ping -n 3 metadata.google.internal
A saída será parecida com esta:
Pinging metadata.google.internal [169.254.169.254] with 32 bytes of data: Reply from 169.254.169.254: bytes=32 time=1ms TTL=255
ping -n 3 169.254.169.254
A saída será parecida com esta:
Pinging metadata.google.internal [169.254.169.254] with 32 bytes of data: Reply from 169.254.169.254: bytes=32 time=1ms TTL=255
Se a saída dos comandos anteriores corresponder à saída sugerida, sua VM estará conectada ao servidor de metadados e nenhuma outra ação será necessária. Se os comandos falharem, faça o seguinte:
Para verificar se há uma rota persistente para o servidor de metadados, execute o comando:
route print
A saída precisa conter o seguinte:
Persistent Routes: Network Address Netmask Gateway Address Metric 169.254.169.254 255.255.255.255 On-link 1
Se a saída não tiver a linha anterior, adicione a rota usando os seguintes comandos:
$Adapters = Get-NetKVMAdapterRegistry $FirstAdapter = $Adapters | Select-Object -First 1 route /p add 169.254.169.254 mask 255.255.255.255 0.0.0.0 'if' $FirstAdapter.InterfaceIndex metric 1
Verifique se existe o mapeamento entre o nome de domínio do servidor de metadados e o endereço IP dele:
type %WINDIR%\System32\Drivers\Etc\Hosts
Esta linha deve aparecer na saída:
169.254.169.254 metadata.google.internal # Added by Google
Se a saída não tiver a linha anterior, execute o seguinte comando:
echo 169.254.169.254 metadata.google.internal >> %WINDIR%\System32\Drivers\Etc\Hosts
Solução de problemas de solicitações com falha ao usar um proxy de rede
Um servidor proxy de rede impede o acesso direto da VM à Internet. Todas as consultas enviadas de dentro de uma VM são processadas pelo servidor proxy.
Ao usar um aplicativo que recebe credenciais do servidor de metadados, como um
token de autenticação, a VM requer acesso direto ao servidor de metadados.
Se
a VM estiver por trás de um proxy, defina a configuração NO_PROXY
para o endereço IP e o nome do host.
Se você não definirNO_PROXY
, você poderá ver erros ao executar os comandos da Google Cloud CLI ou consultar o servidor de metadados diretamente desde as chamadas parametadata.google.internal
serão enviados ao proxy sem que sejam resolvidos localmente na própria instância.
Este é um exemplo de erro que você pode ver:
ERROR 403 (Forbidden): Your client does not have permission to get URL
Para resolver esse problema de proxy, adicione o nome do host e o endereço IP do servidor de metadados à variável de ambiente NO_PROXY
da seguinte maneira:
Linux
- Conecte-se à VM do Linux.
Na VM do Linux, execute os seguintes comandos:
export no_proxy=169.254.169.254,metadata,metadata.google.internal
Para salvar as alterações, execute o seguinte comando:
echo no_proxy=169.254.169.254,metadata,metadata.google.internal >> /etc/environment
Windows
- Conecte-se à VM do Windows:
Na VM do Windows, execute os seguintes comandos:
set NO_PROXY=169.254.169.254,metadata,metadata.google.internal
Para salvar as alterações, execute o seguinte comando:
setx NO_PROXY 169.254.169.254,metadata,metadata.google.internal /m
Formato de cabeçalho incorreto
O servidor de metadados realiza verificações de formatação para garantir que os cabeçalhos estejam em conformidade com a diretriz de formatação de cabeçalhos RFC 7230 Seção 3.2 (em inglês). Se o formato do cabeçalho falhar, estas verificações vão ocorrer:
A solicitação foi aceita. No entanto, você vai receber recomendações de VMs fazendo solicitações ao servidor de metadados com cabeçalhos formatados incorretamente. As recomendações são enviadas uma vez por VM. É possível acessar essas recomendações usando a Google Cloud CLI ou a API REST do recomendador.
Depois de aplicar a recomendação, defina o estado da recomendação como
succeeded
.A partir de 20 de janeiro de 2024, o servidor de metadados vai negar qualquer solicitação com um cabeçalho formatado incorretamente.
Veja a seguir exemplos de formatos de solicitação de cabeçalho válidos e inválidos.
Inválido: contém espaços em branco entre o nome do cabeçalho e dois pontos
Metadata-Flavor : Google
Válido: não há espaço em branco entre o nome do cabeçalho e os dois pontos, espaço em branco após os dois pontos é ignorado pelo verificador
Metadata-Flavor: Google
Válido: sem espaços em branco no cabeçalho
Metadata-Flavor:Google
Para mais informações sobre como fazer consultas ao servidor de metadados, consulte Acessar metadados da VM.