乐趣区

关于kubernetes:k8s-认证和权限控制

k8s 的认证机制是啥?

说到 k8s 的认证机制,其实之前咋那么也有提到过 ServiceAccouont以及相应的 token,证书 crt,和基于 HTTP 的认证等等

k8s 会应用如上几种形式来获取客户端身份信息,不限于下面几种

后面有说到 ApiServer 收到申请后,会去校验客户端是否有权限拜访,ApiServer 会去本身的认证插件中进行解决认证,进而到受权插件中进行受权,例如这样的:

ServiceAccount 相当重要,之前咱们说到过拜访 pod 元数据的时候,就提到过 ServiceAccount,以及相应的挂载文件:

  • /var/run/secrets/kubernetes.io/serviceaccount/token
  • /var/run/secrets/kubernetes.io/serviceaccount/namespace
  • /var/run/secrets/kubernetes.io/serviceaccount/ca.crt

pod 就是通过发送上述的 token 文件来进行身份认证的,这是代表了运行的 pod 中的应用程序的身份证明,每一个 pod 都是会有一个 ServiceAccoount 与之关联的

咱们能够了解 ServiceAccoount 不是什么也别的货色,也是 k8s 的其中一种资源而已,咱们能够写 yaml 创立该 资源,当然也是能够通过命令来创立 sa 资源的,sa 是 ServiceAccoount 的缩写

例如,咱们能够通过命令 kubectl get sa 来查看 ServiceAccoount

一个 pod 只会对应一个 SA,然而 一个 SA 是能够和多个 pod 关联的 ,并且,咱们须要分明,这些都是得再同一个命名空间下的, 例如画一个简图来是示意一下

咱们能够看到,同一个命名空间中

  • 一个 SA 能够对应多个 pod
  • 一个 ns(namespace)中能够有多个 ServiceAccount
  • 一个 pod 只能关联 一个 ServiceAccount

再来看看这个:

相对不会存在 ns 4 的 pod,会关联到 ns 3 的 ServiceAccount, 不在同一个命名空间,根本无法操作

自行创立一个 SA

kubectl create sa xmt

创立一个 SA 名为 xmt

查看上述 xmt SA 的信息,k8s 默认给咱们 xmt 账户生成了 tokensecrets

咱们能够查看 secrets 的内容

咱们能够通过在线的 jwt 解码工具来查看这个 secrets,他是一个 JWT 编码的信息

https://tooltt.com/jwt-decode/

咱们解码后,能够看到具体的信息

{
    "iss": "kubernetes/serviceaccount",
    "kubernetes.io/serviceaccount/namespace": "default",
    "kubernetes.io/serviceaccount/secret.name": "xmt-token-kbv8b",
    "kubernetes.io/serviceaccount/service-account.name": "xmt",
    "kubernetes.io/serviceaccount/service-account.uid": "587fbca5-f20c-4421-a3fd-db21b76c7ac6",
    "sub": "system:serviceaccount:default:xmt"
}

通过上述 secrets 能够失去 namespace,secret.name,service-account.name,service-account.uid 等信息,这个 uid 是惟一的

创立 pod 指定 SA

咱们能够查看任意一个 pod 的详情,也能够看到配置外面有 ServiceName

明天就到这里,学习所得,若有偏差,还请斧正

欢送点赞,关注,珍藏

敌人们,你的反对和激励,是我保持分享,提高质量的能源

好了,本次就到这里

技术是凋谢的,咱们的心态,更应是凋谢的。拥抱变动,背阴而生,致力向前行。

我是 阿兵云原生,欢送点赞关注珍藏,下次见~

退出移动版