openssl genrsa -out DevDan.key 2048
openssl req -new -key DevDan.key -out DevDan.csr -subj "/CN=DevDan/O=development"
cat << 'EOF' > DevDan.yaml
apiVersion: certificates.k8s.io/v1
kind: CertificateSigningRequest
metadata:
name: csr-devdan
spec:
signerName: kubernetes.io/kube-apiserver-client
usages:
- digital signature
- key encipherment
- client auth
groups:
- cluster-admin
EOF
CSR="$(cat DevDan.csr | base64)" yq eval '.spec.request = strenv(CSR)' -i DevDan.yaml
kubectl apply -f DevDan.yaml
kubectl certificate approve csr-devdan
kubectl get csr csr-devdan -o jsonpath='{.status.certificate}' | base64 -d > DevDan.crt
kubectl config set-credentials DevDan --client-certificate=DevDan.crt --client-key=DevDan.key --embed-certs=true
kubectl config set-context DevDan-dev --cluster=kubernetes --user=DevDan --namespace=development
kubectl config set-context DevDan-prod --cluster=kubernetes --user=DevDan --namespace=production
Only works if you have access to Kubernetes PKI CA private and public keys
openssl genrsa -out DevDan.key 2048
openssl req -new -key DevDan.key -out DevDan.csr -subj "/CN=DevDan/O=development"
sudo openssl x509 -req -in DevDan.csr -CA /etc/kubernetes/pki/ca.crt -CAkey /etc/kubernetes/pki/ca.key -CAcreateserial -out DevDan.crt -days 45
kubectl config set-credentials DevDan --client-certificate=DevDan.crt --client-key=DevDan.key --embed-certs=true
kubectl config set-context DevDan-dev --cluster=kubernetes --user=DevDan --namespace=development
kubectl config set-context DevDan-prod --cluster=kubernetes --user=DevDan --namespace=production
Scoped to namespace development
kubectl create role developer --verb=create,delete,get,list,patch,update,watch --resource=deployments.apps,replicasets,pods -n development
kubectl create rolebinding developer --role=developer --user=DevDan -n development
Scoped to namespace production
kubectl create role production --verb=get,list,watch --resource=deployments.apps,replicasets,pods -n production
kubectl create rolebinding production --role=production --user=DevDan -n production
https://kubernetes.io/docs/concepts/security/rbac-good-practices/#csrs-and-certificate-issuing