Прежде чем углубляться в детали, ознакомьтесь со следующими компонентами:
Поставщик OIDC : работает в инфраструктуре Google, предоставляет метаданные для кластера и подписывает авторизованные JWT.
Сервер метаданных GKE : он работает как DaemonSet, то есть один экземпляр на каждом узле, предоставляет сервер метаданных для конкретного модуля (обеспечивает обратную совместимость со старыми клиентскими библиотеками), эмулирует сервер метаданных существующего узла.
Google IAM : выдает токен доступа, проверяет привязки, проверяет подписи OIDC.
Облако Google : принимает токены доступа, делает практически все.
JWT : веб-токен JSON
mTLS : защита взаимного транспортного уровня
Ниже приведены действия, поясняющие работу компонентов сервера метаданных GKE:
Шаг 1 : авторизованный пользователь связывает кластер с пространством имен.
Шаг 2 : рабочая нагрузка пытается получить доступ к службе Google Cloud с помощью клиентских библиотек.
Шаг 3 : сервер метаданных GKE собирается запроситьOIDC подписал JWT с самолета управления. Это соединение аутентифицируется с использованием взаимного соединения TLS (mTLS) с учетными данными узла.
Шаг 4 : Затем сервер метаданных GKE использует JWT, подписанный OIDC, для запроса токена доступа для [пространства имен идентификации] / [учетной записи службы Kubernetes] от IAM. IAM собирается проверить наличие соответствующих привязок в пространстве имен идентификаторов и в поставщике OIDC.
Шаг 5 : и затем IAM проверяет, что оно было подписано правильным поставщиком OIDC кластера. Затем он вернет токен доступа для [идентификационное пространство имен] / [учетная запись службы kubernetes].
Шаг 6 : Затем сервер метаданных отправит маркер доступатолько что вернулся в IAM. Затем IAM обменяет его на токен учетной записи службы GCP с коротким сроком службы после проверки соответствующих привязок.
Шаг 7 : Затем сервер метаданных GKE возвращает токен учетной записи службы GCP в рабочую нагрузку.
Шаг 8 : рабочая нагрузка может затем использовать этот токен для совершения звонков в любую облачную службу Google.
Я также нашел видео относительно идентификации рабочей нагрузки, котороеВы найдете полезными.
РЕДАКТИРОВАТЬ Ответы на дополнительные вопросы:
Ниже приведены ответы на ваши дополнительные вопросы:
Q1 : Между шагами 2 и 3, перенаправляется ли запрос metadata.google.internal на прокси-сервер метаданных gke с помощью параметра GKE_METADATA_SERVER в пуле узлов?
Выверно, GKE_METADATA_SERVER установлен в пуле узлов. Это предоставляет API метаданных для рабочих нагрузок, совместимых с API V1 Compute Metadata. Когда рабочая нагрузка пытается получить доступ к службе Google Cloud, сервер метаданных GKE выполняет поиск (сервер метаданных проверяет, существует ли в списке модуль, чей IP-адрес совпадает с входящим IP-адресом запроса), прежде чем он запрашивает токен OIDC уплоскость управления.
Имейте в виду, что функция перечисления GKE_METADATA_SERVER может быть включена, только если идентификация рабочей нагрузки включена на уровне кластера.
Q2 : Почему модулю сервера метаданных требуется сетевое соединение с хостом?
Сервер gke-metadata-server перехватывает все запросы сервера метаданных GCE от модулей, однако блоки, использующие сеть хоста, не перехватываются.
Q3 : Как сервер метаданных GKE идентифицирует модуль, выполняющий вызов для запуска процесса?
Элементы определяются с помощью правил iptables.