k8s中各组件和kube apiserver通信时的认证和鉴权

2023-11-17

背景

和master节点kube api-server通信的组件有很多,包括:

  • kubelet
  • calico
  • scheduler
  • kubectl
  • 某些pod可能会和kube api-server通信

这些组件和api-server通信时用的是什么身份,可以操作哪些api资源呢?

本文使用的k8s集群是用kubekey搭建,命令是./kk create cluster --with-kubernetes v1.21.5 --with-kubesphere v3.2.1

kubectl的身份和权限

kubectl用的是什么身份?

kubectl默认会用到.kube/config配置,其中包含证书信息

  root@ip-172-31-14-204:~# cat .kube/config
  apiVersion: v1
  ...
  users:
  - name: kubernetes-admin
    user:
      client-certificate-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURJVENDQWdtZ0F3SUJBZ0lJSm9rTE5qWVk0UG93RFFZSktvWklodmNOQVFFTEJRQXdGVEVUTUJFR0ExVUUKQXhNS2EzVmlaWEp1WlhSbGN6QWVGdzB5TWpBMU1qVXdNRE13TURWYUZ3MHlNekExTWpVd01ETXdNRFphTURReApGekFWQmdOVkJBb1REbk41YzNSbGJUcHRZWE4wWlhKek1Sa3dGd1lEVlFRREV4QnJkV0psY201bGRHVnpMV0ZrCmJXbHVNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQTI5L25vcEVJWE9JVXl0MngKRUFETUNod01idkhaWU90c2xYdFBsYnNYRXJPOXpmYzBIMi9UV2p2dUFHUDRwaVhPaG5sSnYvRmtKTVVCbk1HWgpmV3VrdU1vTStOSDZkMERFVjlsMUNYUk9BOEhlRStacXBtYmVvbTV3SWdsYlZIeXFzdTZNb2VySTZkYnFqcEdSCmpJUzVyb0tNQU94OFNYRlJxUFZaaEtIdkhFUTk2REt1UWNmMU84ZzlWKzVjYzQwZ295UzBsOHAxOWtBdU1JeTAKQktPWGZxTTMyRkNSSWZKOWJTSzZPQTBDek8wbWlJK0pidVhMMWFzNkE5M08xdWZCdUxOdURTTmZSR015WjJoQgpTdGU3eEZyOFZQRlFsRmJBUklBRnJjK0RvMXBUUk1xZ09kUS8xZVE0bk5iNXRRa0hnZG9raERVZ2owd2hHTmV6Clc0RFlrUUlEQVFBQm8xWXdWREFPQmdOVkhROEJBZjhFQkFNQ0JhQXdFd1lEVlIwbEJBd3dDZ1lJS3dZQkJRVUgKQXdJd0RBWURWUjBUQVFIL0JBSXdBREFmQmdOVkhTTUVHREFXZ0JUZnZPL1VlcDhWbnVmS3Q5QVpOY0tFV05vbApWakFOQmdrcWhraUc5dzBCQVFzRkFBT0NBUUVBdGQ5Q1RwajdEdUw2NDIxanhhMlYrcEhCV2tqRVhqaXdMQUdxCmI4UVpPT2llT2xUcjNPTVVXWWw1NEJpd3N2WmkxYi9pRDlMalhjUnhxR0d1ZytMUS9zNnVRVjBwSWhpL2U1MloKclB6Vm83V2VmSURZQm44RWhwSmsvbjdXYjhyRDJLUmNqNnRNanNFS3ViVkNSRXQyeWdYeFhvSnJ6a21xTkgvSwpGMFdqOGtFV2ZKVENQZnNmV1laNDBKMDJhbGZ4d05QQ080K1BoRDhoSm9xK1h6aitCNWl0TDVNZ2o0ZWFOZHpsCkxnUk4zc3hMZ0QvOVA4MW1NdTBnVDZ1V3d6c0U4VXZGdE9kOXkzOG50Q25HVUF5U2pTU1NOY0thRVVhWTd5KzIKTGxZeXFBZmJGN29pdEJsOWxSSnZmL2thR2trdGJoQ0dnNVk3eVMxSUVWNFVJdTZFb3c9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==
  ...

