Рейтинг:1

Модуль kubernetes, работающий на вычислительном движке Google, не может получить доступ к службе метаданных

флаг vn

Я пытаюсь запустить google cloud python sdk из модуля k8, работающего на вычислительном движке Google. К виртуальной машине прикреплена учетная запись службы, которая предоставляет ей доступ к диспетчеру секретов. Я могу получить доступ к диспетчеру секретов с хоста, однако запуск python sdk из модуля k8 жалуется на невозможность доступа к службе метаданных

>>> secret_id = 'unskript_test'
>>> имя = client.secret_path(project_id, secret_id)
>>> ответ = client.get_secret (запрос = {"имя": имя})
Traceback (последний последний вызов):
  Файл "/opt/conda/lib/python3.7/site-packages/google/api_core/grpc_helpers.py", строка 67, в error_remapped_callable
    вернуть callable_(*args, **kwargs)
  Файл "/opt/conda/lib/python3.7/site-packages/grpc/_channel.py", строка 946, в __call__
    вернуть _end_unary_response_blocking (состояние, вызов, ложь, нет)
  Файл "/opt/conda/lib/python3.7/site-packages/grpc/_channel.py", строка 849, в _end_unary_response_blocking
    поднять _InactiveRpcError (состояние)
grpc._channel._InactiveRpcError: <_InactiveRpcError RPC, который завершился с:
    статус = Код Статуса. НЕДОСТУПЕН
    details = "Не удалось получить метаданные из плагина из-за ошибки: не удалось получить http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/?recursive=true из службы метаданных Google Compute Engine. Метаданные Compute Engine сервер недоступен"
    debug_error_string = "{"created":"@1630634901.103779641","description":"Не удалось получить метаданные из плагина из-за ошибки: не удалось получить http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default /?recursive=true из службы метаданных Google Compute Engine. Сервер метаданных Compute Engine недоступен","file":"src/core/lib/security/credentials/plugin/plugin_credentials.cc","file_line":90,"grpc_status":14}"
>

metadata.google.internal не разрешается из модуля k8

jovyan@jovyan-25ca6c8c-157d-49e5-9366-f9d57fcb7a9f:~$ wget http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/?recursive=true
--2021-09-03 02:11:19-- http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/?recursive=true
Разрешение metadata.google.internal (metadata.google.internal)... не удалось: имя или служба неизвестны.
wget: не удалось определить адрес хоста «metadata.google.internal»

Тем не менее, хост может решить эту проблему.

ubuntu@gcp-test-proxy:~$ wget http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/?recursive=true
--2021-09-03 02:11:27-- http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/?recursive=true
Разрешение metadata.google.internal (metadata.google.internal)... 169.254.169.254
Подключение к metadata.google.internal (metadata.google.internal)|169.254.169.254|:80... установлено.
HTTP-запрос отправлен, ожидается ответ... 403 Запрещено
2021-09-03 02:11:27 ОШИБКА 403: Запрещено.

Как я могу заставить модуль разрешать метаданные.google.internal?

Bakul Mitra avatar
флаг cn
Привет @Амит. Ваша проблема была решена? Если да, можете ли вы указать шаги, которые вы предприняли для решения проблемы. Или, если данный ответ помог, можете ли вы принять его или проголосовать за него.
Рейтинг:0
флаг jp

Это вызвано тем, что модуль Kubernetes не может разрешить metadata.google.internal DNS-имя на правильный IP. На вашем хост-компьютере, вероятно, есть запись в /и т.д./хосты который жестко привязывает этот домен к IP: 169.254.169.254.

Вы должны иметь возможность воспроизвести это в своем поде, изменив его /и т.д./хосты файл.

Просто помните, что это будет работать только на виртуальных машинах, работающих на GCP. Снаружи IP-адрес 169.254.169.254 — это просто еще один IP-адрес, не имеющий особого значения.

РЕДАКТИРОВАТЬ: только что проверил /etc/hosts на одной из моих виртуальных машин GCP, и вот что я нашел:

$ кошка /etc/hosts
127.0.0.1 локальный хост

# Следующие строки желательны для хостов с поддержкой IPv6
::1 ip6-localhost ip6-loopback
fe00::0 ip6-локальная сеть
ff00::0 префикс ip6-mcast
ff02::1 ip6-все узлы
ff02::2 ip6-все маршрутизаторы
ff02::3 ip6-все хосты
169.254.169.254 metadata.google.внутренние метаданные

Так что просто попробуйте скопировать эту последнюю строку в свои стручки. /и т.д./хосты.

Amit avatar
флаг vn
Спасибо @maciek. Проблема заключалась в том, что microk8 не копировал запись хоста и т. д. в модули. Как только мы перешли на k3, это решилось

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.