Цитата из Kubernetes Docs:
Процессы в контейнерах внутри подов также могут связываться с apiserver. Когда они это делают, они аутентифицируются как конкретная учетная запись службы (например, по умолчанию)
RoleBinding или ClusterRoleBinding привязывает роль к субъектам. Субъектами могут быть группы, пользователи или ServiceAccounts.
Роль RBA C или ClusterRole содержит правила, представляющие набор разрешений.
Роль всегда устанавливает разрешения в определенном пространстве имен.
ClusterRole, напротив, является ресурсом без пространства имен
Итак, Чтобы получить / просмотреть статус другого модуля, вы можете вызвать Kubernetes API из модуля, в котором запущен ваш код, с помощью serviceaccounts. Выполните следующие шаги, чтобы автоматически получить другой статус модуля из данного модуля без какой-либо внешней зависимости (из-за проблем с надежностью вы не должны полагаться на узлы)
Создайте сервисный аккаунт в своем модуле (модуль запроса) пространство имен
kubectl create sa pod-reader
Если оба модуля находятся в одном пространстве имен, создать роль, привязку ролей
Создать роль
kubectl create role pod-reader --verb=get,watch --resource=pods
Создать привязку ролей
kubectl create rolebinding pod-reader-binding --role=pod-reader --serviceaccount=<NAMESPACE>:pod-reader
Иначе, т. Е. Модули находятся в разных пространствах имен, создать кластерную роль, привязку кластера
Создать роль кластера
kubectl create clusterrole pod-reader --verb=get,watch --resource=pods
Создать привязку ролей
kubectl create clusterrolebinding pod-reader-binding --clusterrole=pod-reader --serviceaccount=<NAMESPACE>:pod-reader
Проверьте разрешения
kubectl auth can-i watch pods --as=system:serviceaccount:<NAMESPACE>:pod-reader
Теперь разверните модуль / (ваше приложение) с этим сервисным аккаунтом.
kubectl create <MY-POD> --image=<MY-CONTAINER-IMAGE> --serviceaccount=pod-reader
Это установит секретный токен сервисного аккаунта в вашем pod, который можно найти по адресу /var/run/secrets/kubernetes.io/serviceaccount/token
. Ваше приложение может использовать этот токен для выполнения запросов GET к серверу Kubernetes API, чтобы получить статус модуля. См. Пример ниже (предполагается, что в вашем модуле установлена утилита curl. Однако вы можете выполнить соответствующий вызов API из своего кода, передать заголовок, прочитав файл токена serviceaccount, установленный в вашем модуле).
TOKEN=$(cat /var/run/secrets/kubernetes.io/serviceaccount/token)
curl https://kubernetes.default/api/v1/namespaces/<NAMESPACE>/pods/<NAME_OF_THE_OTHER_POD> -H "Authorization: Bearer ${TOKEN}" -k
curl https://kubernetes.default/api/v1/watch/namespaces/<NAMESPACE>/pods/<NAME_OF_THE_OTHER_POD>?timeoutSeconds=30 -H "Authorization: Bearer ${TOKEN}" -k
Ссылки:
Kubernetes API
serviceaccount