可以看到这个证书的CN是kubernetes-admin,O是system:masters。根据文档可以知道,这表示证书代表的用户是kubernetes-admin,用户组是system:masters。

  root@ip-172-31-14-204:~# echo LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURJVENDQWdtZ0F3SUJBZ0lJSm9rTE5qWVk0UG93RFFZSktvWklodmNOQVFFTEJRQXdGVEVUTUJFR0ExVUUKQXhNS2EzVmlaWEp1WlhSbGN6QWVGdzB5TWpBMU1qVXdNRE13TURWYUZ3MHlNekExTWpVd01ETXdNRFphTURReApGekFWQmdOVkJBb1REbk41YzNSbGJUcHRZWE4wWlhKek1Sa3dGd1lEVlFRREV4QnJkV0psY201bGRHVnpMV0ZrCmJXbHVNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQTI5L25vcEVJWE9JVXl0MngKRUFETUNod01idkhaWU90c2xYdFBsYnNYRXJPOXpmYzBIMi9UV2p2dUFHUDRwaVhPaG5sSnYvRmtKTVVCbk1HWgpmV3VrdU1vTStOSDZkMERFVjlsMUNYUk9BOEhlRStacXBtYmVvbTV3SWdsYlZIeXFzdTZNb2VySTZkYnFqcEdSCmpJUzVyb0tNQU94OFNYRlJxUFZaaEtIdkhFUTk2REt1UWNmMU84ZzlWKzVjYzQwZ295UzBsOHAxOWtBdU1JeTAKQktPWGZxTTMyRkNSSWZKOWJTSzZPQTBDek8wbWlJK0pidVhMMWFzNkE5M08xdWZCdUxOdURTTmZSR015WjJoQgpTdGU3eEZyOFZQRlFsRmJBUklBRnJjK0RvMXBUUk1xZ09kUS8xZVE0bk5iNXRRa0hnZG9raERVZ2owd2hHTmV6Clc0RFlrUUlEQVFBQm8xWXdWREFPQmdOVkhROEJBZjhFQkFNQ0JhQXdFd1lEVlIwbEJBd3dDZ1lJS3dZQkJRVUgKQXdJd0RBWURWUjBUQVFIL0JBSXdBREFmQmdOVkhTTUVHREFXZ0JUZnZPL1VlcDhWbnVmS3Q5QVpOY0tFV05vbApWakFOQmdrcWhraUc5dzBCQVFzRkFBT0NBUUVBdGQ5Q1RwajdEdUw2NDIxanhhMlYrcEhCV2tqRVhqaXdMQUdxCmI4UVpPT2llT2xUcjNPTVVXWWw1NEJpd3N2WmkxYi9pRDlMalhjUnhxR0d1ZytMUS9zNnVRVjBwSWhpL2U1MloKclB6Vm83V2VmSURZQm44RWhwSmsvbjdXYjhyRDJLUmNqNnRNanNFS3ViVkNSRXQyeWdYeFhvSnJ6a21xTkgvSwpGMFdqOGtFV2ZKVENQZnNmV1laNDBKMDJhbGZ4d05QQ080K1BoRDhoSm9xK1h6aitCNWl0TDVNZ2o0ZWFOZHpsCkxnUk4zc3hMZ0QvOVA4MW1NdTBnVDZ1V3d6c0U4VXZGdE9kOXkzOG50Q25HVUF5U2pTU1NOY0thRVVhWTd5KzIKTGxZeXFBZmJGN29pdEJsOWxSSnZmL2thR2trdGJoQ0dnNVk3eVMxSUVWNFVJdTZFb3c9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== | base64 -d | openssl x509  -noout -text
  Certificate:
      ...
          Subject: O = system:masters, CN = kubernetes-admin

那这个证书代表的用户能操作哪些资源呢?

能操作哪些资源呢?

这个需要看"用户kubernetes-admin"、"用户组system:masters"在集群中绑定了什么"角色"。

可以看到它绑定了"ClusterRole/cluster-admin",这个角色可以对所有资源做任意操作。

  root@ip-172-31-14-204:~# kubectl get ClusterRoleBinding -A -o wide | grep system:masters
  cluster-admin                                          ClusterRole/cluster-admin                                                          33h                                    system:masters

可以通过kubectl get ClusterRole/cluster-admin -o yaml查看角色的权限。

所以,.kube/config证书中代表的用户身份可以对所有资源做任意操作。

kube-scheduler的身份和权限

kube-scheduler用的是什么身份?

在master节点上查看scheduler进程,可以"大胆猜测"用的是/etc/kubernetes/scheduler.conf中的证书信息。

