Skip to content

Jak dać dostęp dla nowych użytkowników do klastra?

Aby umożliwić dostęp i komunikację z klastrem (z kube-apiserverem) należy przejść przez te kroki (robimy to z poziomu konta administratora klastra): 1. Tworzymy obiekt CertificateSigningRequest - tworzymy żądanie utworzenia nowego podpisania certyfikatu dla nowego użytkownika, musimy posiadać CSR tego użytkownika 2. Robimy Review żądania 3. Zezwalamy na podpisanie certyfikatu (lub usuwamy żądanie podpisania) 4. Podpisany certyfikat może zostać udostępniony nowemu użytkownikowi

Dawanie dostępu dla użytkownika z poziomu klastra

1. Nowy użytkownik tworzy klucz prywatny, oraz generuje CSR (Certificate Signing Request): Wygenerowanie klucza prywatnego:

openssl genrsa -out <nazwa_klucza>.key 2048

Wygenerowanie CSR:

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

2. Nowy użytkownik wysyła CSR do administratora klastra 3. Admin klastra tworzy CertificateSigningRequest

Kodujemy żądanie CSR użytkownika:

cat <nazwa_usera>.csr | base64 | tr -d "\n"

Zawartość przykładowego CertificateSigningRequest:

apiVersion: certificates.k8s.io/v1
kind: CertificateSigningRequest
metadata:
    name: <nazwa_usera>
spec:
    expirationSeconds: 600 # ile sekund oczekiwania na potwierdzenie/odrzucenie
    usages:
        - digital signature
        - key encipherment
        - server auth
    request:
        <zawartosc_CSR_usera_zakodowana_w_BASE64>

Wdrażamy manifest na klaster:

kubectl apply <nazwa_manifestu_csr>.yaml

4. Administrator sprawdza żądania podpisania certyfikatu

kubectl get csr

Będzie tutaj podane pole name, jest ono ważne przy podpisywaniu.

5. Administrator podpisuje certyfikat

kubectl certificate approve <nazwa_usera>

Info

<nazwa_usera to pole name w kubectl get csr.

6. Administrator wysyła podpisany certyfikat do nowego użytkownika

Sprawdzenie certyfikatu:

kubectl get csr <nazwa_usera> -o yaml

Patrzymy na pole status.certificate, jest ono zakodowane w BASE64, należy je zdekodować.

Zdekodowanie certyfikatu w BASE64:

echo "<zawartość_certa>" | base64 --decode

Źródło: https://kubernetes.io/docs/reference/access-authn-authz/certificate-signing-requests/