Назад | Перейти на главную страницу

Почему я не могу получить доступ к серверу метаданных экземпляра GCP?

я получаю Could not resolve host metadata.google.internal или Could not resolve host metadata ошибка при попытке доступа к серверу метаданных.

Хотя я использую свой собственный VPC с настраиваемым брандмауэром, я не думаю, что это проблема брандмауэра, потому что, согласно серверу метаданных Google, трафик никогда не покидает экземпляр. Кроме того, в моем хост-файле есть запись, подтверждающая это:

# Google Compute Engine metadata server 169.254.169.254 metadata.google.internal metadata

Я пробовал пинговать 169.254.169.254, но он возвращает General Failure (но это ничего не доказывает .. Я не уверен, поддерживает ли сервер метаданных ICMP).

Мои агенты Stackdriver Logging также не работают из-за этого. Вот строчка из его журнала:

Failed to access metadata service: error_class=Errno::ENETUNREACH error="Failed to open TCP connection to 169.254.169.254:80 (A socket operation was attempted to an unreachable network. - connect(2) for \"169.254.169.254\" port 80)"

В случае, если это имеет значение, внутренний трафик в моей сети VPC ограничен до icmp и tcp:22 Только (ssh).

Что происходит и как решить эту проблему?

Хотя я использую свой собственный VPC с настраиваемым брандмауэром, я не думаю, что это проблема брандмауэра, потому что, согласно серверу метаданных Google, трафик никогда не покидает экземпляр.

Трафик метаданных GCP никогда не покидает физический хост запуск экземпляра. Такие запросы выходят из гостевых интерфейсов, но никогда не перенаправляются.

Брандмауэр уровня хоста в экземпляре может предотвратить попадание трафика на сервер метаданных. Поскольку он сбрасывает пакеты в сетевой стек экземпляра, прежде чем они покинут гостя.

Обычно служба метаданных отвечает на эхо-запросы http, DNS и ICMP, и все они не работают для вас. Только один прыжок, поэтому он может быть неправильно маршрутизирован. Конечно, похоже на брандмауэр.

Чтобы решить эту проблему, вы можете попробовать добавить вручную внутренний DNS, вы можете сделать это, отредактировав файл resolv.conf, который вы найдете по пути: /etc/resolv.conf

Строка должна выглядеть так: nameserver 169.254.169.254,

Для получения дополнительной информации проверьте это документация

Я вижу из вашего сообщения, что вы уже добавили хост:

Сервер метаданных Google Compute Engine

169.254.169.254    metadata.google.internal metadata

Кроме того, я предлагаю вам убедиться, что вы установили гостевую среду, вы можете узнать больше об этом и о том, как это сделать в этой документация.

Это может быть вызвано отключением учетной записи службы для экземпляра. Вам нужна авторизация для доступа к метаданным.

В Google Cloud Console:

  • Перейдите в Compute Engine -> экземпляры виртуальных машин.
  • Остановите экземпляр.
  • Нажмите «Изменить» и прокрутите вниз до «Учетная запись службы».
  • Выберите правильную учетную запись службы, обычно «Учетная запись службы по умолчанию Compute Engine».
  • В разделе «Области доступа» выберите желаемую конфигурацию.

Я рекомендую либо «Разрешить доступ по умолчанию», либо «Разрешить полный доступ ко всем облачным API». Реальный контроль доступа определяется ролями, назначенными учетной записи службы. Выбор «Области доступа» может только ограничивать эти роли и никогда не увеличивать их.

Затем избавьтесь от настраиваемой записи для метаданных в файле hosts.