写点什么

Kubernetes 身份认证和授权操作全攻略:上手操作 Kubernetes 身份认证

2020 年 5 月 16 日

Kubernetes身份认证和授权操作全攻略:上手操作Kubernetes身份认证

这是本系列文章的第二篇,在上篇文章中我们介绍了Kubernetes访问控制。在本文中,我们将通过上手实践的方式来进一步理解身份认证的概念。


在生产环境中,Kubernetes 管理员使用命名空间来隔离资源和部署。命名空间作为一个逻辑边界来强制基本访问控制。


假设现在我们有个新的管理员叫 Bob,要加入开发团队为研发组管理 Kubernetes 部署。我们现在需要给他提供足够的访问权限以便于他管理工程命名空间。假设你是集群管理员并且拥有管理全局资源和对象的权限,你需要登上 Bob 的账户并帮助他获取访问 Kubernetes 集群所需的凭据。


我在操作中使用的是 Minikube,但本文示例的场景适用于任何使用其他方式配置的 Kubernetes 集群(只要你是集群管理员身份就行)。


首先,创建一个名为 cred 的目录,并运行以下命令为 Bob 生成一个私钥。


mkdir credcd cred
复制代码


openssl genrsa -out bob.key 2048Generating RSA private key, 2048 bit long modulus..................................................................................................................+++................................................+++e is 65537 (0x10001)
复制代码


我们还需要一个可以从私钥生成的证书签名请求。


openssl req -new -key bob.key -out bob.csr -subj "/CN=bob/O=eng"\n
复制代码


将密钥移动到父级文件夹并在 Base64 中对其进行编码。


cp bob.key ..cd ..cat cred/bob.csr | base64 | tr -d '\n'LS0tLS1CRUdJTiBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0KTUlJQ1lqQ0NBVW9DQVFBd0hURU1NQW9HQTFVRUF3d0RZbTlpTVEwd0N3WURWUVFLREFSbGJtZHVNSUlCSWpBTgpCZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUEzSU9oUTArMFJUakpqZjBKTkd2Rmo0YWFlN1hYCkkrZWkzTzZWTEpqMHNKNDBvengyUTVndXBmeFc5b0lEYTJETnhVZjZkNHVMOUJ3V2lhdFdQdnBDNm80MHJQc2EKTjBUdEhEekFYeWppc0E5VXVRMVNKMWg5Mkg0TU9XWEpWNWJWaTlXYjBKU3hLbXVrSUVtaERJcW9TcEh6MU5xaApQMWNXOFFpNXpoVVBmWlpnOUhSaWVUQ2xEMmR3bWRtS1JjbU9uenNGVWhJWmZWanVZNzZJUm9KbksyaHNzVjZoCmMyY1JNTVNEdFA0ZDArYkxOY1BKdExpS3JjQkdwUGxLUEdrSHovM2NNbVhpVi8wY2xqUlppMzJCb3B4NlI1NUIKc0Z6cXZwcWgzNWxLNUVOUGxPZy9sdURFdllGeUtzOUY2aERBRFhDNzQxU0ZCQTI0TERzcTFiWWtVUUlEQVFBQgpvQUF3RFFZSktvWklodmNOQVFFTEJRQURnZ0VCQUxTejgxL2N3bjQxbVRrUDhabWhhUUx3MkpIRkN4ZUlaOFdpCkZOV0U1cnRVd3hrSjJGWVJKRlFUL1hJN0FoL0pXTkhqeHlhOUNyN3c0OThmanN3bDF2ZzQ1QUgrR29DeVEwTWkKOU1MMHl0WmZyaG5jYmtpRG9oSUpuaWhJTjlCUGpHVkw2SG1USytGc0sybG1ZZ1JDdk9Cclg3Rkh6ZjgwM0ZFNAp4ZkgrZlFsdGxDdEZTSEhuaUlzZTFEQ2J4cFVTdnRISXpYMFcyb2hXV3RPVkRpOTAzOW8zY2VaWmdVK3VRYno0Cmp2djJoeVdRNDhORFl3RWF1UUU2S3NBQTFLT0IyUkI2dE45bjFTVWoxU1B2WnBsQkVieDZ5MTkzaUJSVFJRM2wKM2JhdFRNUUEzelBsdk01ZEE2Vy8rQWcwVm0xMk1SR091VFRLSEU2bE5INE1DbHQvRGZZPQotLS0tLUVORCBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0K
复制代码


我们需要将生成的 base64 编码的字符串嵌入到 YAML 文件中,并将其作为证书签名请求提交给 Kubernetes。这一步骤基本上可以将 Bob 的私钥与 Kubernetes 集群相关联。


apiVersion: certificates.k8s.io/v1beta1kind: CertificateSigningRequestmetadata:  name: bob-csrspec:  groups:  - system:authenticated   request: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0KTUlJQ1lqQ0NBVW9DQVFBd0hURU1NQW9HQTFVRUF3d0RZbTlpTVEwd0N3WURWUVFLREFSbGJtZHVNSUlCSWpBTgpCZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUEzSU9oUTArMFJUakpqZjBKTkd2Rmo0YWFlN1hYCkkrZWkzTzZWTEpqMHNKNDBvengyUTVndXBmeFc5b0lEYTJETnhVZjZkNHVMOUJ3V2lhdFdQdnBDNm80MHJQc2EKTjBUdEhEekFYeWppc0E5VXVRMVNKMWg5Mkg0TU9XWEpWNWJWaTlXYjBKU3hLbXVrSUVtaERJcW9TcEh6MU5xaApQMWNXOFFpNXpoVVBmWlpnOUhSaWVUQ2xEMmR3bWRtS1JjbU9uenNGVWhJWmZWanVZNzZJUm9KbksyaHNzVjZoCmMyY1JNTVNEdFA0ZDArYkxOY1BKdExpS3JjQkdwUGxLUEdrSHovM2NNbVhpVi8wY2xqUlppMzJCb3B4NlI1NUIKc0Z6cXZwcWgzNWxLNUVOUGxPZy9sdURFdllGeUtzOUY2aERBRFhDNzQxU0ZCQTI0TERzcTFiWWtVUUlEQVFBQgpvQUF3RFFZSktvWklodmNOQVFFTEJRQURnZ0VCQUxTejgxL2N3bjQxbVRrUDhabWhhUUx3MkpIRkN4ZUlaOFdpCkZOV0U1cnRVd3hrSjJGWVJKRlFUL1hJN0FoL0pXTkhqeHlhOUNyN3c0OThmanN3bDF2ZzQ1QUgrR29DeVEwTWkKOU1MMHl0WmZyaG5jYmtpRG9oSUpuaWhJTjlCUGpHVkw2SG1USytGc0sybG1ZZ1JDdk9Cclg3Rkh6ZjgwM0ZFNAp4ZkgrZlFsdGxDdEZTSEhuaUlzZTFEQ2J4cFVTdnRISXpYMFcyb2hXV3RPVkRpOTAzOW8zY2VaWmdVK3VRYno0Cmp2djJoeVdRNDhORFl3RWF1UUU2S3NBQTFLT0IyUkI2dE45bjFTVWoxU1B2WnBsQkVieDZ5MTkzaUJSVFJRM2wKM2JhdFRNUUEzelBsdk01ZEE2Vy8rQWcwVm0xMk1SR091VFRLSEU2bE5INE1DbHQvRGZZPQotLS0tLUVORCBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0K    usages:  - digital signature  - key encipherment  - server auth
复制代码


kubectl create -f signing-request.yamlcertificatesigningrequest.certificates.k8s.io/bob-csr created
复制代码


使用以下 kubectl 命令验证 CSR:


kubectl get csrNAME      AGE   REQUESTOR       CONDITIONbob-csr   41s   minikube-user   Pending
复制代码


请注意,请求此时依旧处于 pending 状态。集群管理员需要批准它,才会变成 active 状态。


kubectl certificate approve bob-csrcertificatesigningrequest.certificates.k8s.io/bob-csr approved
复制代码


kubectl get csrNAME      AGE    REQUESTOR       CONDITIONbob-csr   104s   minikube-user   Approved,Issued
复制代码


既然证书已经批准并发布,我们需要从集群中获取签名证书。这是登录 Bob 账户最关键的一步。


kubectl get csr bob-csr -o jsonpath='{.status.certificate}' | base64 --decode > bob.crt
复制代码


bob.crt 这一文件是用于 Bob 身份认证的客户端证书。我们现在拥有 Kubernetes 的私钥(bob.key)和批准的证书(bob.crt)。只要 Bob 拥有这两个凭据,他就可以通过集群进行身份认证。


那么,现在就可以将 Bob 作为用户添加到 Kubernetes 中。


