怎么网站,网站开发的客户群体,建设银行行号网站查询是什么意思,免费域名申请网站大全推荐1 K8S账户体系介绍
在k8s中#xff0c;有两类用户#xff0c;service account和user#xff0c;我们可以通过创建role或clusterrole#xff0c;再将账户和role或clusterrole进行绑定来给账号赋予权限#xff0c;实现权限控制#xff0c;两类账户的作用如下。 server acc…1 K8S账户体系介绍
在k8s中有两类用户service account和user我们可以通过创建role或clusterrole再将账户和role或clusterrole进行绑定来给账号赋予权限实现权限控制两类账户的作用如下。 server accountk8s的进程、pod申请授权时使用的账户。类似于nginx服务会有一个nginx用户。 userk8s的管理人员使用的账户也就是我们使用的账户。
2 service account
2.1 介绍
Kubernetes中所有的访问无论外部内部都会通过API Server处理访问Kubernetes资源前需要经过认证与授权。 在k8s中service account简称sa是给集群中的进程使用的当集群中的pod或进程需要跟apiserver申请调用资源时会使用到sa。
2.2 为什么需要sa
主要是为了权限控制不同的sa账户对应不同的权限如增删查等。
2.3 如何创建sa 创建一个sa
[rootk8s-master01 ~]# kubectl create serviceaccount sa-example ##创建一个sa名为sa-example
serviceaccount/sa-example created
[rootk8s-master01 ~]#
[rootk8s-master01 ~]# kubectl describe sa sa-example
Name: sa-example
Namespace: default
Labels: none
Annotations: none
Image pull secrets: none
Mountable secrets: none
Tokens: none
Events: none 给sa创建secretv1.25版本后创建sa后不再自动创建secret因此需要手动创建。secret中会包含一些认证信息包括ca证书等。
[rootk8s-master01 ~]# cat sa-example-secret.yaml
apiVersion: v1
kind: Secret
metadata:name: secret-sa-exampleannotations:kubernetes.io/service-account.name: sa-example # 这里填写serviceAccountName
type: kubernetes.io/service-account-token
[rootk8s-master01 ~]# kubectl create -f sa-example-secret.yaml
secret/secret-sa-example created
[rootk8s-master01 ~]# kubectl describe sa sa-example ##检查可以发现sa的token处已经关联上了刚创建的secret
Name: sa-example
Namespace: default
Labels: none
Annotations: none
Image pull secrets: none
Mountable secrets: none
Tokens: secret-sa-example
Events: none
[rootk8s-master01 ~]# kubectl describe secret secret-sa-example ##查看secret的详情
Name: secret-sa-example
Namespace: default
Labels: none
Annotations: kubernetes.io/service-account.name: sa-examplekubernetes.io/service-account.uid: a4b9c0ea-2362-4bb3-abc7-10dc0fb795fcType: kubernetes.io/service-account-tokenDataca.crt: 1099 bytes
namespace: 7 bytes
token: eyJhbGciOiJSUzI1NiIsImtpZCI6IkhwYldkODNuZmNMczYzNlRiRmpQQndMTFJYSWZZODZQSFIxUFI0WW1fYWMifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJkZWZhdWx0Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZWNyZXQubmFtZSI6InNlY3JldC1zYS1leGFtcGxlIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6InNhLWV4YW1wbGUiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiJhNGI5YzBlYS0yMzYyLTRiYjMtYWJjNy0xMGRjMGZiNzk1ZmMiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6ZGVmYXVsdDpzYS1leGFtcGxlIn0.OjGSORdrRchb-dOk56bIx9s2KfedIrcBHhWi4N7g1v2zDgbumF8DoIVUbDdSB3IXtSnrWu6ccF-NEXDkxTtsU3rRZCn4qLpYqxtmK-We0-JDqfPd6brSqv8SMOFpUhbTxOcCjsICLvGY0dE8iTNjRLjmlTlNENGJui3pYweLCV1Qe0Ry4hZs0BFaMVZn6dSjjNnPTTfaSNRk-4jcqqoOxC0qxVrpQb-LjLvBy9fi2omBZQnb4e98aGo8SN4U5tWNOr_QEfYO9h8B9w-Ub5eI2uZ9jan07ezjD9wathT4BP471m-8NFsFDO8PcRpvxDtNjl4XzMoQmjZA1wM0rseDrg
24.4 如何使用sa
Pod中使用ServiceAccount非常方便只需要指定ServiceAccount的名称即可。
[rootk8s-master01 ~]# cat nginx-alpine.yaml
apiVersion: v1
kind: Pod
metadata:name: nginx-test-pod ##pod名
spec:serviceAccountName: sa-example ##sa名containers:- image: nginx:alpinename: container-0resources:limits:cpu: 100mmemory: 200Mirequests:cpu: 100mmemory: 200MiimagePullSecrets:- name: default-secret ##下载镜像使用到的secret名
[rootk8s-master01 ~]# kubectl create -f nginx-alpine.yaml
pod/nginx-test-pod created
[rootk8s-master01 ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-test-pod 1/1 Running 0 2m13s
[rootk8s-master01 ~]# kubectl describe pod nginx-test-pod|grep -i account
Service Account: sa-example/var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-mb8cd (ro)
[rootk8s-master01 ~]# kubectl exec -it nginx-test-pod -- /bin/sh ##进入pod可以看到对应的secret文件ca证书和token
/ # ls /var/run/secrets/kubernetes.io/serviceaccount
ca.crt namespace token
创建好sa我们可以再绑定role或clusterrole来赋予更精细化的权限。
3 user account
3.1 介绍
前面说的service account在k8s集群中是给pod使用的这里介绍的User Account是给我们自己也就是给人用的。
3.2 为什么需要user account
在k8s集群中跟linux操作系统是一样的我们默认的账户是kubernetes-adminkubernetes管理员账户权限也是最大的在k8s集群中畅通无阻。
但是在企业中并不是只有我们一个人使用k8s集群还有很多的研发人员都是需要使用集群的这时我们需要给他们创建一些账号但是这些账号权限又不能太大以防误删资源这个时候我们就能使用user account了。
3.3 如何创建一个user account
步骤如下 创建用户所需的证书文件和密钥 创建用户 创建角色 将角色和用户进行绑定 3.3.1 为用户生成证书
前面介绍的sa账户secret创建时会创建好证书对于用户的话我们需要自己创建证书。
[rootk8s-master01 ~]# openssl genrsa -out singless.key 2048 ##给用户创建一个私钥
[rootk8s-master01 ~]# openssl req -new -key singless.key -out singless.csr -subj /CNsingless/Odevops ##用此私钥创建一个csr(证书签名请求)文件其中我们需要在subject里带上用户信息(CN为用户名O为用户组)其中/O参数可以出现多次即可以有多个用户组
[rootk8s-master01 ~]# openssl x509 -req -in singless.csr -CA /etc/kubernetes/pki/ca.crt -CAkey /etc/kubernetes/pki/ca.key -CAcreateserial -out singless.crt -days 365 ##找到K8S集群(API Server)的CA证书文件其位置取决于安装集群的方式通常会在/etc/kubernetes/pki/路径下会有两个文件一个是CA证书(ca.crt)一个是CA私钥(ca.key)。通过集群的CA证书和之前创建的csr文件来为用户颁发证书。-CA和-CAkey参数需要指定集群CA证书所在位置-days参数指定此证书的过期时间这里为365天。最后将证书(tom.crt)和私钥(tom.key)保存起来这两个文件将被用来验证API请求。 3.3.2 创建用户
现在我们想要通过kubectl以singless的身份来操作集群需要将singless的认证信息添加进kubectl的配置即~/.kube/config中通过以下命令将用户singless的验证信息添加进kubectl的配置
[rootk8s-master01 ~]# kubectl config set-credentials singless --client-certificatesingless.crt --client-keysingless.key
User singless set.
[rootk8s-master01 ~]# cat ~/.kube/config |tail -4 ##添加完成后在~/.kube/config可以看到新增了
- name: singlessuser:client-certificate: /root/singless.crtclient-key: /root/singless.key
[rootk8s-master01 ~]# kubectl config set-context singless --clusterkubernetes --namespace* --usersingless ##创建context通过context来绑定用户来实现精细化的权限控制。context可以理解为登录用户时所需的环境变量。删除使用kubectl config delete-context命令
[rootk8s-master01 ~]# kubectl config get-contexts ##查询当前环境的context
CURRENT NAME CLUSTER AUTHINFO NAMESPACE
* kubernetes-adminkubernetes kubernetes kubernetes-adminsingless kubernetes singless *
3.3.3 创建角色
角色主要分为两种role和clusterrole角色role是比较有限制性的只针对于指定的资源生效。而集群角色clusterrole就权限就比较广泛了新建了一个集群角色之后这个角色将对整个集群受影响。
创建角色有两种方法 通过命令行进行创建
[rootk8s-master01 ~]# kubectl create role myrole --verbget,list,watch --resourcepod,svc 创建了一个名叫myrole的角色并且赋予它对pod、service有看的权限
role.rbac.authorization.k8s.io/myrole created 通过yaml文件进行创建
[rootk8s-master01 ~]# cat myrole2.yaml
apiVersion: rbac.authorization.k8s.io/v1
#api版本使用kubectl explain 【要查询的资源比如pod】
kind: Role
metadata:name: myrole2
rules: #规则
- apiGroups: [] # 空字符串表明使用支持所有的api版本一般都放空resources: [pods] #resources资源现在这些权限对哪些资源生效这里写的是pod如果想要多写几个就用逗号隔开其实就是一个列表verbs: [get, watch, list] #详细的权限这三个都是查看的权限。如果需要所有权限直接填写一个*号即可
[rootk8s-master01 ~]# kubectl create -f myrole2.yaml
role.rbac.authorization.k8s.io/myrole2 created
查看创建的角色
[rootk8s-master01 ~]# kubectl get role
NAME CREATED AT
myrole 2023-07-18T09:22:51Z
myrole2 2023-07-18T09:33:24Z
3.3.4 角色绑定用户
[rootk8s-master01 ~]# kubectl create rolebinding myrole-binding --rolemyrole2 --usersingless ##将用户和角色进行绑定
[rootk8s-master01 ~]# kubectl get rolebinding -owide ##查看绑定关系
NAME ROLE AGE USERS GROUPS SERVICEACCOUNTS
myrole-binding Role/myrole2 57s singless3.4 使用账户
下面的例子表明使用singless用户可以看到pod但是看不到svc符合我们的前面创建role myrole2时所做的权限设置
[rootk8s-master01 ~]# kubectl config use-context singless
Switched to context singless.
[rootk8s-master01 ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-test-pod 1/1 Running 0 124m
[rootk8s-master01 ~]# kubectl get svc
Error from server (Forbidden): services is forbidden: User singless cannot list resource services in API group in the namespace default
使用下列命令可以将context切换回管理员用户
[rootk8s-master01 ~]# kubectl config use-context kubernetes-adminkubernetes