首页 > 其他 > 详细

25,k8s 之RBAC

时间:2020-07-09 22:59:47      阅读:85      评论:0      收藏:0      [点我收藏+]
安全机制:
	1. Kubernetes的安全框架
	2. 传输安全,认证,授权,准入控制
	3. 使用RBAC授权

访问K8S集群的资源需要过三关:认证、鉴权、准入控制
普通用户若要安全访问集群API Server,往往需要证书、Token或者用户名+密码;Pod访问,需要ServiceAccount
K8S安全控制框架主要由下面3个阶段进行控制,每一个阶段都支持插件方式,通过API Server配置来启用插件。
		1. Authentication
		2. Authorization
		3. Admission Control

阶段一:传输安全和认证
阶段二:授权
阶段三:准入控制
阶段四:使用RBAC授权


使用RBAC授权:
	角色
		Role:授权特定命名空间的访问权限
		ClusterRole:授权所有命名空间的访问权限
	角色绑定
		RoleBinding:将角色绑定到主体(即subject) 
		ClusterRoleBinding:将集群角色绑定到主体
	主体(subject) 
		User:用户
		Group:用户组
		ServiceAccount:服务账号

1先创建角色:
2角色绑定:
3这个用户是基于什么认证方式识别身份


[root@centos7 demo2]# kubectl create ns ctnrs
namespace/ctnrs created
[root@centos7 demo2]# kubectl run nginx --images=nginx -n ctnrs
[root@centos7 demo2]# kubectl get pods -n ctnrs
NAME                     READY   STATUS    RESTARTS   AGE
nginx-6db489d4b7-7qpq7   1/1     Running   0          39s
[root@centos7 demo2]# 
[root@centos7 demo2]# 
[root@centos7 demo2]# cat rbac-role.yaml 
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  namespace: ctnrs
  name: pod-reader
rules:
- apiGroups: [""] # "" indicates the core API group
  resources: ["pods"]
  verbs: ["get", "watch", "list"]
[root@centos7 demo2]# 
[root@centos7 demo2]# 
[root@centos7 demo2]# 
[root@centos7 demo2]# kubectl apply -f rbac-role.yaml 
role.rbac.authorization.k8s.io/pod-reader created
[root@centos7 demo2]# 
[root@centos7 demo2]# kubectl get role -n ctnrs
NAME         AGE
pod-reader   26s
[root@centos7 demo2]# 
[root@centos7 demo2]# 
[root@centos7 demo2]# cat rbac-rolebinding.yaml 
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: read-pods
  namespace: ctnrs
subjects:
- kind: User
  name: aliang # Name is case sensitive
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role #this must be Role or ClusterRole
  name: pod-reader # this must match the name of the Role or ClusterRole you wish to bind to
  apiGroup: rbac.authorization.k8s.io
[root@centos7 demo2]# 
[root@centos7 demo2]# 
[root@centos7 demo2]# 
[root@centos7 demo2]# 
[root@centos7 demo2]# kubectl apply -f rbac-rolebinding.yaml 
rolebinding.rbac.authorization.k8s.io/read-pods created
[root@centos7 demo2]# 
[root@centos7 demo2]# kubectl get role -n ctnrs
NAME         AGE
pod-reader   3m4s
[root@centos7 demo2]# kubectl get rolebinding -n ctnrs
NAME        AGE
read-pods   3m25s
[root@centos7 demo2]# 

认证
三种客户端身份认证: 
	HTTPS 证书认证:基于CA证书签名的数字证书认证
	HTTP Token认证:通过一个Token来识别用户
	HTTP Base认证:用户名+密码的方式认证

如下是基于HTTPS 证书认证:

[root@centos7 demo3]# 
[root@centos7 demo3]# ll
total 24
-rw-r--r-- 1 root root  294 Dec  9  2018 ca-config.json
-rw-r--r-- 1 root root 1001 Dec  9  2018 ca.csr
-rw-r--r-- 1 root root  263 Dec  9  2018 ca-csr.json
-rw-r--r-- 1 root root 1675 Dec  9  2018 ca-key.pem
-rw-r--r-- 1 root root 1359 Dec  9  2018 ca.pem
-rw-r--r-- 1 root root  860 Jul  9 21:49 rabc-user.sh
[root@centos7 demo3]# cat rabc-user.sh 
cat > aliang-csr.json <<EOF
{
  "CN": "aliang",
  "hosts": [],
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "L": "BeiJing",
      "ST": "BeiJing"
    }
  ]
}
EOF

cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes aliang-csr.json | cfssljson -bare aliang 

kubectl config set-cluster kubernetes   --certificate-authority=ca.pem   --embed-certs=true   --server=https://192.168.0.11:6443   --kubeconfig=aliang-kubeconfig
  
kubectl config set-credentials aliang   --client-key=aliang-key.pem   --client-certificate=aliang.pem   --embed-certs=true   --kubeconfig=aliang-kubeconfig

kubectl config set-context default   --cluster=kubernetes   --user=aliang   --kubeconfig=aliang-kubeconfig