kubectl config set-credentials bob --client-certificate=bob.crt --client-key=bob.keyUser "bob" set.
复制代码


打开 ~/.kube/config 文件确认凭据已经设置完成。



让我们创建一个名为 engineering 的新命名空间,Bob 是其管理员。


kubectl create namespace engineeringnamespace/engineering created
复制代码


kubectl get namespaceNAME              STATUS   AGEdefault           Active   37mengineering       Active   0skube-node-lease   Active   37mkube-public       Active   37mkube-system       Active   37m
复制代码


kubectl CLI 以 auth 的形式提供了非常有用的开关,可以验证特定用户的权限。让我们检查一下当前的管理员用户是否可以访问 engineering 命名空间。鉴于您集群管理员的身份,因此可以轻易看到输出结果。


 kubectl auth can-i list pods --namespace engineeringyes
复制代码


我们也能够检查 Bob 能否访问 engineering 命名空间。


kubectl auth can-i list pods --namespace engineering --as bobno
复制代码


很显然,Bob 无法访问命名空间,这是因为我们创建了凭据但是没有明确授权 Bob 对任何对象进行任何特定的动作。


在下一篇文章中,我将引导您完成授权 Bob 的所有步骤。同时,还会介绍角色以及角色绑定。保持关注哟~


2020 年 5 月 16 日 17:18130

评论

发布
暂无评论
发现更多内容

800页PPT搞懂阿里技术及生态全貌,“未入阿里,知根知底”

周老师

Java 编程 程序员 架构 面试

linux入门系列20--Web服务之LNMP架构实战

黑马腾云

php MySQL Linux centos ngnix

ARTS Week9

丽子

ARTS 打卡计划

巧用HashMap一行代码统计单词出现次数

程序那些事

jdk hashmap 统计字数

架构师第十二周学习总结

傻傻的帅

避免栽坑之掌握Jenkins工作原理

清菡

jenkins

当“基本功”数据结构与算法被图形分解,要还不会就真的没办法了

周老师

Java 编程 程序员 架构 面试

Go: ElasticSearch客户端学习

陈思敏捷

go golang elasticsearch elastic go-elasticsearch

什么是分散式金融(DeFi)?

志学Python

去中心化金融 defi

视频AI第一步-动作识别数据集

flow

二叉树深度和大文件排序

escray

学习 面试 面试题 面试现场

oeasy教您玩转linux010108到底哪个which

o

linux入门系列16--文件共享之Samba和NFS

黑马腾云

Linux centos linux运维 Samba NFS

央行数字货币钱包上线后又秒关 兑换了的 DCEP 别担心

CECBC区块链专委会

数字货币 央行

图解Node(上)——直击灵魂的十条拷问

执鸢者

前端 原理 Node

linux入门系列17--邮件系统之Postfix和Dovecot

黑马腾云

Linux centos Dovecot Postfix 邮件系统

Python作业留底--《菜鸟教程》Python 练习和习题

Geek_f6bfca

算法导论

华宇法律科技

算法

Android | dagger细枝篇

哈利迪

android

架构师第十二周作业

傻傻的帅

更新丢失、写偏、幻读:数据库事务从快照隔离到可序列化

青菜年糕汤

数据库 数据库事务 分布式数据库 数据库设计 分布式系统

JVM的早期优化与晚期优化

Edison

JVM JVM虚拟机原理

打通微信和钉钉服务是一种怎样的体验?

Ceelog

go 微信 钉钉 微信公众号

搬家,又一次和过往告别

王磊

程序人生

比特币挖矿到底挖的是什么?

CECBC区块链专委会

比特币 区块链 数字货币

基于区块链的社会治理探索

CECBC区块链专委会

区块链 大数据 信息技术

增量了两个私有网络之后的对比

孙朝辉🐢

linux入门系列18--Web服务之Apache服务1

黑马腾云

Linux centos apche linux运营 centos网站部署

linux入门系列18--Web服务之Apache服务2

黑马腾云

Apache Linux centos linux运维

linux入门系列19--数据库管理系统(DBMS)之MariaDB

黑马腾云

MySQL Linux centos linux运维 MariaDB

Flink-有状态算子的扩缩容-12

小知识点

scala 大数据 flink

2021年全国大学生计算机系统能力大赛操作系统设计赛 技术报告会

2021年全国大学生计算机系统能力大赛操作系统设计赛 技术报告会

Kubernetes身份认证和授权操作全攻略:上手操作Kubernetes身份认证-InfoQ