Exercise 15.2: Authentication and Authorization
{ kubectl create ns development kubectl create ns production }{ kubectl run app-dev --image=nginx -n development kubectl run app-prod --image=nginx -n production }kubectl config get-contextsopenssl genrsa -out john.key 2048{ touch $HOME/.rnd openssl req -new -key john.key -out john.csr \ -subj "/CN=john/O=development" }sudo openssl x509 -req -in john.csr \ -CA /etc/kubernetes/pki/ca.crt \ -CAkey /etc/kubernetes/pki/ca.key \ -CAcreateserial \ -out john.crt -days 45openssl x509 -in john.crt -text -nooutgrep client-cert $HOME/.kube/config |cut -d" " -f 6 \ | base64 -d | openssl x509 -text -noout -in -openssl verify -CAfile /etc/kubernetes/pki/ca.crt john.crtgrep client-cert $HOME/.kube/config |cut -d" " -f 6 | base64 -d \ | openssl verify -CAfile /etc/kubernetes/pki/ca.crtkubectl config set-credentials john \ --client-certificate=/root/john.crt \ --client-key=/root/john.keydiff cluster-api-config .kube/config -ykubectl config set-context john-dev \ --cluster=kubernetes \ --namespace=development \ --user=johnkubectl --context=john-dev get podskubectl config get-contextsdiff cluster-api-config .kube/config -ycat <<EOF | kubectl create -f - kind: Role apiVersion: rbac.authorization.k8s.io/v1 metadata: name: workload-full-access namespace: development rules: - apiGroups: ["", "extensions", "apps"] resources: ["deployments", "replicasets", "pods"] verbs: ["list", "get", "watch", "create", "update", "patch", "delete"] EOFcat <<EOF | kubectl create -f - kind: RoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: workload-full-access-to-john namespace: development subjects: - kind: User name: john apiGroup: "" roleRef: kind: Role name: workload-full-access apiGroup: "" EOFkubectl --context=john-dev get podskubectl --context=john-dev \ create deployment nginx --image=nginxkubectl --context=john-dev get podskubectl --context=john-dev delete deploy nginxcat <<EOF | kubectl create -f - kind: ClusterRole apiVersion: rbac.authorization.k8s.io/v1 metadata: name: workload-readonly-access rules: - apiGroups: ["", "extensions", "apps"] resources: ["deployments", "replicasets", "pods"] verbs: ["get", "list", "watch"] EOFcat <<EOF | kubectl create -f - kind: RoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: workload-readonly-access-to-dev-group namespace: production subjects: - kind: Group name: development apiGroup: "" roleRef: kind: ClusterRole name: workload-readonly-access apiGroup: "" EOFkubectl config set-context john-prod \ --cluster=kubernetes \ --namespace=production \ --user=johnkubectl --context=john-prod get podskubectl --context=john-prod get pods -n kube-systemkubectl --context=john-prod \ create deployment nginx --image=nginxkubectl describe clusterrole workload-readonly-accesskubectl auth can-i --as john --list -n developmentkubectl auth can-i --as john --list -n productionkubectl auth can-i --as john --as-group development --list -n productionkubectl auth can-i --as john --as-group development \ create deploy -n productionkubectl auth can-i --as john --as-group development \ get deploy -n productionkubectl delete ns development production
Last updated