Как вы уже знаете, Kubernetes не является легкой технологией. Это мощная облачная технология, но это может быть трудоемким и болезненным для отладки или устранения проблем и узнать, как сделать в нескольких решениях.
Это по этой причине, что я создал много технических скиртотов о Куберане, которые вы можете увидеть в «Понимание Кубернанов в визуальном виде» Я создал также новый Серия видео которые смешают Sketchnote и Audio Content, и теперь моя новая идея — публиковать статью, ориентированную на одну проблему/одну потребность.
В этой первой статье мы будем сосредоточиться на одном нужно: Обычно, когда я подключаюсь к кластеру, у меня есть все права (Cluster-admin), так как я могу подключиться к кластеру Kubernetes и выполнять команды kubectl как пользователь (как serviceacount
)?
Вы можете иметь эту потребность во многих ситуациях. Представьте, что у вас есть кластер Kubernetes (или конвейерные кластеры) с изоляцией на пространство имен
(Например, проект по команде), а пользователи в ваших кластерах имеют права в зависимости от Клостерроль
Отказ
Когда вы хотите добавить или редактировать права пользователя и проверьте поведение, вам нужно проверить как пользователь.
В этой статье наша потребность заключается в том, чтобы выполнить команды kubectl, в кластере Kubernetes, как пользователь, имеющих права, перечисленные в Клостерроль
Отказ Пользователь должен только иметь права только для чтения для секретов в пространство имен
Отказ
В этом случае у вас уже есть Роли
и Кластерролы
В вашем кластере, потому что вы хотите проверить их ^^, но на случай, если у вас нет уже Кластерроль
И вы хотите проверить это RBAC (контроль доступа на основе ролей) Настройки, следующий шаг позволяет создавать Кластерроль
:
- 0. Создать
Клостерроль
Это гранты читают секретный доступ во всехпространства имен
в кластере
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: secret-reader rules: - apiGroups: [""] resources: ["secrets"] verbs: ["get", "watch", "list"]
Здесь список шагов, которые позволят вам создать пространство имен
Разверните ресурсы Kubernetes, которые позволяют добавлять некоторые права в этом пространстве имен, генерирует файл Kubeconfig и выполнять команды в кластере Kubernetes, как ServieSeacount
(У кого есть права, которые вы хотите проверить).
- 1. Создать
пространство имен
«test-ns»
$ kubectl create ns test-ns
- 2. Создать
ServieSeacount
«My-Sa-test» в этомпространство имен
$ kubectl create serviceaccount my-sa-test -n test-ns
- 3. Создать
Прилечение
который предоставляет секрет-ридер к My-Sa-Sa-Test
$ kubectl create rolebinding read-pods -n test-ns --clusterrole=secret-reader --serviceaccount=test-ns.my-sa-test
- 4. Создайте файл Kubeconfig для созданного
ServieSeacoucount.
«My-Sa-test»
$ export SECRET_NAME_SA=`kubectl get sa my-sa-test -n test-ns -ojsonpath="{ .secrets[0].name }"` $ export TOKEN_SA=`kubectl get secret $SECRET_NAME_SA -n test-ns -ojsonpath='{.data.token}' | base64 -d` $ kubectl config view --raw --minify > kubeconfig.txt $ kubectl config unset users --kubeconfig=kubeconfig.txt $ kubectl config set-credentials ${SECRET_NAME_SA} --kubeconfig=kubeconfig.txt --token=${TOKEN_SA} $ kubectl config set-context --current --kubeconfig=kubeconfig.txt --user=${SECRET_NAME_SA}
- 5. Выполните команды kubectl в кластере как
ServieSeacoucount.
$ kubectl --kubeconfig=kubeconfig.txt get secrets -n test-ns
Или Вы можете выполнить kubectl
Команды напрямую с токеном ServiceAccount (Нет необходимости создавать другой файл Kubeconfig):
$ export NAMESPACE_SA=test-ns $ export TEAM_SA=my-sa-test $ export TOKEN=$(kubectl get $(kubectl get secret -o name -n ${NAMESPACE_SA} |grep ${TEAM_SA} ) -o jsonpath='{.data.token}' -n ${NAMESPACE_SA} | base64 -d) $ kubectl --token=${TOKEN} get ns
Прохладный! Теперь у меня могут быть только права, как мой пользователь, поэтому я могу имитировать поведения моих пользователей!:-)
Я надеюсь, что это новое серия статьи, с конкретными примерами и используемыми случаями помогут вам в ваших выгодных поездках.
Оригинал: «https://dev.to/stack-labs/debugging-kubernetes-execute-kubectl-commands-with-a-service-account-1k44»