摘要:這個用戶或者組用于后面的角色綁定使用生成的證書就會生成下面的文件校驗證書生成文件已經(jīng)生成了,我們可以直接利用這個文件,省的自己再去配置集群參數(shù)設(shè)置客戶端認(rèn)證參數(shù)設(shè)置上下文參數(shù)設(shè)置莫認(rèn)上下文以上執(zhí)行一個步驟就可以看一下的變化。
kubernetes RBAC實戰(zhàn) 環(huán)境準(zhǔn)備
先用kubeadm安裝好kubernetes集群,kubernetes1.8.2安裝包 | kubernetes1.9.2安裝包好用又方便,服務(wù)周到,童叟無欺
本文目的,讓名為devuser的用戶只能有權(quán)限訪問特定namespace下的pod
命令行kubectl訪問 安裝cfssl此工具生成證書非常方便, pem證書與crt證書,編碼一致可直接使用
wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 chmod +x cfssl_linux-amd64 mv cfssl_linux-amd64 /bin/cfssl wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 chmod +x cfssljson_linux-amd64 mv cfssljson_linux-amd64 /bin/cfssljson wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64 chmod +x cfssl-certinfo_linux-amd64 mv cfssl-certinfo_linux-amd64 /bin/cfssl-certinfo簽發(fā)客戶端證書
根據(jù)ca證書與么鑰簽發(fā)用戶證書
根證書已經(jīng)在/etc/kubernetes/pki目錄下了
[root@master1 ~]# ls /etc/kubernetes/pki/ apiserver.crt ca-config.json devuser-csr.json front-proxy-ca.key sa.pub apiserver.key ca.crt devuser-key.pem front-proxy-client.crt apiserver-kubelet-client.crt ca.key devuser.pem front-proxy-client.key apiserver-kubelet-client.key devuser.csr front-proxy-ca.crt sa.key
注意以下幾個文件: ca.crt ca.key ca-config.json devuser-csr.json
創(chuàng)建ca-config.json文件
cat > ca-config.json <創(chuàng)建devuser-csr.json文件:
k8s的用戶名就是從CN上獲取的。 組是從O上獲取的。這個用戶或者組用于后面的角色綁定使用cat > devuser-csr.json <生成user的證書:
$ cfssl gencert -ca=ca.crt -ca-key=ca.key -config=ca-config.json -profile=kubernetes devuser-csr.json | cfssljson -bare devuser就會生成下面的文件:
devuser.csr devuser-key.pem devuser.pem校驗證書# cfssl-certinfo -cert kubernetes.pem生成config文件kubeadm已經(jīng)生成了admin.conf,我們可以直接利用這個文件,省的自己再去配置集群參數(shù)
$ cp /etc/kubernetes/admin.conf devuser.kubeconfig設(shè)置客戶端認(rèn)證參數(shù):
kubectl config set-credentials devuser --client-certificate=/etc/kubernetes/ssl/devuser.pem --client-key=/etc/kubernetes/ssl/devuser-key.pem --embed-certs=true --kubeconfig=devuser.kubeconfig設(shè)置上下文參數(shù):
kubectl config set-context kubernetes --cluster=kubernetes --user=devuser --namespace=kube-system --kubeconfig=devuser.kubeconfig設(shè)置莫認(rèn)上下文:
kubectl config use-context kubernetes --kubeconfig=devuser.kubeconfig以上執(zhí)行一個步驟就可以看一下 devuser.kubeconfig的變化。里面最主要的三個東西
cluster: 集群信息,包含集群地址與公鑰
user: 用戶信息,客戶端證書與私鑰,正真的信息是從證書里讀取出來的,人能看到的只是給人看的。
context: 維護一個三元組,namespace cluster 與 user
創(chuàng)建角色創(chuàng)建一個叫pod-reader的角色
[root@master1 ~]# cat pod-reader.yaml kind: Role apiVersion: rbac.authorization.k8s.io/v1 metadata: namespace: kube-system name: pod-reader rules: - apiGroups: [""] # "" indicates the core API group resources: ["pods"] verbs: ["get", "watch", "list"]kubectl create -f pod-reader.yaml綁定用戶創(chuàng)建一個角色綁定,把pod-reader角色綁定到 devuser上
[root@master1 ~]# cat devuser-role-bind.yaml kind: RoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: read-pods namespace: kube-system subjects: - kind: User name: devuser # 目標(biāo)用戶 apiGroup: rbac.authorization.k8s.io roleRef: kind: Role name: pod-reader # 角色信息 apiGroup: rbac.authorization.k8s.iokubectl create -f devuser-role-bind.yaml使用新的config文件$ rm .kube/config && cp devuser.kubeconfig .kube/config效果, 已經(jīng)沒有別的namespace的權(quán)限了,也不能訪問node信息了:
[root@master1 ~]# kubectl get node Error from server (Forbidden): nodes is forbidden: User "devuser" cannot list nodes at the cluster scope [root@master1 ~]# kubectl get pod -n kube-system NAME READY STATUS RESTARTS AGE calico-kube-controllers-55449f8d88-74x8f 1/1 Running 0 8d calico-node-clpqr 2/2 Running 0 8d kube-apiserver-master1 1/1 Running 2 8d kube-controller-manager-master1 1/1 Running 1 8d kube-dns-545bc4bfd4-p6trj 3/3 Running 0 8d kube-proxy-tln54 1/1 Running 0 8d kube-scheduler-master1 1/1 Running 1 8d [root@master1 ~]# kubectl get pod -n default Error from server (Forbidden): pods is forbidden: User "devuser" cannot list pods in the namespace "default": role.rbac.authorization.k8s.io "pod-reader" not founddashboard訪問 service account原理k8s里面有兩種用戶,一種是User,一種就是service account,User給人用的,service account給進程用的,讓進程有相關(guān)的權(quán)限。
如dasboard就是一個進程,我們就可以創(chuàng)建一個service account給它,讓它去訪問k8s。
我們看一下是如何把admin權(quán)限賦給dashboard的:
╰─? cat dashboard-admin.yaml apiVersion: rbac.authorization.k8s.io/v1beta1 kind: ClusterRoleBinding metadata: name: kubernetes-dashboard labels: k8s-app: kubernetes-dashboard roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind: ServiceAccount name: kubernetes-dashboard namespace: kube-system把 kubernetes-dashboard 這個ServiceAccount綁定到cluster-admin這個ClusterRole上,這個cluster role非常牛逼,啥權(quán)限都有
[root@master1 ~]# kubectl describe clusterrole cluster-admin -n kube-system Name: cluster-admin Labels: kubernetes.io/bootstrapping=rbac-defaults Annotations: rbac.authorization.kubernetes.io/autoupdate=true PolicyRule: Resources Non-Resource URLs Resource Names Verbs --------- ----------------- -------------- ----- [*] [] [*] *.* [] [] [*]而創(chuàng)建dashboard時創(chuàng)建了這個service account:
apiVersion: v1 kind: ServiceAccount metadata: labels: k8s-app: kubernetes-dashboard name: kubernetes-dashboard namespace: kube-system然后deployment里指定service account
volumes: - name: kubernetes-dashboard-certs secret: secretName: kubernetes-dashboard-certs - name: tmp-volume emptyDir: {} serviceAccountName: kubernetes-dashboard更安全的做法[root@master1 ~]# cat admin-token.yaml kind: ClusterRoleBinding apiVersion: rbac.authorization.k8s.io/v1beta1 metadata: name: admin annotations: rbac.authorization.kubernetes.io/autoupdate: "true" roleRef: kind: ClusterRole name: cluster-admin apiGroup: rbac.authorization.k8s.io subjects: - kind: ServiceAccount name: admin namespace: kube-system --- apiVersion: v1 kind: ServiceAccount metadata: name: admin namespace: kube-system labels: kubernetes.io/cluster-service: "true" addonmanager.kubernetes.io/mode: Reconcile[root@master1 ~]# kubectl get secret -n kube-system|grep admin admin-token-7rdhf kubernetes.io/service-account-token 3 14m[root@master1 ~]# kubectl describe secret admin-token-7rdhf -n kube-system Name: admin-token-7rdhf Namespace: kube-system Labels:Annotations: kubernetes.io/service-account.name=admin kubernetes.io/service-account.uid=affe82d4-d10b-11e7-ad03-00163e01d684 Type: kubernetes.io/service-account-token Data ==== ca.crt: 1025 bytes namespace: 11 bytes token: eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi10b2tlbi03cmRoZiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJhZG1pbiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6ImFmZmU4MmQ0LWQxMGItMTFlNy1hZDAzLTAwMTYzZTAxZDY4NCIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlLXN5c3RlbTphZG1pbiJ9.jSfQhFsY7V0ZmfqxM8lM_UUOoUhI86axDSeyVVtldSUY-BeP2Nw4q-ooKGJTBBsrOWvMiQePcQxJTKR1K4EIfnA2FOnVm4IjMa40pr7-oRVY37YnR_1LMalG9vrWmqFiqIsKe9hjkoFDuCaP7UIuv16RsV7hRlL4IToqmJMyJ1xj2qb1oW4P1pdaRr4Pw02XBz9yBpD1fs-lbwheu1UKcEnbHS_0S3zlmAgCrpwDFl2UYOmgUKQVpJhX4wBRRQbwo1Sn4rEFVI1NIa9l_lM7Mf6YEquLHRu3BCZTdu9YfY9pevQz4OfHE0NOvDIqmGRL8Z9kPADAXbljWzcD1m1xCQ 用此token在界面上登錄即可
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/27139.html
摘要:本文介紹了模型中四個最主要的對象,即,大致了解了的工作原理和使用方法,如果要更加深入地了解和掌握,可以查看官方文檔。只是這個不能復(fù)用到其他,一般只有在做精細(xì)化權(quán)限管理的時候,我們才會創(chuàng)建對象,比如一個只能查看名稱為的。了解RBAC簡介RBAC是一種基于角色來管理對計算機或網(wǎng)絡(luò)資源訪問策略的方法。我們知道,對K8S內(nèi)所有API對象的操作都是通過訪問kube-apiserver來完成的,因此ku...
摘要:本教程適用范圍本教程適用范圍在上使用服務(wù)部署,并通過訪問集群計算節(jié)點采用托管,并使用啟動模板。到此,完成集群的搭建,部署,部署,并實現(xiàn)了外網(wǎng)訪問。本教程適用范圍在AWS上使用EKS服務(wù)部署k8s Dashboard,并通過ALB訪問EKS集群計算節(jié)點采用托管EC2,并使用啟動模板。使用AWS海外賬號,us-west-2區(qū)域使用賬號默認(rèn)vpc(172.31.0.0/16)和子網(wǎng)使用awscli...
摘要:在中使用驗證使用身份驗證策略來認(rèn)證用戶的。審閱狀態(tài)包含名稱和組等用戶信息。中的授權(quán)模塊稍后將以此確定該用戶的訪問級別。認(rèn)證請求認(rèn)證服務(wù)決定該用戶是否通過認(rèn)證,并向發(fā)送響應(yīng)。在對的請求成功進行認(rèn)證之后,必須授權(quán)該請求。 Rancher Kubernetes擁有RBAC(基于角色的訪問控制)功能,此功能可以讓管理員配置不同的策略,允許或拒絕用戶和服務(wù)帳戶訪問Kubernetes API資源...
摘要:在中使用驗證使用身份驗證策略來認(rèn)證用戶的。審閱狀態(tài)包含名稱和組等用戶信息。中的授權(quán)模塊稍后將以此確定該用戶的訪問級別。認(rèn)證請求認(rèn)證服務(wù)決定該用戶是否通過認(rèn)證,并向發(fā)送響應(yīng)。在對的請求成功進行認(rèn)證之后,必須授權(quán)該請求。 Rancher Kubernetes擁有RBAC(基于角色的訪問控制)功能,此功能可以讓管理員配置不同的策略,允許或拒絕用戶和服務(wù)帳戶訪問Kubernetes API資源...
摘要:若企業(yè)想要保護集群不受內(nèi)部威脅無論是來自實際的惡意內(nèi)部威脅,還是僅僅是防止錯誤或錯誤編碼傳播時,防御的手段非常少。不過所幸的是,有一些解決方案已經(jīng)著眼于保護集群免受未經(jīng)授權(quán)的內(nèi)部訪問。 這是關(guān)于Kubernetes安全系列三篇文章中的第二篇。在上篇文章中我們分享了如何確保企業(yè)的Kubernetes集群免受外部攻擊,這篇文章中我們將分享三種保護Kubernetes免受內(nèi)部威脅的方法,后續(xù)...
閱讀 2690·2021-11-08 13:16
閱讀 2367·2021-10-18 13:30
閱讀 2237·2021-09-27 13:35
閱讀 1993·2019-08-30 15:55
閱讀 2442·2019-08-30 13:22
閱讀 576·2019-08-30 11:24
閱讀 2077·2019-08-29 12:33
閱讀 1813·2019-08-26 12:10