在我的k8s环境中,kube-scheduler是运行在pod中的,不过pod和宿主机的/etc/kubernetes/scheduler.conf文件是一样的

  root@ip-172-31-14-33:~# ps aux|grep kube-scheduler
  root     51897  0.2  0.7 753012 57736 ?        Ssl  May25   3:59 kube-scheduler --authentication-kubeconfig=/etc/kubernetes/scheduler.conf --authorization-kubeconfig=/etc/kubernetes/scheduler.conf --bind-address=0.0.0.0 --feature-gates=RotateKubeletServerCertificate=true,TTLAfterFinished=true,ExpandCSIVolumes=true,CSIStorageCapacity=true --kubeconfig=/etc/kubernetes/scheduler.conf --leader-elect=true --port=0

查看证书的Subject信息,可以看到用户是system:kube-scheduler

  root@ip-172-31-14-33:~# echo LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUREVENDQWZXZ0F3SUJBZ0lJUWdERWp2Q3pZdGd3RFFZSktvWklodmNOQVFFTEJRQXdGVEVUTUJFR0ExVUUKQXhNS2EzVmlaWEp1WlhSbGN6QWVGdzB5TWpBMU1qVXdNRE13TURWYUZ3MHlNekExTWpVd01ETXdNRFphTUNBeApIakFjQmdOVkJBTVRGWE41YzNSbGJUcHJkV0psTFhOamFHVmtkV3hsY2pDQ0FTSXdEUVlKS29aSWh2Y05BUUVCCkJRQURnZ0VQQURDQ0FRb0NnZ0VCQUx3blRITU9scnMzMThjRVdoMkZFOUlmMDN1SXBTRmUxUU9jeFhXOFFmb1IKcUp6bS96ZWpwSUxNci82bXRERnp1WFhDWnhVNjA3eWN2VkprKzFCRzJLQjFtTEZDa0JlWlJVQTBjMk5udEhtVQpmVWkwNjhqeHdCeWFEbXlha2N0NENoT0I3K0xGT3I5WHozQ0owcUxaTXp0YnAxUk5nTWR4aE9IQmZZRFlXdWZ1Ckk3b3R0THdlQlZ0R3RNQlNjb1pOZ1lyWEFyb0MyVzBSYkVNUVhYV0pVMjFXUEdyRkxFQjVpZWo5SjRKWUxuRGQKdDcxK0NoWWQxcXA0bVJmZHhIcXB6dG8vSzdEWWo0UzJVS1BleGUxN2QwR25CcnJYajVWb2FPckhaWVRpNm5xRgptZk81eEdySEtqR1lncEdnYlBUTFNjbFdlcVMzbi9OQThCUE96OElEeWY4Q0F3RUFBYU5XTUZRd0RnWURWUjBQCkFRSC9CQVFEQWdXZ01CTUdBMVVkSlFRTU1Bb0dDQ3NHQVFVRkJ3TUNNQXdHQTFVZEV3RUIvd1FDTUFBd0h3WUQKVlIwakJCZ3dGb0FVMzd6djFIcWZGWjdueXJmUUdUWENoRmphSlZZd0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dFQgpBRVdxaTY3M0tNZ0tyaHdPRTcxZm40YlBwUlJKY0hhdWNlaWF0d085S1dLRW9IbklRTWN5dlR5QW9DL3B1Y2RMCmN5MVNnVzZEdURjdERDTlhwdGNMc3VKaTltc3lXVFdWV09ONUgwUUpMTHBUblpoUnRUeU1rSU92MzdIekFHTHYKbFJVbzlaUWRuWEpmMS8yTlFsak5TUFNFZGwzYm1aRnh1ZjlDTFA3OVBqVWhCNzJET1N2RVJoYXBaanBCK0JxTwpHdjU1bEhyUG1nUGJicS90NndScUFEN1FSZ1M3ZnpOYjVOT0l3TU5pL29GU0k3anlNeEdleFJTcStrQWpUSHNZCnZlcUNSamszNkF6WUZSb0xsbFM3RURPZlVBWkJST3RicTN0dkpYM0NMemE5OVNyZlk3REpUL1c1N2dna0dFNkkKLzZNcUVOTzNTRlY0TzU2RmsvRGlxRTQ9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K | base64 -d |openssl x509  -noout -text
  Certificate:
      ...
          Subject: CN = system:kube-scheduler

