21.kubernetes(k8s)笔记认证、授权与准入控制(一)认证ServiceAccount...

21.kubernetes(k8s)笔记认证、授权与准入控制(一)认证ServiceAccount...

2023年6月30日发(作者:)

etes(k8s)笔记认证、授权与准⼊控制(⼀)认证ServiceAccount⽬录概述etes API访问控制2.认证 AuthenticationServiceAccount令牌认证⽰例: 查看Pod 默认ServiceAccount及Secret概述:⽤户通过 kubectl、客户端库或者通过发送 REST 请求访问 API。 ⽤户(⾃然⼈)和 Kubernetes 服务账户 都可以被授权进⾏ API 访问。请求到达 API 服务器后会经过⼏个阶段,具体说明如图:⾸先看⼀下 Kubernetes API 请求的发起,请求的发起分为两个部分:1. 第⼀个部分是⼈机交互的过程。 是⼤家⾮常熟悉的⽤ kubectl 对 apiserver 的⼀个请求过程 使⽤的是 Users Accounts普通账户;2. 第⼆个部分是 Pod 中的业务逻辑与 apiserver 之间的交互 使⽤的是Service Accounts 服务帐号。当我们的 apiserver 收到请求后,就会开启访问控制流程。这⾥⾯分为三个步骤:1. Authentication 认证阶段:判断请求⽤户是否为能够访问集群的合法⽤户。如果⽤户是个⾮法⽤户,那 apiserver会返回⼀个 401 的状态码,并终⽌该请求;2. 如果⽤户合法的话,我们的 apiserver 会进⼊到访问控制的第⼆阶段 Authorization:授权阶段。在该阶段中apiserver 会判断⽤户是否有权限进⾏请求中的操作。如果⽆权进⾏操作,apiserver 会返回 403的状态码,并同样终⽌该请求;3. 如果⽤户有权进⾏该操作的话,访问控制会进⼊到第三个阶段:AdmissionControl。在该阶段中 apiserver 的admission controller 会判断请求是否是⼀个安全合规的请求。如果最终验证通过的话,访问控制流程才会结束。此时我们的请求将会转换为⼀个 Kubernetes objects 相应的变更请求,最终持久化到 ETCD 中。认证(任意⼀种) -->授权(⼀般是rbac 和 node)–> 准⼊控制(⾃⼰选择)2. 认证 Authentication认证有多种,可以启动⼀种或多种认证⽅式,只要有⼀种认证⽅式通过,就不再对其它⽅式认证,通常启动X 509 Client Certs和ServiceAccout Tokens两种认证⽅式常见的认证:1. 引导令牌(Token) : 如:节点加⼊时认证:kubelet2. 静态令牌: 存储于API Server进程可直接加载到的⽂件中保存的令牌,该⽂件内容会由API Server缓存于内存中;3. 静态密码:存储于API Server进程可直接加载到的⽂件中保存的账户和密码令牌,该⽂件内容会由API Server缓存于内存中;4. ServiceAccount令牌:5. OpenID Connect令牌:OIDC令牌,6. OAuth 2 webhook令牌7. 代理认证等访问k8s的API Server的客户端主要分为两类:kubectl :⽤户家⽬录中的 .kube/config ⾥⾯保存了客户端访问API Server的密钥相关信息,这样当⽤kubectl访问k8s时,它就会⾃动读取该配置⽂件,向API Server发起认证,然后完成操作请求,使⽤Users Accounts普通账户。pod:Pod中的进程需要访问API Server,如果是⼈去访问或编写的脚本去访问,这类访问使⽤的账号为:UserAccount;⽽Pod⾃⾝去连接API Server时,使⽤的账号是:ServiceAccount,⽣产中后者使⽤居多。kubectl 向 apiserver发起的命令,采⽤的时http⽅式,其实就是对URL发起增删改查的操作。[root@k8s-master ~]# kubectl proxy --port=8888 &[root@k8s-master ~]# curl localhost:8888/api/v1/namespaces/default[root@k8s-master ~]# curl localhost:8888/apis/apps/v1/namespaces/default/deployments以上两种api的区别是:api它是⼀个特殊链接,只有在核⼼v1群组中的对象才能使⽤。apis 它是⼀般API访问的⼊⼝固定格式名ServiceAccount令牌认证K8S⾃动为每个Pod注⼊⼀个ServiceAccount令牌,在每个名称空间中,会⾃动存在(由ServiceAccount准⼊控制器负责)⼀个ServiceAccount,将被该空间下的每个Pod共享使⽤。认证令牌保存于该空间下的⼀个Secret对象中,该对象中共有三个信息:资源定义格式:apiVersion: v1 #ServiceAccount所属的API群组及版本kind: serviceAccount #资源类型标识metadata: name #资源名称 namespace # ServiceAccount是名称空间级别的资源automountServiceAccountToken # 是否让Pod⾃动挂载API令牌secrets <[]object> #以该SA运⾏的Pod所要使⽤的Secret对象组成的列表 apiVersion #引⽤的Secret对象所属的API群组及版本,可省略 kind #引⽤的资源的类型,这⾥是指Secret,可省略 name #引⽤的Secret对象的名称,通常仅给出该字段即可 namespace #引⽤的Secret对象所属的名称空间 uid # 引⽤的Secret对象的标识符; name #docker-registry类型的Secret资源的名称imagePullSecrets <[]object> # 引⽤的⽤于下载Pod中容器镜像的Secret对象列表 之前讲到secret时提到过Pod挂载私有仓库secret,实际使⽤不⽅便需要每个Pod单独挂载,放到ser⽰例: 查看Pod 默认ServiceAccount及Secret[root@k8s-master ~]# kubectl get pod

