這一系列文檔都是關於Kubernetes集羣內部pods等資源對外部請求的認證與受權的管以及如何使用roles和role binding控制Kubernetes內部資源的訪問權限。git
在生產環境中,Kubernetes管理員使用namespaces隔離集羣上的資源。Namespaces在權限控制上扮演着資源的邏輯分界線角色。json
設想下面的應用場景:api
運維team中新加入一位同事名字叫Bob,他的主要工做是管理工程師組在Kubernetes上的部署工做。所以運維組的老大必須受權Bob操做engineering namesapces足夠的權限。bash
下面的實驗操做是發生在個人私人Kubernetes集羣上,你可使用具備Kubernetes集羣最高權限的任何集羣資源上完成下面的實驗。app
mkdir cred
cd cred
複製代碼
openssl genrsa -out bob.key 2048
複製代碼
openssl req -new -key bob.key -out bob.csr -subj "/CN=bob/O=eng"\n
複製代碼
cat bob.csr | base64 | tr -d '\n'
複製代碼
cat >> signing-request.yaml <<EOF
apiVersion: certificates.k8s.io/v1beta1
kind: CertificateSigningRequest
metadata:
name: bob-csr
spec:
groups:
- system:authenticated
request: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0KTUlJQ1lqQ0NBVW9DQVFBd0hURU1NQW9HQTFVRUF3d0RZbTlpTVEwd0N3WURWUVFLREFSbGJtZHVNSUlCSWpBTgpCZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUF3amJvYldWeHFVd21kUS85SW50T01kNXBieUJtCjZPSEt2aDRsSm5DMEgrNVVWNXNGYUJhMm1TdFVFdG1ENGRuUk0zcFdBUVBPUEdQditaY1NCc1N5QmhYdmswY1kKNGJXcWRLRGdUMnpTWEoyemxTVFdlTUJBcFZwWFBseGRLRE80bXk5YWtjbFFUVmE2ZnJadU5MQTNBQnBBTGxxLwowY05Id0tlVkpGVlJoN0l2bzZ4VlZVY0wyN21YK3ZoMmpjZGZKZkU1bG5lQXRXT2xDL05IZE9TUzhuR3JEcCtUCmhJamI5Q0p4Ty90N3VLWUJOMWM2SG1qRUowTkc2cDZhaVRhZWZiYllONmVhVllOUVdWT2hYNFlqQWNTRWp6clUKOCtrd2drZ2h2YjFtNmV0OHQ3VUYzRlJzNDNiU0xrbExPVDBVUGd1MlRQN3RVajM1WlJweHY5ZUQ1UUlEQVFBQgpvQUF3RFFZSktvWklodmNOQVFFTEJRQURnZ0VCQUdFeTRCZS9vRDlUZ1p0V1hvM2FGNkxwUkpsZGtMYWJBbFE4CkdjVGJ1dlhwNmt4ODhDT0NwZjhIb2tMbEgzeiswajZjWktMUFZIVHdzdzJnbmNJbjBCM0RvL3U3dDlWT0d3RVEKaHpzd0cxSFI3VjUrZ1VEMzdmeXc3MGhZUFg0cGlCbncyNWJqLzljR2ViYTQwTjNqNjBHaUVrWlpUa0JUSzNRVApNWmdTMjB4S1UzS0RIOWJENkFJZlQvbUxXRkRRQURKekhVMm9UQ2hqK3JiUlgwYU5qazJVck42dWNqMEx0T0tlCjdoMWJ4YVJjU3BEcDhTWkhYODRwcWY1eVFFWEJ5dEt0ZjF5T3dBK2tCVldPdS81SkJWQVpQTmRyVElKR2g4RmEKbjF0S0E4RngyYStLdkN2b2txQjlrYzFVQ3U0d2QyRHVncWJKUmhwUGRiaStSM3htenlzPQotLS0tLUVORCBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0K
usages:
- digital signature
- key encipherment
- server auth
> EOF
複製代碼
kubectl apply -f signing-request.yaml
複製代碼
kbuectl get csr
複製代碼
從上圖可見csr資源對應的狀態仍然是Pending,集羣管理員使用approve命令使其變成active運維
kubectl certificate approve bob-csr
kubectl get csr
複製代碼
從上圖可見csr資源已經變成Approved,Issued狀態post
kubectl get csr bob-csr -o jsonpath='{.status.certificate}' | base64 --decode > bob.crt
複製代碼
上面的bob.crt文件是用來對Bob進行認證和受權的文件。咱們從Kubernetes中得到bob.key私鑰文件和bob.crt認證文件後,咱們就能夠對bob帳戶作受權工做了。jsonp
kubectl config set-credentials bob --client-certificate=bob.crt --client-key=bob.key
複製代碼
經過上面命令可見bob用戶已經添加到Kubernetes集羣中ui
kubectl create namespace enginerging
複製代碼
kubectl auth can-i list pods --namespace engineering
yes
複製代碼
kubectl auth can-i list pods --namespace engineering --as bob
no
複製代碼
明顯可見Bob還不能操做enginering namespace的資源。這是爲何?編碼
即使咱們對Bob作關於Kubernetes集羣訪問的認證,可是咱們並無對Bob受權操做Kubernets資源的行爲。
在這一系列文章的下一章節中,我將帶你對bob用戶受權操做Kubernetes資源的行爲。這主要是關於 role和role binding的知識,繼續加油哦!
文章翻譯自A Practical Approach to Understanding Kubernetes Authentication ,行文略有刪減