可以看到"用户system:kube-scheduler"绑定了两个角色。

  root@ip-172-31-14-33:~# kubectl get ClusterRoleBindings -o wide |grep system:kube-scheduler
  system:kube-scheduler                                  ClusterRole/system:kube-scheduler                                                  31h   system:kube-scheduler
  system:volume-scheduler                                ClusterRole/system:volume-scheduler                                                31h   system:kube-scheduler

kubelet的身份和权限

kubelet用的是什么身份?

  root@ip-172-31-14-204:~# ps aux|grep kubelet
  root     54396  7.7  2.8 1966128 113860 ?      Ssl  08:14  29:54 /usr/local/bin/kubelet ... --kubeconfig=/etc/kubernetes/kubelet.conf ...

在worker节点上可以看到kubelet进程参数,api-server信息在/etc/kubernetes/kubelet.conf文件中

可以看到是通过证书认证的

  root@ip-172-31-14-204:/etc/kubernetes/manifests# cat /etc/kubernetes/kubelet.conf
  apiVersion: v1
  ...
  users:
  - name: system:node:ip-172-31-14-33
    user:
      client-certificate: /var/lib/kubelet/pki/kubelet-client-current.pem
      client-key: /var/lib/kubelet/pki/kubelet-client-current.pem

查看证书的Subject信息,可以知道证书代表的"用户"是"system:node:ip-172-31-14-204","用户组"是"system:nodes"

  root@ip-172-31-14-204:~# openssl x509 -in /var/lib/kubelet/pki/kubelet-client-current.pem -noout -text
  Certificate:
      ...
          Subject: O = system:nodes, CN = system:node:ip-172-31-14-204

那这个kubelet的证书代表的用户能操作哪些资源呢?它可以用来像"集群管理员"那样创建pod吗?

kubelet能操作哪些资源?

按照之前流程,我们来看一下"用户system:node:ip-172-31-14-204"、"用户组system:nodes"在集群中绑定了什么"角色"。

  root@ip-172-31-14-204:~# kubectl get ClusterRoleBinding -A|grep system:nodes
  root@ip-172-31-14-204:~# kubectl get ClusterRoleBinding -A|grep "system:node:ip-172-31-14-204"
  root@ip-172-31-14-204:~#

会发现"用户和用户组"没有绑定任何一个角色,这和kubectl、kube-scheduler就很不一样了。

使用Node鉴权 文档中提到,kube apiserver对kubelet的鉴权比较特殊。

当发现请求的用户在system:nodes组中,用户名是system:node: 时,就限制这个请求只能做有限的操作,比如

  • 读操作

    • services
    • pod
    • 绑定到当前node的pod的secret、configMap
  • 写操作(如果开启了NodeRestriction准入插件,就只能修改kubelet所在node的资源)

    • 创建节点、修改节点状态
    • 创建pod、pod状态

    似乎如果没有开启NodeRestriction准入插件,就能让kubelet在任意node上创建pod。

    红蓝对抗中,如果能让kubelet在任意node上创建pod,就能用来横移

    文档中写到,这里的能力可能随着k8s版本变化而变化,以确保kubelet最小权限,默认安全。所以,kubelet到底能操作哪些资源,感觉还是来测试一下比较好,下面就来验证一下kubelet的权限。

验证kubelet的权限

我们先用kubelet配置文件覆盖kubectl的默认配置,然后就可以用kubectl命令来验证。

  root@ip-172-31-14-204:~# mv .kube/config .kube/config.bak
  root@ip-172-31-14-204:~# ps aux|grep kubele
  root     59075  7.9  2.7 1956332 108712 ?      Ssl  03:37   2:51 /usr/local/bin/kubelet ... --kubeconfig=/etc/kubernetes/kubelet.conf ...
  root@ip-172-31-14-204:~# cp /etc/kubernetes/kubelet.conf .kube/config

可以看到不能够创建pod

  root@ip-172-31-14-204:~# kubectl run httpbin --image kennethreitz/httpbin
  Error from server (Forbidden): pods "httpbin" is forbidden: pod does not have "kubernetes.io/config.mirror" annotation, node "ip-172-31-14-204" can only create mirror pod

查看pod信息是可以的

  root@ip-172-31-14-204:~# kubectl get pods -A
  NAMESPACE                      NAME                                               READY   STATUS      RESTARTS   AGE
  default                        tail                                               1/1     Running     0          25h
  kube-system                    calico-kube-controllers-846b5f484d-vzlhw           1/1     Running     0          27h
  ...
  root@ip-172-31-14-204:~# kubectl describe pod devops-27558900-m69pc -n kubesphere-devops-system
  Name:         devops-27558900-m69pc
  ...

