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
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:
Optional: falseQoS Class: BestEffortNode-Selectors:
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:
====: 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条)