kubectl config use-context default --kubeconfig=aliang-kubeconfig
[root@centos7 demo3]# 
[root@centos7 demo3]# bash rabc-user.sh 
2020/07/09 21:54:44 [INFO] generate received request
2020/07/09 21:54:44 [INFO] received CSR
2020/07/09 21:54:44 [INFO] generating key: rsa-2048
2020/07/09 21:54:44 [INFO] encoded CSR
2020/07/09 21:54:44 [INFO] signed certificate with serial number 25230847140977846289360739941478317420645831912
2020/07/09 21:54:44 [WARNING] This certificate lacks a "hosts" field. This makes it unsuitable for
websites. For more information see the Baseline Requirements for the Issuance and Management
of Publicly-Trusted Certificates, v.1.1.6, from the CA/Browser Forum (https://cabforum.org);
specifically, section 10.2.3 ("Information Requirements").
Cluster "kubernetes" set.
User "aliang" set.
Context "default" created.
Switched to context "default".
[root@centos7 demo3]# 
[root@centos7 demo3]# 
[root@centos7 demo3]# ll
total 48
-rw-r--r-- 1 root root  952 Jul  9 21:54 aliang.csr
-rw-r--r-- 1 root root  179 Jul  9 21:54 aliang-csr.json
-rw------- 1 root root 1679 Jul  9 21:54 aliang-key.pem
-rw------- 1 root root 6188 Jul  9 21:54 aliang-kubeconfig
-rw-r--r-- 1 root root 1346 Jul  9 21:54 aliang.pem
-rw-r--r-- 1 root root  294 Dec  9  2018 ca-config.json
-rw-r--r-- 1 root root 1001 Dec  9  2018 ca.csr
-rw-r--r-- 1 root root  263 Dec  9  2018 ca-csr.json
-rw-r--r-- 1 root root 1675 Dec  9  2018 ca-key.pem
-rw-r--r-- 1 root root 1359 Dec  9  2018 ca.pem
-rw-r--r-- 1 root root  860 Jul  9 21:49 rabc-user.sh
[root@centos7 demo3]# 
[root@centos7 demo3]# 
[root@centos7 demo3]# kubectl get pods -n ctnrs
NAME                     READY   STATUS    RESTARTS   AGE
nginx-6db489d4b7-7qpq7   1/1     Running   0          54m
[root@centos7 demo3]# 
[root@centos7 demo3]# kubectl --kubeconfig=aliang-kubeconfig get pods -n ctnrs
NAME                     READY   STATUS    RESTARTS   AGE
nginx-6db489d4b7-7qpq7   1/1     Running   0          54m
[root@centos7 demo3]# 
[root@centos7 demo3]# kubectl --kubeconfig=aliang-kubeconfig get svc -n ctnrs
Error from server (Forbidden): services is forbidden: User "aliang" cannot list resource "services" in API group "" in the namespace "ctnrs"
[root@centos7 demo3]# 


如下是基于ServiceAccount对命名空间访问,用它登陆K8S-UI
[root@centos7 demo3]# 
[root@centos7 demo3]# cat sa.yaml 
apiVersion: v1
kind: ServiceAccount
metadata:
  name: pod-reader
  namespace: ctnrs

---

kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: sa-read-pods
  namespace: ctnrs 
subjects:
- kind: ServiceAccount
  name: pod-reader
roleRef:
  kind: Role
  name: pod-reader
  apiGroup: rbac.authorization.k8s.io
[root@centos7 demo3]# 
[root@centos7 demo3]# 
[root@centos7 demo3]# kubectl get secret -n ctnrs
NAME                  TYPE                                  DATA   AGE
default-token-nt2cp   kubernetes.io/service-account-token   3      57m
[root@centos7 demo3]# 
[root@centos7 demo3]# kubectl apply -f sa.yaml 
serviceaccount/pod-reader created
rolebinding.rbac.authorization.k8s.io/sa-read-pods created
[root@centos7 demo3]# 
[root@centos7 demo3]# kubectl get secret -n ctnrs
NAME                     TYPE                                  DATA   AGE
default-token-nt2cp      kubernetes.io/service-account-token   3      57m
pod-reader-token-rcgvd   kubernetes.io/service-account-token   3      4s
[root@centos7 demo3]# 
[root@centos7 demo3]# kubectl describe secret pod-reader-token-rcgvd -n ctnrs
Name:         pod-reader-token-rcgvd
Namespace:    ctnrs
Labels:       <none>
Annotations:  kubernetes.io/service-account.name: pod-reader
              kubernetes.io/service-account.uid: 57f087a2-6f3e-44e3-9615-f46c7f1121e3

Type:  kubernetes.io/service-account-token

Data
====
ca.crt:     1359 bytes
namespace:  5 bytes
token:      eyJhbGciOiJSUzI1NiIsImtpZCI6IkUwa0p0aC1TMDBoTU1OZ3Y2SWRWaVd5NGRYLTdSTlY3TUVHUXJsRV9NY2sifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJjdG5ycyIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJwb2QtcmVhZGVyLXRva2VuLXJjZ3ZkIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6InBvZC1yZWFkZXIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiI1N2YwODdhMi02ZjNlLTQ0ZTMtOTYxNS1mNDZjN2YxMTIxZTMiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6Y3RucnM6cG9kLXJlYWRlciJ9.ltqpH-WktEiitFrVkui7WkQx4f_B3cJEMpUQ3Q3du-nLej8rrk-FTMZUXpiXr0lDgJmKo6sf0aL0Vs3q8kX7TfuuWomToc2B4A5sUh5w-eGEQReghD01Z1wRANh3c3IhcCuRnMvvQIxHDzY83LGYwtdCVtMrxINYnuRCYqeDFJz9q0Q53hjBMx2m-rFprFkG3otTI4GeHNv14EQF8chJ8GD6NC1KA1mvZrU5ATFnh8_cgDB66EalbVKFYxEyGm5syg32LTaPT3aWZd4DO4Z0SWlWt_a8tfMHY2K1iDUrLNPTHjhX3NX8NuZQevZRP8Qcg1fpuIjSyjBP_yT_4sElbw
[root@centos7 demo3]# 

	
	
	
	

  

25,k8s 之RBAC

原文:https://www.cnblogs.com/k8s-pod/p/13276624.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!