查看secret和configMap是不允许的

  root@ip-172-31-14-204:~# kubectl get secrets -A
  Error from server (Forbidden): secrets is forbidden: User "system:node:ip-172-31-14-204" cannot list resource "secrets" in API group "" at the cluster scope: can only read namespaced object of this type
  root@ip-172-31-14-204:~# kubectl get configmap
  Error from server (Forbidden): configmaps is forbidden: User "system:node:ip-172-31-14-204" cannot list resource "configmaps" in API group "" in the namespace "default": No Object name found
  root@ip-172-31-14-204:~#

小结:kubelet证书可以用来查看pod信息,不能创建pod、不能查看所有命名空间的secret和configMap。看起来和文档中的说明一致。

calico

calico用的是什么身份?

  root@ip-172-31-14-204:~# cat /etc/cni/net.d/calico-kubeconfig
  # Kubeconfig file for Calico CNI plugin. Installed by calico/node.
  ...
  users:
  - name: calico
    user:
      token: eyJhbGciOiJSUzI1NiIsImtpZCI6ImV6bEstc2QtRTNTaE1ySFg2SWdxMjY2aHpkVFBEWU56SGdfaVdZRXZ4YncifQ.eyJhdWQiOlsiaHR0cHM6Ly9rdWJlcm5ldGVzLmRlZmF1bHQuc3ZjLmNsdXN0ZXIubG9jYWwiXSwiZXhwIjoxNjg1MDIyOTAwLCJpYXQiOjE2NTM0ODY5MDAsImlzcyI6Imh0dHBzOi8va3ViZXJuZXRlcy5kZWZhdWx0LnN2Yy5jbHVzdGVyLmxvY2FsIiwia3ViZXJuZXRlcy5pbyI6eyJuYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsInBvZCI6eyJuYW1lIjoiY2FsaWNvLW5vZGUtcWR0ZmIiLCJ1aWQiOiI4N2U4ZmM3ZC0yYTg5LTQ1OTgtOWQyOC1mZDYyNGIwODk2MDMifSwic2VydmljZWFjY291bnQiOnsibmFtZSI6ImNhbGljby1ub2RlIiwidWlkIjoiOTEzNzUwZWItYmRhNC00YjJmLTgxNjctNDZjOTkxNjk5YWRkIn0sIndhcm5hZnRlciI6MTY1MzQ5MDUwN30sIm5iZiI6MTY1MzQ4NjkwMCwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50Omt1YmUtc3lzdGVtOmNhbGljby1ub2RlIn0.mF1Yek_sSBa2nlQIbdJlEZtv3anjIUFPFpj8Ta8Zn1t6vxYEZjswbPxrw-90sbEVGR30GWytUjr3X1tmjWTP0fL9ltAPvcM0tRg6MoLuGdC2uZFbt-zfKFEn42Yme-NuVOKO3K2otgZNt0ym0gYRT41wLCqOuKLq-SHAkHdvIOZ1eVAu0OsN3ccgSFf2nsuBqbDphd4ShqRPNXl1m66UEDlb4WiPmuSPuzRmMiV706YbBPxMUzn9Ve4o4IfBbeBufp_edSWPPW763EGqZmI7qZg-78SUbtAJ6m8Qkq6TrDIcaJbI3Mrl4EsrnE3v3MGMOogfXXs3-yU-NZl3ilQt6Q
  ...

