Tworzenie konta na klastrze dla Usera¶
Tworzenie certyfikatów¶
Początkowo należy wygenerować certyfikaty dla Usera:
1. Wygenerowanie klucza prywatnego RSA:
2. Wygenerowanie Certificate Signing Request
3.1. Odczytujemy zakodowany w Base64 CSR:
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
5. Potwierdzamy certyfikat - bierzemy wartość 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: