k8s 认证和权限控制

孙干
• 阅读 675

k8s 的认证机制是啥?

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

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

前面有说到 ApiServer 收到请求后,会去校验客户端是否有权限访问,ApiServer 会去自身的认证插件中进行处理认证,进而到授权插件中进行授权,例如这样的:

k8s 认证和权限控制

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

k8s 认证和权限控制

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

我们可以理解 ServiceAccoount 不是什么也别的东西,也是 k8s 的其中一种资源而已,咱们可以写 yaml 创建该 资源,当然也是可以通过命令来创建 sa 资源的, sa 是 ServiceAccoount 的缩写

例如,我们可以通过命令 kubectl get sa 来查看 ServiceAccoount

k8s 认证和权限控制

一个 pod 只会对应一个 SA,但是 一个 SA 是可以和多个 pod 关联的,并且,我们需要清楚,这些都是得再同一个命名空间下的,例如画一个简图来是表示一下

k8s 认证和权限控制

我们可以看到,同一个命名空间中

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

再来看看这个:

k8s 认证和权限控制

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

自行创建一个 SA

kubectl create sa xmt

创建一个 SA 名为 xmt

k8s 认证和权限控制

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

我们可以查看 secrets 的内容

k8s 认证和权限控制

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

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

k8s 认证和权限控制

我们解码后,可以看到具体的信息

{
    "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

k8s 认证和权限控制

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

欢迎点赞,关注,收藏

朋友们,你的支持和鼓励,是我坚持分享,提高质量的动力

k8s 认证和权限控制

好了,本次就到这里

技术是开放的,我们的心态,更应是开放的。拥抱变化,向阳而生,努力向前行。

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

点赞
收藏
评论区
推荐文章
Stella981 Stella981
4年前
Mac本地搭建kubernetes环境
前言:之前在windows上面的虚拟机上面手工搭建了kubernetes集群,但是环境被破坏了,最近想要继续学习k8s,手工搭建太费事,所以选择了minikube,完全能够满足个人的需求,其实在Windows、Mac、Linux系统上面安装大概都差不多,以下只是我个人搭建的过程以及遇到的一些问题。k8s集群搭建起来还是有点难度,因为刚开始的玩的话,会有很
Stella981 Stella981
4年前
Shiro要点概览与SpringBoot整合实例
1\.简介概念说明Subject主体,简化点说就是用户实体PrincipalSubject的唯一标识,如id、用户名、手机号、邮箱等Credential凭证信息,主体证明自己的东西,如密码、证书等Authenticator认证器,对Subject身份进行认证,例如验证用户的用户名和密码是否匹配Aut
Stella981 Stella981
4年前
Linux CA
CA(CertificateAuthority)证书颁发机构主要负责证书的颁发、管理以及归档和吊销。证书内包含了拥有证书者的姓名、地址、电子邮件帐号、公钥、证书有效期、发放证书的CA、CA的数字签名等信息。证书主要有三大功能:加密、签名、身份验证。1.什么是CA认证?CA认证,即CA认证机构,为电子签名相关各方提供真实性、可靠性验证
Stella981 Stella981
4年前
Spring Cloud下基于OAUTH2认证授权的实现
SpringCloud下基于OAUTH2认证授权的实现博客分类:javaspring在SpringCloud需要使用OAUTH2来实现多个微服务的统一认证授权,通过向OAUTH服务发送某个类型的granttype进行集中认证和授权,从而获得access_token,而这个token是受其他微服务信任的,我们在后续的访问可以
Stella981 Stella981
4年前
Kubernetes 学习24 helm入门
一、概述  1、我们此前在使用kubernetes中,无论我们使用无状态的应用程序,比如myapp,nginx。以及有状态的tomcat,redis,etcd,...等等,他们部署在k8s之上会有这样的问题。首先对无状态应用我们首先使用deployment控制器来实现控制以后其规模伸缩极其容易。这也是k8s带给我们的最重要的需要。但是如果是有状态的应用,
Stella981 Stella981
4年前
JWT验证机制【刘新宇】【Django REST framework中使用JWT】
JWT在用户注册或登录后,我们想记录用户的登录状态,或者为用户创建身份认证的凭证。我们不再使用Session认证机制,而使用JsonWebToken认证机制。什么是JWTJsonwebtoken(JWT),是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC7519(https:/
Stella981 Stella981
4年前
K8s容器编排
K8s容器编排Kubernetes(k8s)具有完备的集群管理能力:1.包括多层次的安全防护和准入机制2.多租户应用支撑能力3.透明的服务注册和服务发现机制4.内建智能负载均衡器5.强大的故障发现和自我修复能力6.服务滚动升级和在线扩容能力7.可扩展的资源自动调度机制8.以
Stella981 Stella981
4年前
Spring Security学习笔记(三)
之前提到过认证后怎么存放用户信息,令牌_token_是一种方式,_session_是另一种方式,这里介绍使用_springsessiondataredis_存储_httpSession_。!(https://img2018.cnblogs.com/blog/486512/201809/4865122018092
Stella981 Stella981
4年前
Django REST framework JWT学习
1.JWT学习在用户注册或登录后,我们想记录用户的登录状态,或者为用户创建身份认证的凭证。我们不再使用Session认证机制,而使用JsonWebToken认证机制。Jsonwebtoken(JWT),是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC7519).该token被设计为紧凑且安全的,