可以看到用的是token令牌。这个token令牌是一个jwt字符串,base64解码后的payload部分如下,可以看到"ServiceAccount"是calico-node,命名空间是kube-system

  {"aud":["https://kubernetes.default.svc.cluster.local"],"exp":1685022900,"iat":1653486900,"iss":"https://kubernetes.default.svc.cluster.local","kubernetes.io":{"namespace":"kube-system","pod":{"name":"calico-node-qdtfb","uid":"87e8fc7d-2a89-4598-9d28-fd624b089603"},"serviceaccount":{"name":"calico-node","uid":"913750eb-bda4-4b2f-8167-46c991699add"},"warnafter":1653490507},"nbf":1653486900,"sub":"system:serviceaccount:kube-system:calico-nodeIn0

可以看到,这个"ServiceAccount"被绑定到了"ClusterRole/calico-node"角色。

  root@ip-172-31-14-204:/home/ubuntu# kubectl get clusterrolebinding -o wide|grep kube-system/calico-node
  calico-node                                            ClusterRole/calico-node                                                            34h                                                                                      kube-system/calico-node

pod

pod用的是什么身份?

大部分pod会挂载一个token在/var/run/secrets/kubernetes.io/serviceaccount/token位置,这个token也是一个jwt字符串。

  root@ip-172-31-14-204:/home/ubuntu# kubectl exec -ti tail -- sh
  / # cat /var/run/secrets/kubernetes.io/serviceaccount/token
  eyJhbGciOiJSUzI1NiIsImtpZCI6ImV6bEstc2QtRTNTaE1ySFg2SWdxMjY2aHpkVFBEWU56SGdfaVdZRXZ4YncifQ.eyJhdWQiOlsiaHR0cHM6Ly9rdWJlcm5ldGVzLmRlZmF1bHQuc3ZjLmNsdXN0ZXIubG9jYWwiXSwiZXhwIjoxNjg1MDk4NTUwLCJpYXQiOjE2NTM1NjI1NTAsImlzcyI6Imh0dHBzOi8va3ViZXJuZXRlcy5kZWZhdWx0LnN2Yy5jbHVzdGVyLmxvY2FsIiwia3ViZXJuZXRlcy5pbyI6eyJuYW1lc3BhY2UiOiJkZWZhdWx0IiwicG9kIjp7Im5hbWUiOiJ0YWlsIiwidWlkIjoiYmQzZGRlZjAtODViYy00MmI4LThjZWYtMjQwZTkwMjViYWQ5In0sInNlcnZpY2VhY2NvdW50Ijp7Im5hbWUiOiJkZWZhdWx0IiwidWlkIjoiZGI5YjQ5MGMtYzU5MS00NDc0LTljOTAtY2U3ZjZmMmRjYjYzIn0sIndhcm5hZnRlciI6MTY1MzU2NjE1N30sIm5iZiI6MTY1MzU2MjU1MCwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50OmRlZmF1bHQ6ZGVmYXVsdCJ9.L388ZKZWvHYf7Yvt6tA7t8k2QMYcsI9BDcYtoxAgOJiEiwf3LKFQmdH8KF4PnI0kjM3Bg80WztFznotwZqCwCNfXMVMl4_iLGHDAgVB3tsdv9ljZ9FUJbn52PD5aWHSWRqjpyQzv8_89dlnnbGQLHg4M8Ly4OkGuWUOnE1x6vgSa1MkjhrnrJEPnnJo5Fy_vyRdvO2A9iyGh7cC97Ns6WWFkeD7741wSkGkoNkZKqJTyfaa_KScprPiVPYuisi4HkYrP71NzZA_i34Dk-IsomySR4h2WWw_88-kfL_lWZ8PDu5NuVekZZ4xfIQjA6oDhXT_Hx4iIlhwVwgYuTW4V-g

base64解码后,payload中也能看到一个服务账号ServiceAccount,这个ServiceAccount也有可能和一个"角色"绑定。你可以动手查看一下自己的pod。

总结

k8s中"X509 客户证书"和"服务账号令牌"应该是身份认证最常见的两种方式,都能代表"用户"或"用户组"信息。

大部分的组件(包括scheduler、calico、kubectl、pod)鉴权都是依赖RBAC模型,也就是"用户或"用户组"绑定的"角色"规定了能访问哪些资源。

kubelet的鉴权比较特殊,是依赖Node鉴权模型。

用户认证 文档中还提到api访问控制的其他方法。

原文链接:https://zone.huoxian.cn/d/1211-k8skube-apiserver 作者:leveryd

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

k8s中各组件和kube apiserver通信时的认证和鉴权 的相关文章

  • 指标实现层级_有了指标怎么用层次分析法建立模型?

    电脑 MATLAB软件 方法 步骤 建立层次结构模型 目标层 这一层次中只有一个元素 一般它是分析问题的预定目标或理想结果 因此也称为目标层 准则层 这一层次中包含了为实现目标所涉及的中间环节 它可以由若干个层次组成 包括所需考虑的准则 子
  • TQ210学习笔记:TQ210移植qt

    这几天搞了一块TQ210的板子 由于要求 需要移植qt进去 于是搞了近一个星期 现在终于看到了一点希望 开始找了一篇博客 我是按照他的步骤来 http emouse cnblogs com 首先是移植TSLIB 移植这个的原因是 因为电磁噪
  • C++进阶--对象指针

    对象指针定义形式 类名 对象指针名 例 Point a 5 10 Point ptr ptr a 通过指针访问对象成员 对象指针名 gt 成员名 例 ptr gt getx 就相当于 ptr getx this指针 隐含于类的每一个非静态成
  • 行为型模式 - 状态模式State

    状态模式的定义与特点 状态 State 模式的定义 对有状态的对象 把复杂的 判断逻辑 提取到不同的状态对象中 允许状态对象在其内部状态发生改变时改变其行为 状态模式是一种对象行为型模式 其主要优点如下 结构清晰 状态模式将与特定状态相关的
  • 算法设计与分析(期末复习重点)更新中

    第一章 算法设计基础 算法的五大特性 输入 输出 可行性 有穷性 确定性 1 输入 一个算法有零个或多个输入 2 输出 一个算法有一个或多个输出 3 可行性 算法描述的操作可以通过已经实现的基本操作执行有限次来实现 每步可执行 4 有穷性
  • React State Hooks的闭包陷阱,在使用Hooks之前必须掌握

    伴随着 React Hooks 的正式发布 因为其易用性以及对于逻辑代码的复用性更强 毫无疑问越来越多的同学会偏向于使用 Hooks 来写自己的组件 但是随着使用的深入 我们发现了一些 State Hooks 的陷阱 那么今天我们就来分析一
  • 蛇形走线的长度受控问题

    目录 序言 分析 结束语 序言 有一次 小编的layout同事问了一个问题 蛇形走线时是否需要控制绕线的长度 小编一时竟难以回答 不是这个问题有多复杂 只是 这个问题不容易量化 解释起来颇费周章 因此 有必要将其单独列为一个话题进行讨论 具
  • VMware Workstation 英文改中文界面

    在控制面板 时间和语言 语言 区域中设置中文简体 感谢
  • 使用PhotoShop制作蓝底证件照

    准备 白底照片 ps 步骤 1 打开ps将图片拖入 2 复制图层 3 选择快速选择工具 4 点击图片背景 可以看到背景被圈出 5 单击del删除 可以发现背景没有了 6 点击右下角圆圈 7 选择纯色 设置R0 G125 B255 8 完成
  • 数据库存储引擎及查询sql执行流程

    通过公开课学习的 记录一下 数据库主要存储引擎 myisam 支持表级别的锁 不支持事务 读写不能并发进行 插入和查询会锁表 但因为直接存储了行数 则执行count更快 但是加上条件就不行了 innodb 支持事务 支持行级锁表级锁两种粒度
  • CVE-2016-5159 脏牛内核提权

    Linux内核提权 脏牛提权漏洞 Linux内核的子系统在处理写入时复制至产生了竞争条件 恶意用户可以利用此漏洞来获得高权限 对只读内存映射进行访问 并且在提权的时候 杀毒软件并不会检测到 影响范围 Linux内核 gt 2 6 22 20
  • 利用外部程序对存储BIOS设置参数的CMOS RAM进行读取操作的可行性分析

    电脑的启动过程如下 机后主动执行BIOS程序 可以通过BIOS去设置CMOS 也可以不设置 然后BOIS会去识别操作系统引导设备的引导分区 一般也就是电脑里的硬盘中的第一个扇区 这个扇区中有分区表和主引导分区MBR 我们找到了MBR MBR

随机推荐

  • 【AcWing30】正则表达式匹配(动态规划)

    dp i j 表示 s 0 i 的字符串与p 0 j 的字符串是否匹配 那么有以下几个转换状态 1 p j 1 是字母 而且与 s i 1 相等 那么当前dp i j 是否匹配就依赖于dp i 1 j 1 2 p j 1 是 那么肯定与s
  • GoogleTest安装和搭建自动测试环境

    一 GoogleTest安装 1 下载GoogleTest源代码 sudo apt get install libgtest dev 2 编译源代码 1 安装完源代码后 继续在终端中输入 cd usr src gtest切换到源码存放的地方
  • 高斯分布的极大似然估计

    本文是关于 coursera 上 Robotics Estimation and Learning 课程的笔记 前面通过一个例子简单地介绍了极大似然估计的意思 现在来对高斯分布做极大似然估计 一维高斯分布 概率密度函数 一维高斯分布 Gau
  • dialog弹窗表单居中

    内容居中只需要设置样式就可以了 不用太复杂了 el dialog body display inline block
  • Java操作json的通用类

    package com baiyyy polabs util json import java text ParseException import java util ArrayList import java util Date imp
  • 【华为OD统一考试B卷

    华为OD统一考试A卷 B卷 新题库说明 2023年5月份 华为官方已经将的 2022 0223Q 1 2 3 4 统一修改为OD统一考试 A卷 和OD统一考试 B卷 你收到的链接上面会标注A卷还是B卷 请注意 根据反馈 目前大部分收到的都是
  • 云服务器+云数据库+WordPress搭建网站

    本文已在个人网站上发表 地址 http www bookmonster club 一 硬件环境 1 本地主机 window10系统 2 腾讯云服务器 Windows Server 2016 数据中心版 64位中文版 3 腾讯云数据库 Cyn
  • 知识越分享,收获越多。

    好处一 分享能更快地提升自己 分享知识对人是有考验的 因为做分享 首先要在脑袋里回顾 总结这个知识点 然后通过语言或文字表达出来 这个过程考验了对知识的掌握程度 可以增强我们的思考能力 语言表达能力和文字表达能力 很多时候 我们以为自己知道
  • ./configure: error: C compiler cc is not found

    CentOS 执行 configure 编译命令 时出现 checking for C compiler not found 解决方法 执行以下命令 yum y install gcc gcc c autoconf automake mak
  • dva中model中effect中获取state中的数据

    model export default modelExtend pageModel namespace storeIf state id effects update payload call put select const data
  • 如何快速确定程序的入口

    前言 在阅读代码时 知道程序的入口十分重要 这有助于快速理清程序的逻辑框架 我们找到程序入口后 顺着代码的执行顺序来阅读代码 可以比较容易的理解代码 这里说的代码是编译后成为可执行程序的代码 在linux中就是elf格式 被编译成可执行程序
  • 【学习笔记】模糊控制算法

    本文目录 0 前言 1 概述 2 模糊集合 2 1 集合和论域 2 2 模糊集合的概念 2 3 模糊集合的表示方式 2 4 模糊集合的运算 3 模糊关系与模糊关系合成 3 1 笛卡尔积 3 2 关系与模糊关系 3 3 模糊关系的运算 3 4
  • 自动生成代码的配置generator.properties

    u4EE3 u7801 u751F u6210 u5668 uFF0C u914D u7F6E u4FE1 u606F u5305 u540D package com zscat cms u4F5C u8005 author zscat E
  • python使用scipy.optimize的fsolve求解线性(非线性)方程

    文章目录 求解线性方程 求解非线性方程 求解线性方程 对于固定的线性方程 a 2b 0 4a 5b 0 求 a 与 b 使用如下方法 import scipy optimize as opt import numpy as np def f
  • 【JDK版本常见报错及其解决,Java基础知识点百度云

    J2SE 8 52 J2SE 7 jdk1 7 51 J2SE 6 0 jdk1 6 50 J2SE 5 0 jdk1 5 49 JDK 1 4 48 JDK 1 3 47 JDK 1 2 46 JDK 1 1 45 那怎么办 好办 把项目
  • 【链表】环型链表找环的起点

    力扣 142 环型链表 II 题目 给定一个链表的头节点 head 返回链表开始入环的第一个节点 如果链表无环 则返回 null 1 先确定链表存在环 使用快慢指针法 分别定义 fast 和 slow 指针 从头结点出发 fast 指针每次
  • FFmpeg中的常见结构体

    代码基于FFmpeg5 0 1 目录 FFFormatContext AVFormatContext AVIOContext FFIOContext URLContext URLProtocol AVInputFormat FFStream
  • PAT甲级刷题:模拟(不断更新)

    目录 1001 A B Format 1005 Spell It Right 1035 Password 1061 Dating 18 20 1073 Scientific Notation 16 20 1077 Kuchiguse 17
  • Java 华为真题-猴子爬山

    需求 一天一只顽猴想去从山脚爬到山顶 途中经过一个有个N个台阶的阶梯 但是这猴子有一个习惯 每一次只能跳1步或跳3步 试问猴子通过这个阶梯有多少种不同的跳跃方式 输入描述 输入只有一个整数N 0
  • k8s中各组件和kube apiserver通信时的认证和鉴权

    背景 和master节点kube api server通信的组件有很多 包括 kubelet calico scheduler kubectl 某些pod可能会和kube api server通信 这些组件和api server通信时用的是