kubernetes之RBAC

Serveraccount

user – username,uid
group – user group
“extra”- 额外信息
API – API资源的对象
Request path – 请求资源的路径(k8s使用resultful风格接口的API)
http://Node_IPaddr:6443/apis/apps/v1/namespaces/namespaces_name/resource_name/
curl http://localhost:8080/api/v1/namespaces
自定义命名空间
curl http://localhost:8080/apis/apps/v1/namespaces/kube-system/deployments/

HTTP 请求动作 – HTTP verbs get,post,put,和delete用于非资源请求
HTTP 请求动作映射到 API资源操作- get,list,create,update,patch,watch,proxy,redirect,delete,和deletecollection用于请求resource
Resource -被访问(仅用于resource 请求)的resource 的ID或名字- *对于使用resource 的请求get,update,patch,和delete,必须提供resource 名称。
Subresource – 正在访问的subresource (仅用于请求resource )
Namespace – 正在访问对象的命名空间(仅针对命名空间的请求资源)

创建sa

[root@node1 pv]# kubectl create sa mysa
serviceaccount/mysa created
[root@node1 pv]# kubectl get sa
NAME SECRETS AGE
default 1 2d11h
mysa 1 6s
[root@node1 pv]# kubectl get secret
NAME TYPE DATA AGE
default-token-t5mqv kubernetes.io/service-account-token 3 2d11h
mysa-token-khp58 kubernetes.io/service-account-token 3 10s

pod中指定要使用的serviceAccount

spec:
  serviceAccountName: mysa

这要求在Pod规格中指定serviveAccountName,同时此服务帐户已被创建(通过API、kubectl create serviceaccount等)。例如,在“default”命名空间内,授予”my-sa”服务帐户“view”集群角色:

kubectl create rolebinding my-sa-view \
--clusterrole=view \
--serviceaccount=default:my-sa \
--namespace=default

RBAC

创建pem文件

[root@node1 ssl]# cat cl0411-csr.json
{
 "CN": "cl0411",
 "hosts": [],
 "key": {
 "algo": "rsa",
 "size": 2048
 },
 "names": [
 {
 "C": "CN",
 "ST": "BeiJing",
 "L": "BeiJing",
 "O": "system:masters",
 "OU": "System"
 }
 ]
}
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes cl0411-csr.json  cfssljson -bare cl0411

创建cc0411.kuberconfig文件

[root@node1 ssl]# kubectl config set-cluster kubernetes --certificate-authority=ca.pem --embed-certs=true --server=https://192.168.57.13:6443 --kubeconfig=cl0411.kuberconfig
Cluster "kubernetes" set.
[root@node1 ssl]# kubectl config set-credentials cl0411 --client-key=cl0411-key.pem --client-certificate=cl0411.pem --embed-certs=true --kubeconfig=cl0411.kuberconfig
User "cl0411" set.
[root@node1 ssl]# kubectl config set-context cl0411@kubernetes --cluster=kubernetes --user=cl0411 --kubeconfig=cl0411.kuberconfig
Context "cl0411@kubernetes" created.
[root@node1 ssl]# kubectl config use-context cl0411@kubernetes --kubeconfig=cl0411.kuberconfig
Switched to context "cl0411@kubernetes".

查看

[root@node1 ssl]# kubectl config view --kubeconfig=cl0411.kuberconfig
apiVersion: v1
clusters:
- cluster:
 certificate-authority-data: DATA+OMITTED
 server: https://192.168.57.13:6443
 name: kubernetes
contexts:
- context:
 cluster: kubernetes
 user: cl0411
 name: default
current-context: cl0411@kubernetes
kind: Config
preferences: {}
users:
- name: cl0411
 user:
 client-certificate-data: REDACTED
 client-key-data: REDACTED

创建角色

kubectl create role pod-reader --verb=get,list,watch  --resource=pods --resource-name=readablepod --dry-run -o yaml>role-demo.yaml
kubectl create clusterrole  创建集群角色和创建角色一样
[root@node1 ~]# kubectl apply -f role-demo.yaml
role.rbac.authorization.k8s.io/pod-reader created
[root@node1 ~]# kubectl get role
NAME AGE
pod-reader 4s

创建角色绑定

绑定用户(该用户无需创建)
kubectl create rolebinding cl0411-read-pods --role=pod-reader --user=cl0411 --dry-run -o yaml >rolebinding-demo.yaml
kubectl create clusterrolebinding  创建集群角色绑定和绑定角色一样
这里rolebinding可以绑定--role  也可以绑定--clusterrole  但是绑定集群角色会降级为role权限
[root@node1 ~]# kubectl apply -f rolebinding-demo.yaml
rolebinding.rbac.authorization.k8s.io/cl0411-read-pods created
[root@node1 ~]# kubectl get rolebinding
NAME AGE
cl0411-read-pods 14s

验证

kubectl --kubeconfig=cl0411.kuberconfig  get pods -o wide

kubernetes之RBAC
http://www.jcwit.com/article/17/
作者
Carlos
发布于
2019年5月9日
许可协议