Kubernetes技术栈
  • 序章
  • Kubernetes 架构快速了解
  • 十分钟带你了解什么是kubernetes
  • 如何快速了解Kubernetes架构
  • 企业级镜像私有仓库Harbor
  • 二进制分布式安装Kubernetes1.13.10
    • 准备工作
  • 使用Kubeadm安装Kubernetes1.13.10
    • 准备工作
    • 基础环境设置
    • 安装高可用
    • 安装负载均衡
    • 安装Docker (Master/Node)
    • yum源安装kubeadm
    • Initialize第一个kubernetes master
    • 配置flannel组件
    • 加入集群
    • 配置dashboard
    • Master参与负载工作
    • 集群删除Node
  • Kubernetes 1.15.2 部署 Traefik2.0
  • Kubernetes1.15.2 监控(1)安装 Prometheus 2.11.1
  • Kubernetes 1.15.2监控(2)Monitor集群组件和PODS
  • kubernetes日志管理最佳实践EFK
  • Kubernetes1.15.2使用Ceph集群部署
  • Kubernetes1.15.2 中安装 jenkins 2.0
  • Kubernetes1.15.2使用jenkins 动态 slave
  • 什么是nginx-ingress控制器
  • Kubernetes Permission Controler概览
  • Permission Controler-通过Instance理解Kubernetes的Auth
  • Permission Controler-通过Instance理解Kubernetes的授权
  • Permission Controler-探索Kubernetes的Service Accounts
  • Kubernetes与Istio微服务架构
  • Kubernetes必须知道的HELM
Powered by GitBook
On this page

Was this helpful?

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. 查看认证签名文件

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

cat >> signing-request.yaml <<EOF
apiVersion: certificates.k8s.io/v1beta1
kind: CertificateSigningRequest
metadata:
  name: bob-csr
spec:
  groups:
  - system:authenticated

  request: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0KTUlJQ1lqQ0NBVW9DQVFBd0hURU1NQW9HQTFVRUF3d0RZbTlpTVEwd0N3WURWUVFLREFSbGJtZHVNSUlCSWpBTgpCZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUF3amJvYldWeHFVd21kUS85SW50T01kNXBieUJtCjZPSEt2aDRsSm5DMEgrNVVWNXNGYUJhMm1TdFVFdG1ENGRuUk0zcFdBUVBPUEdQditaY1NCc1N5QmhYdmswY1kKNGJXcWRLRGdUMnpTWEoyemxTVFdlTUJBcFZwWFBseGRLRE80bXk5YWtjbFFUVmE2ZnJadU5MQTNBQnBBTGxxLwowY05Id0tlVkpGVlJoN0l2bzZ4VlZVY0wyN21YK3ZoMmpjZGZKZkU1bG5lQXRXT2xDL05IZE9TUzhuR3JEcCtUCmhJamI5Q0p4Ty90N3VLWUJOMWM2SG1qRUowTkc2cDZhaVRhZWZiYllONmVhVllOUVdWT2hYNFlqQWNTRWp6clUKOCtrd2drZ2h2YjFtNmV0OHQ3VUYzRlJzNDNiU0xrbExPVDBVUGd1MlRQN3RVajM1WlJweHY5ZUQ1UUlEQVFBQgpvQUF3RFFZSktvWklodmNOQVFFTEJRQURnZ0VCQUdFeTRCZS9vRDlUZ1p0V1hvM2FGNkxwUkpsZGtMYWJBbFE4CkdjVGJ1dlhwNmt4ODhDT0NwZjhIb2tMbEgzeiswajZjWktMUFZIVHdzdzJnbmNJbjBCM0RvL3U3dDlWT0d3RVEKaHpzd0cxSFI3VjUrZ1VEMzdmeXc3MGhZUFg0cGlCbncyNWJqLzljR2ViYTQwTjNqNjBHaUVrWlpUa0JUSzNRVApNWmdTMjB4S1UzS0RIOWJENkFJZlQvbUxXRkRRQURKekhVMm9UQ2hqK3JiUlgwYU5qazJVck42dWNqMEx0T0tlCjdoMWJ4YVJjU3BEcDhTWkhYODRwcWY1eVFFWEJ5dEt0ZjF5T3dBK2tCVldPdS81SkJWQVpQTmRyVElKR2g4RmEKbjF0S0E4RngyYStLdkN2b2txQjlrYzFVQ3U0d2QyRHVncWJKUmhwUGRiaStSM3htenlzPQotLS0tLUVORCBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0K

  usages:
  - digital signature
  - key encipherment
  - server auth
> EOF
kubectl apply -f signing-request.yaml
  1. 验证 Certificate Signing Request (CSR) 资源是否生成

kbuectl get csr

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

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

kubectl certificate approve bob-csr

kubectl get csr

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

  1. 获取认证的签名信息

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

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

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

kubectl config set-credentials bob --client-certificate=bob.crt --client-key=bob.key

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

  1. 创建engineering namesapce

kubectl create namespace enginerging
  1. 验证

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

kubectl auth can-i list pods --namespace engineering

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

kubectl auth can-i list pods --namespace engineering --as bob

no

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

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

PreviousKubernetes Permission Controler概览NextPermission Controler-通过Instance理解Kubernetes的授权

Last updated 5 years ago

Was this helpful?

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

文章翻译自 ,行文略有删减。

授权操作Kubernetes资源的行为
A Practical Approach to Understanding Kubernetes Authentication