NAME READY STATUS RESTARTS AGEcentos-deployment-66d8cd5f8b-9x47c 1/1 Running 1 41hdemodb-0 1/1 Running 0 17hdemodb-1 1/1 Running 0 16h默认情况下没有指定ServiceAccount都会把默认的ServiceAccount挂载到Pod[root@k8s-master ~]# kubectl describe pod demodb-0

Annotations: ... Mounts: /demodb/data from data (rw) /var/run/secrets//serviceaccount from default-token-fsshk (ro) #默认的ServiceAccount令牌...Volumes: data: Type: PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace) ClaimName: data-demodb-0 ReadOnly: false default-token-fsshk: #默认的ServiceAccount令牌 存储卷 Type: Secret (a volume populated by a Secret) SecretName: default-token-fsshk

Optional: falseQoS Class: BestEffortNode-Selectors: Tolerations: /not-ready:NoExecute op=Exists for 300s /unreachable:NoExecute op=Exists for 300sEvents: 每个名称空间下都⾃动⽣成⼀个默认的secret[root@k8s-master ~]# kubectl get secretNAME TYPE DATA AGEdefault-token-fsshk /service-account-token 3 51d

harbor-tom /dockerconfigjson 1 11dmysql-root-authn Opaque 2 11dnginx-ssl-secret /tls 2 11dweb-basic-authn /basic-auth 2 11d[root@k8s-master ~]# kubectl get secret -n kube-systemNAME TYPE DATA AGEattachdetach-controller-token-bpprw /service-account-token 3 51dbootstrap-signer-token-69hd8 /service-account-token 3 51dbootstrap-token-hbjzpz /token 5 14dcertificate-controller-token-26sn8 /service-account-token 3 51dclusterrole-aggregation-controller-token-hlb6c /service-account-token 3 51dcoredns-token-k6swp /service-account-token 3 51dcronjob-controller-token-449ng /service-account-token 3 51ddaemon-set-controller-token-qb22n /service-account-token 3 51ddefault-token-xjfpp /service-account-token 3 主要包含的3类信息 都是以加密⽅式显⽰ 1. namespace、2. 、3. token[root@k8s-master ~]# kubectl describe secret default-token-xjfpp -n kube-system #查看secret 详细信息Name: default-token-xjfppNamespace: kube-system

Labels: Annotations: /: default /: a7cfad17-e87a-42dd-8f34-46181dd43b05Type: /service-account-tokenData

====: 1066 bytesnamespace: 11 bytes

token: eyJhbGciOiJSUzI1NiIsImtpZCI3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdWPod 默认的挂载路径 /var/run/secrets//serviceaccount[root@k8s-master authfiles]# kubectl exec -it demodb-0 -- /bin/sh/demodb/data # cd /var/run/secrets//serviceaccount/run/secrets//serviceaccount # namespace token/run/secrets//serviceaccount # cat namespace

/run/secrets//serviceaccount # cat

-----BEGIN CERTIFICATE-----MIIC5zCCAc+gAwIBAgIBADANBgkqhkiG9w0BAQsFADAVMRMwEQYDVQQDEwprdWJlcm5ldGVzMB4XDTIxMDYyODE3NDIxMFoXDTMxMDYyNjE3NDIxMFowFTETMBEGA1UEAxMKa3ViZXJuZXRlczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMwQmCJJ0GuIDdzZa8XAJIy7BRUGBT0oI0lVuWc3PD25whr1MBRyUru0u0n7mKVQTzbY0G8USHzwSnX51OoMpU5YwHK6WGLgJ6gdCfjAY6v12e7y+rvjOKYns6ljUf2MnaILnrCy1/u56Lnh1wCH1XkLECP539MFamYkRGxeS9FZlFcgLvJp43VX9V4IWQeumHd91abKVei/41qbbvyDU7l4l7klUmLUTGDlYpf1GPU/Jaom4QLRaEt2csYcNZ8J3yaYGvOloGM150Rsx4vL8DWOqZcUUg/uXujKg1MfWRrD9KvqK1QdP92IE+l6nXUKY34rvoDCmOcL8J0nPyjbyf0CAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgKkMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFOwi2wrUbuvVmbiV2rnnLtz0hsgcMA0GCSqGSIb3DQEBCwUAA4IBAQBCFkEU4gyouDs4hG0pjdlrJRkDw1kKg1JV8m3CqcKUKmJBUT9H9R8LaU2s/6yS5zX3VSdUNgF1V/hpjUJ6bSud9Xfnmbw8lHKUucUSIWU9a+TGTvknDqI8FcC8gKstUAwagxdRwj3KEy7HSAcbMXjKFSdAlQ2Qq7CG8vLXilurHhEEbrzqunbuVjJ80gIWeeo23HkAbjOiTiSokN2AoGyGW9eS3bMLSJgMHzLtX80uWwS75jc32mMrYe59nzGIR2yY2zxkmmj6DOLoMQKyJlqPC2fGKyAv0N79QKAGl7JjbXzYvaV2egWtCk0FHnfah9Fu+/P8pNtY8agSluneeHkL-----END CERTIFICATE-----/run/secrets//serviceaccount #

发布者:admin,转转请注明出处:http://www.yc00.com/web/1688057183a72420.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信