управление_доступом_в_kubernetes

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
управление_доступом_в_kubernetes [2025/11/04 10:33]
val
управление_доступом_в_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>​
  
-  * Запускаем ​приложение ​([[Система Kubernetes#​Базовые объекты k8s]])+  * Запускаем ​pod my-debian ​([[Система Kubernetes#​Базовые объекты k8s]]) ​в my-ns (создать,​ если нет) 
 + 
 ==== Поиск предоставленных ролей для учетной записи ==== ==== Поиск предоставленных ролей для учетной записи ====
 <​code>​ <​code>​
Line 216: Line 229:
  
 kube1:​~/​users#​ kubectl get rolebindings --all-namespaces -o=json | jq '​.items[] | select(.subjects[]?​.name == "​cko"​)'​ kube1:​~/​users#​ kubectl get rolebindings --all-namespaces -o=json | jq '​.items[] | select(.subjects[]?​.name == "​cko"​)'​
 +
 +kube1:​~/​users#​ kubectl delete -f ns-full-access.yaml
 </​code>​ </​code>​
 ===== Шаг 4. Использование ClusterRole и ClusterRoleBinding ===== ===== Шаг 4. Использование ClusterRole и ClusterRoleBinding =====
Line 258: Line 273:
   name: svc-pfw-role   name: svc-pfw-role
   apiGroup: rbac.authorization.k8s.io   apiGroup: rbac.authorization.k8s.io
 +</​code><​code>​
 kube1:​~/​users#​ kubectl apply -f svc-pfw-role.yaml,​user1-svc-pfw-rolebinding.yaml kube1:​~/​users#​ kubectl apply -f svc-pfw-role.yaml,​user1-svc-pfw-rolebinding.yaml
  
 student@client1:​~$ kubectl port-forward -n my-pgcluster-ns services/​my-pgcluster-rw 5432:5432 student@client1:​~$ kubectl port-forward -n my-pgcluster-ns services/​my-pgcluster-rw 5432:5432
  
-student@client1:​~$ psql postgres://​keycloak:​strongpassword@127.0.0.1:​5432/​postgres+student@client1:​~$ psql postgres://​keycloak:​strongpassword@127.0.0.1:​5432/​keycloak
 </​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 273: 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 298: 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 307: 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 319: 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 330: 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]] 
  
 ===== Вопросы?​ ===== ===== Вопросы?​ =====
управление_доступом_в_kubernetes.1762241609.txt.gz · Last modified: 2025/11/04 10:33 by val