Почему учетная запись службы kubernetes по умолчанию имеет полный доступ к API на рабочем столе docker?

#kubernetes #k8s-serviceaccount

Вопрос:

Насколько я знаю, учетной записи службы по умолчанию в Kubernetes не должно быть назначено никаких разрешений. Но все же я могу выполнять следующие действия из модуля на моем рабочем столе docker k8s:

 APISERVER=https://kubernetes.default.svc
SERVICEACCOUNT=/var/run/secrets/kubernetes.io/serviceaccount
NAMESPACE=$(cat ${SERVICEACCOUNT}/namespace)
TOKEN=$(cat ${SERVICEACCOUNT}/token)
CACERT=${SERVICEACCOUNT}/ca.crt
curl --cacert ${CACERT} --header "Authorization: Bearer ${TOKEN}" -X GET ${APISERVER}/api/v1/pods
 

Как это возможно?

Кроме того, я обнаружил, что каждый модуль имеет разное значение токена SA ( cat /var/run/secrets/kubernetes.io/serviceaccount/token ) и отличается от возвращаемого, kubectl describe secret default-token-cl9ds разве оно не должно быть одинаковым?

Обновить:

 $ kubectl get rolebindings.rbac.authorization.k8s.io podviewerrolebinding -o yaml                                                                                              
apiVersion: rbac.authorization.k8s.io/v1                                                                                                                                       
kind: RoleBinding                                                                                                                                                              
metadata:                                                                                                                                                                      
  annotations:                                                                                                                                                                 
    kubectl.kubernetes.io/last-applied-configuration: |                                                                                                                        
      {"apiVersion":"rbac.authorization.k8s.io/v1","kind":"RoleBinding","metadata":{"annotations":{},"name":"podviewerrolebinding","namespace":"default"},"roleRef":{"apiGroup"
:"rbac.authorization.k8s.io","kind":"Role","name":"podviewerrole"},"subjects":[{"kind":"ServiceAccount","name":"podviewerserviceaccount"}]}                                    
  creationTimestamp: "2021-09-07T10:01:51Z"                                                                                                                                    
  name: podviewerrolebinding                                                                                                                                                   
  namespace: default                                                                                                                                                           
  resourceVersion: "402212"                                                                                                                                                    
  uid: 2d32f045-b172-4fff-a6b0-1525b0b96e65                                                                                                                                    
roleRef:                                                                                                                                                                       
  apiGroup: rbac.authorization.k8s.io                                                                                                                                          
  kind: Role                                                                                                                                                                   
  name: podviewerrole                                                                                                                                                          
subjects:                                                                                                                                                                      
- kind: ServiceAccount                                                                                                                                                         
  name: podviewerserviceaccount                                                                                                                                                
 

Комментарии:

1. Привет @Marcin Я получил «код»: 403 для запроса curl с учетной записью службы по умолчанию. Для вас это по-другому? К сожалению, вы не добавили вывод.

2. kubectl получает модули nginx-1.10-7688d7d6cc-49mcp-o yaml возвращает «Учетная запись службы: по умолчанию», а после выдачи команды «curl —cacert ${CACERT} —заголовок «Авторизация: Предъявитель ${ТОКЕН}» -X ПОЛУЧАЕТ ${APISERVER}/api/v1/модули» возвращаются определения модулей

3. Какой режим авторизации вы используете? Не могли бы вы проверить разрешение для вашей учетной записи службы по умолчанию с помощью следующей команды? kubectl auth can-i <глагол> <глагол><ресурс> —as=система:учетная запись службы:<ресурс><пространство имен>:<пространство имен><имя учетной записи службы> [-n <имя учетной записи службы><пространство имен>] Например, я использовал со своей стороны: kubectl auth может-я получаю модули —as=система:учетная запись службы:по умолчанию:по умолчанию

4. $ kubectl auth могу ли я получить модули —as=система:учетная запись службы:по умолчанию:по умолчанию да

5. Хорошо, это означает, что учетная запись службы по умолчанию имеет права, отличные от прав по умолчанию. Вы проверяли Роли, Кластерные роли? Может быть, вы уже вносили какие-то изменения ранее?

Ответ №1:

Я столкнулся с той же проблемой, похоже, что рабочий стол docker по умолчанию имеет повышенные разрешения (т. Е. администратор), см. Статью здесь.

Устранение привязки окна настройки кластерной привязки для рабочего стола с помощью следующей команды устраняет проблему.

 kubectl delete clusterrolebinding docker-for-desktop-binding
 

Комментарии:

1. В этой статье есть комментарий (с 2019 года): «В прошлом стабильном и пограничном мы изменили правило, чтобы оно влияло только на пространство имен kube-system. Дай мне знать, если это все еще тебя беспокоит.». У меня есть docker desktop v 20.10.8, и он все еще работает неправильно. kubectl описывает привязку привязки к кластеру для привязки к рабочему столу, возвращает тему «Групповая система:учетные записи служб в системе куба».