Skip to content

Tworzenie konta na klastrze dla Usera

Tworzenie certyfikatów

Początkowo należy wygenerować certyfikaty dla Usera:

1. Wygenerowanie klucza prywatnego RSA:

openssl genrsa -out <nazwa_usera>.key 2048

2. Wygenerowanie Certificate Signing Request

openssl req -new -key <nazwa_usera>.key -out <nazwa_usera>.csr -subj "/CN=<nazwa_usera>"

3.1. Odczytujemy zakodowany w Base64 CSR:

cat <nazwa_usera>.csr | base64 -w 0

Wykorzystamy go przy CertificateSigningRequest w manifeście Kubernetes.

3.2. Generujemy manifest CertificateSigningRequest:

apiVersion: certificates.k8s.io/v1
kind: CertificateSigningRequest
metadata:
  name: myuser # example
spec:
  # This is an encoded CSR. Change this to the base64-encoded contents of myuser.csr
  request: <SKOPIOWANY_CSR_W_BASE64>
  signerName: kubernetes.io/kube-apiserver-client
  usages:
  - client auth

4. Sprawdzamy wygenerowany certyfikat

kubectl get csr

5. Potwierdzamy certyfikat - bierzemy wartość NAME.

kubectl certificate approve <nazwa_NAME>

Tworzenie roli dostępowych dla użytkownika

1. Dodajemy Role (w obrębie namespace) lub ClusterRole (cały klaster) a później Bindingi.

Najlepiej, przy tworzeniu konta dodawać Role i RoleBinding odpowiednio.

Np z poziomu CLI tworzenie Role:

kubectl create role <nazwa_roli> --verb=<co_może_robić,np.watch,get,list> --resource=<jakie_zasoby_moze_uzywac>

Przykład z manifestu YAML dla tworzenia Role:

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: default
  name: pod-reader
rules:
- apiGroups: [""] # "" indicates the core API group
  resources: ["pods"]
  verbs: ["get", "watch", "list"]

2. Tworzymy ClusterRoleBinding lub RoleBinding:

Z poziomu CLI dla ClusterRoleBinding (podobnie dla RoleBinding):

kubectl create clusterrolebinding <nazwa_role_bindingu> --clusterrole=<nazwa_cluster_roli> --user=<nazwa_usera> 

Z poziomu manifestu YAML:

apiVersion: rbac.authorization.k8s.io/v1
# This cluster role binding allows anyone in the "manager" group to read secrets in any namespace.
kind: ClusterRoleBinding
metadata:
  name: read-secrets-global
subjects:
- kind: Group
  name: manager # Name is case sensitive
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: secret-reader
  apiGroup: rbac.authorization.k8s.io

3. Sprawdzamy czy uprawnienia działają.

Przykładowe sprawdzenie, czy można utworzyć deployment:

kubectl auth can-i create deployment --as=<nazwa_nowego_usera>