Permission Controler-通过Instance理解Kubernetes的Auth

这一系列文档都是关于Kubernetes集群内部pods等资源对外部请求的认证与授权的管以及如何使用roles和role binding控制Kubernetes内部资源的访问权限。

  • Kubernetes Permission Controler概览

  • Permission Controler-通过Instance理解Kubernetes的Auth

  • Permission Controler-通过Instance理解Kubernetes的授权

  • Permission Controler-探索Kubernetes的Service Accounts

在生产环境中,Kubernetes管理员使用namespaces隔离集群上的资源。Namespaces在权限控制上扮演着资源的逻辑分界线的角色。

设想下面的应用场景:

运维team中新加入一位同事名字叫Bob,他的主要工作是管理工程师组在Kubernetes上的部署工作。因此运维组的老大必须授权Bob操作engineering namesapces足够的权限。

下面的实验操作是发生在我的私人Kubernetes集群上,你可以使用具有Kubernetes集群最高权限的任何集群资源上完成下面的实验。

  1. 创建名为cred的文件夹,然后通过下面的命令为Bob生成私钥。

mkdir cred
cd cred
openssl genrsa -out bob.key 2048
  1. 使用私钥生成一个认证签名请求文件

openssl req -new -key bob.key -out bob.csr -subj "/CN=bob/O=eng"\n
  1. 查看认证签名文件

  1. 创建Kubernetes Certificate Signing Request的signing-request.yaml文件,然后将认证签名文件作base64编码后插入到yaml文件中,最后通过命令创建Certificate Signing Request资源。

  1. 验证 Certificate Signing Request (CSR) 资源是否生成

从上图可见csr资源对应的状态仍然是Pending,集群管理员使用approve命令使其变成active

  1. 将csr资源的状态变更为Active

从上图可见csr资源已经变成Approved,Issued状态

  1. 获取认证的签名信息

上面的bob.crt文件是用来对Bob进行认证和授权的文件。我们从Kubernetes中获得bob.key私钥文件和bob.crt认证文件后,我们就可以对bob账户做授权工作了。

  1. 将Bob添加为Kubernetes集群用户

通过上面命令可见bob用户已经添加到Kubernetes集群中

  1. 创建engineering namesapce

  1. 验证

  • 验证kubernets admin管理员是否有操作engineering namespace的资源

  • 验证bob管理员是否有操作engineering namespace的资源

明显可见Bob还不能操作enginering namespace的资源。这是为什么?

即便我们对Bob做关于Kubernetes集群访问的认证,但是我们并没有对Bob授权操作Kubernets资源的行为。

在这一系列文章的下一章节中,我将带你对bob用户授权操作Kubernetes资源的行为。这主要是关于 role和role binding的知识,继续加油哦!

文章翻译自A Practical Approach to Understanding Kubernetes Authentication ,行文略有删减。

Last updated

Was this helpful?