This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
|
управление_доступом_в_kubernetes [2025/11/04 11:12] val [Предоставление доступа к services/port-forward в Cluster] |
управление_доступом_в_kubernetes [2025/11/04 19:30] (current) val |
||
|---|---|---|---|
| Line 7: | Line 7: | ||
| * [[https://kubernetes.io/docs/reference/kubectl/generated/kubectl_config/kubectl_config_set-credentials/|Kubernetes Documentation kubectl config set-credentials]] | * [[https://kubernetes.io/docs/reference/kubectl/generated/kubectl_config/kubectl_config_set-credentials/|Kubernetes Documentation kubectl config set-credentials]] | ||
| + | * [[https://stackoverflow.com/questions/49396607/where-can-i-get-a-list-of-kubernetes-api-resources-and-subresources|Where can I get a list of Kubernetes API resources and subresources?]] | ||
| * [[https://www.container-security.site/security_research/node_proxy.html|Node/Proxy in Kubernetes RBAC]] | * [[https://www.container-security.site/security_research/node_proxy.html|Node/Proxy in Kubernetes RBAC]] | ||
| * [[https://stackoverflow.com/questions/60445336/how-to-grant-access-to-specify-namespace-in-kubernetes-dashboard|How to grant access to specify namespace in kubernetes dashboard?]] | * [[https://stackoverflow.com/questions/60445336/how-to-grant-access-to-specify-namespace-in-kubernetes-dashboard|How to grant access to specify namespace in kubernetes dashboard?]] | ||
| Line 13: | Line 14: | ||
| * [[https://medium.com/@subhampradhan966/implementing-and-verifying-kubernetes-service-accounts-a-step-by-step-guide-c43b727260b2|Implementing and Verifying Kubernetes Service Accounts: A Step-by-Step Guide]] | * [[https://medium.com/@subhampradhan966/implementing-and-verifying-kubernetes-service-accounts-a-step-by-step-guide-c43b727260b2|Implementing and Verifying Kubernetes Service Accounts: A Step-by-Step Guide]] | ||
| + | |||
| + | * [[https://medium.com/@reza.sadriniaa/automatic-kubernetes-certificate-renewal-a-step-by-step-guide-c4320192a74d|Automatic Kubernetes Certificate Renewal: A Step-by-Step Guide]] | ||
| + | * [[https://weng-albert.medium.com/updating-kubernetes-certificates-easy-peasy-en-139fc07f26c8|Updating Kubernetes Certificates: Easy Peasy!(En)]] | ||
| ===== Реклама ===== | ===== Реклама ===== | ||
| Line 22: | Line 26: | ||
| ===== Техническое задание ===== | ===== Техническое задание ===== | ||
| - | * Создать учетную запись пользователя с необходимыми правами и файл конфигурации для подключения младшего системного администратора к Web ресурсам Kubernetes | + | * Создать учетную запись и файл конфигурации с правами для подключения к приложениям, администрированию ресурсов выделенного Namespace и всего кластера Kubernetes |
| - | * Создать учтённую запись для сервиса с необходимыми правами для запуска приложений в Kubernetes | + | * Использовать учтёные записи приложений в Kubernetes для доступа к API |
| ===== Запись вебинара ===== | ===== Запись вебинара ===== | ||
| Line 29: | Line 33: | ||
| * Тэги: Kubernetes, ServiceAccout, RBAC | * Тэги: Kubernetes, ServiceAccout, RBAC | ||
| - | ===== Подготовка к вебинару ===== | + | ===== Подготовка к повтору вебинара ===== |
| <code> | <code> | ||
| user1@client1:~$ rm user1* | user1@client1:~$ rm user1* | ||
| Line 36: | Line 40: | ||
| kube1:~# rm -r users/ | kube1:~# rm -r users/ | ||
| + | |||
| + | kube1:~# kubectl delete serviceaccounts admin-user | ||
| </code> | </code> | ||
| Line 102: | Line 108: | ||
| * [[https://kubernetes.io/docs/reference/kubectl/generated/kubectl_config/kubectl_config_set-credentials/]] | * [[https://kubernetes.io/docs/reference/kubectl/generated/kubectl_config/kubectl_config_set-credentials/]] | ||
| <code> | <code> | ||
| + | user1@client1:~$ ###rm -rf .kube/ | ||
| + | |||
| user1@client1:~$ kubectl config set-cluster cluster.local --insecure-skip-tls-verify=true --server=https://192.168.13.221:6443 | user1@client1:~$ kubectl config set-cluster cluster.local --insecure-skip-tls-verify=true --server=https://192.168.13.221:6443 | ||
| ИЛИ | ИЛИ | ||
| Line 122: | Line 130: | ||
| user1@client1:~$ kubectl auth whoami | user1@client1:~$ kubectl auth whoami | ||
| - | user1@client1:~$ kubectl get pods | + | user1@client1:~$ kubectl get pods #-A |
| Error from server (Forbidden) или ... | Error from server (Forbidden) или ... | ||
| </code> | </code> | ||
| Line 133: | Line 141: | ||
| <code> | <code> | ||
| + | kube1:~# kubectl api-resources -o wide | less | ||
| + | APIVERSION = <group> + "/" + <version of the API> | ||
| + | |||
| kube1:~/users# cat lh-svc-proxy-role.yaml | kube1:~/users# cat lh-svc-proxy-role.yaml | ||
| </code><code> | </code><code> | ||
| Line 210: | Line 221: | ||
| </code> | </code> | ||
| - | * Запускаем pod my-debian ([[Система Kubernetes#Базовые объекты k8s]]) в my-ns | + | * Запускаем pod my-debian ([[Система Kubernetes#Базовые объекты k8s]]) в my-ns (создать, если нет) |
| Line 270: | Line 281: | ||
| </code> | </code> | ||
| - | ==== Предоставление полного доступа к Cluster ==== | + | * Доступ через proxy к [[Система Kubernetes#Kubernetes Dashboard]] |
| + | |||
| + | <code> | ||
| + | kube1:~/users# kubectl delete -f svc-pfw-role.yaml,user1-svc-pfw-rolebinding.yaml | ||
| + | </code> | ||
| + | ==== Предоставление полного доступа к Kubernetes Cluster ==== | ||
| <code> | <code> | ||
| Line 278: | Line 294: | ||
| kube1:~/users# kubectl get clusterrolebindings | less | kube1:~/users# kubectl get clusterrolebindings | less | ||
| + | |||
| + | kube1:~/users# kubectl get clusterrolebindings admin -o yaml | ||
| kube1:~/users# kubectl get clusterrolebindings cluster-admin -o yaml | kube1:~/users# kubectl get clusterrolebindings cluster-admin -o yaml | ||
| Line 303: | Line 321: | ||
| ==== Поиск предоставленных кластерных ролей для учетной записи ==== | ==== Поиск предоставленных кластерных ролей для учетной записи ==== | ||
| <code> | <code> | ||
| + | kube1:~/users# kubectl get clusterrolebindings -o=json | jq '.items[] | select(.subjects[]?.name == "kubeadm:cluster-admins")' | ||
| + | |||
| kube1:~/users# kubectl get clusterrolebindings -o=json | jq '.items[] | select(.subjects[]?.name == "user1")' | kube1:~/users# kubectl get clusterrolebindings -o=json | jq '.items[] | select(.subjects[]?.name == "user1")' | ||
| + | |||
| + | kube1:~/users# kubectl get clusterrolebindings -o=json | jq '.items[] | select(.subjects[]?.name == "default")' | ||
| + | |||
| + | kube1:~/users# kubectl delete -f user1-cluster-admin.yaml | ||
| </code> | </code> | ||
| Line 312: | Line 336: | ||
| ===== Шаг 6. Использование Service Accounts в приложениях ===== | ===== Шаг 6. Использование Service Accounts в приложениях ===== | ||
| - | * Используем запущенное приложение ([[Система Kubernetes#Базовые объекты k8s]]) | + | * Используем ранее запущенное приложение ([[Система Kubernetes#Базовые объекты k8s]]) в my-ns |
| <code> | <code> | ||
| - | kube1:~/users# kubectl describe pod my-debian | grep -i account | + | kube1:~/users# kubectl -n my-ns describe pod my-debian | grep -i account |
| - | kube1:~/users# kubectl auth can-i get pods --as=system:serviceaccount:default:default | + | kube1:~/users# kubectl -n my-ns exec -ti pods/my-debian -- bash |
| + | |||
| + | root@my-debian:/# apt update && apt install kubectl | ||
| + | </code> | ||
| + | |||
| + | * [[#Шаг 2.3 Создание файла конфигурации kubectl]] | ||
| + | |||
| + | <code> | ||
| + | kube1:~/users# kubectl auth can-i get pods --as=system:serviceaccount:my-ns:default | ||
| kube1:~/users# cat sa-default-cluster-admin.yaml | kube1:~/users# cat sa-default-cluster-admin.yaml | ||
| Line 324: | Line 356: | ||
| kind: ClusterRoleBinding | kind: ClusterRoleBinding | ||
| metadata: | metadata: | ||
| - | name: user1-cluster-admin | + | name: sa-default-cluster-admin |
| subjects: | subjects: | ||
| - kind: ServiceAccount | - kind: ServiceAccount | ||
| name: default | name: default | ||
| - | namespace: default | + | namespace: my-ns |
| roleRef: | roleRef: | ||
| kind: ClusterRole | kind: ClusterRole | ||
| Line 335: | Line 367: | ||
| </code><code> | </code><code> | ||
| kube1:~/users# kubectl apply -f sa-default-cluster-admin.yaml | kube1:~/users# kubectl apply -f sa-default-cluster-admin.yaml | ||
| + | </code> | ||
| - | kube1:~/users# kubectl exec -ti pods/my-debian -- bash | + | Проверяем доступ к API из приложения |
| - | root@my-debian:/# apt update && apt install kubectl | + | <code> |
| + | kube1:~/users# kubectl delete -f sa-default-cluster-admin.yaml | ||
| + | |||
| + | kube1:~/dashboard# kubectl -n my-ns delete pod my-debian | ||
| </code> | </code> | ||
| - | |||
| - | * [[#Шаг 2.3 Создание файла конфигурации kubectl]] | ||
| ===== Вопросы? ===== | ===== Вопросы? ===== | ||