Kubernetes 用户认证-证书签名请求

本文介绍了如何在Kubernetes中为普通用户创建证书签名请求(CSR),批准CSR,获取证书,并配置Role和RoleBinding以允许用户访问集群资源。流程包括生成私钥、CSR,批准CSR,创建角色和角色绑定,最后将凭据添加到kubeconfig。
摘要由CSDN通过智能技术生成

官方证书签名请求

一、创建私钥

普通用户

为了让普通用户能够通过认证并调用 API,需要执行几个步骤。 首先,该用户必须拥有 Kubernetes 集群签发的证书, 然后将该证书作为 API 调用的 Certificate 头或通过 kubectl 提供。

创建私钥

下面的脚本展示了如何生成 PKI 私钥和 CSR。 设置 CSR 的 CN 和 O 属性很重要。CN 是用户名,O 是该用户归属的组。 你可以参考 RBAC 了解标准组的信息。

openssl genrsa -out myuser.key 2048
openssl req -new -key myuser.key -subj "/CN=dms" -out myuser.csr

创建 CertificateSigningRequest

创建一个 CertificateSigningRequest,并通过 kubectl 将其提交到 Kubernetes 集群。 下面是生成 CertificateSigningRequest 的脚本。

cat <<EOF | kubectl apply -f -
apiVersion: certificates.k8s.io/v1
kind: CertificateSigningRequest
metadata:
  name: dms
spec:
  groups:
  - system:authenticated
  request: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0KTUlJQ1V6Q0NBVHNDQVFBd0RqRU1NQW9HQTFVRUF3d0RaRzF6TUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQwpBUThBTUlJQkNnS0NBUUVBdzRQTW1mWk9PYjdiZ2cvcVVCSWp0bzYrcmlBbTFMaGlwMjl2MjhJWEh1VXdOZE5jCm1yMk1MQW9xU3AySWpzOWQvQnFlcmNlc3g3OTJ2RGRqeXhSdDlwY0lZTHY2Vmw1cUx5R0ZJU1o5SjlwTmRpeGoKR2lHOUk3UjJFa2JRVEVpWkxnOUlMaGNOc3c3RmN0Z044SUx4Vk8yRldVNlFaejBxVjVLU3NkTkVodWJmR2pHeQpQblNONS9DNWZReVJNTkVmcXd4QTloQWloU2VlMkVMZjRmMW9WTklQd0FRQkxYbFAwN1o1WVBDRzE1NTdIZE93CkZVMnZDYXdxY2tHZ0pJZFNkR2YyMlczZzNZOGRMc1B2NEpNWWQwQUx0bjAyNFdJVSt0QVA3TzVCN1VNRndOYWcKSDVaTWNUcHY4U3ZVMXNqbk1LVHREVTd0RUdKZG03V0tabUczZFFJREFRQUJvQUF3RFFZSktvWklodmNOQVFFTApCUUFEZ2dFQkFCUUY0WUZmdlo3dURZMTJkbEVZM1NYZWJBQXpvYnZ6L3BkRnZBSkN4d0RjRVU1UWNGUHRiaEEyCkUyUXpsc2V6S01QK05ZNHJWWE5FUnlrRXBnQ0tWYitDanVsUjNKK0JpaUtyaTNRSHNiTXhnaGlpdTZyNlMrYlkKWWI1L2NBcGd3RWNtOU92WWc4UVl0TitTU2JycUFWQVg0ckJtYkEyZDdQYktOWWtaUStPaWd6N0tlTnFvckw3dAo0dngveVVXSlRKVkhrbXFVVjRpMC8vZElMLy9IcnVFL05EUzNVaWxFQUp4NjF4cEc0WWZYNDhlTGtTMnJ6V05YCmNBaTVLeHlIZWlCL2JqWm91RWhGVCtEYzl2WXlVZWpaVXZLMzYyd2hKNjd5dXVoM2xXSXNwUGhESTBGZUhQS3MKZ2JGQ0ZqdkhLMUhPTHNpSEl4dG04OGNRWXhQa3psND0KLS0tLS1FTkQgQ0VSVElGSUNBVEUgUkVRVUVTVC0tLS0tCg==
  signerName: kubernetes.io/kube-apiserver-client
  usages:
  - client auth
EOF

需要注意的几点:

  • usage 字段必须是 ‘client auth
  • request 字段是 CSR 文件内容的 base64 编码值。 要得到该值,可以执行命令 cat myuser.csr | base64 | tr -d "\n"

批准证书签名请求

使用 kubectl 创建 CSR 并批准。

获取 CSR 列表:

kubectl get csr

批准 CSR:

kubectl certificate approve myuser

取得证书

从 CSR 取得证书:

kubectl get csr/myuser -o yaml

证书的内容使用 base64 编码,存放在字段 status.certificate

从 CertificateSigningRequest 导出颁发的证书。

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

创建角色和角色绑定

创建了证书之后,为了让这个用户能访问 Kubernetes 集群资源,现在就要创建 Role 和 RoleBinding 了。

下面是为这个新用户创建 Role 的示例脚本:

kubectl create role developer --verb=create --verb=get --verb=list --verb=update --verb=delete --resource=pods

下面是为这个新用户创建 RoleBinding 的示例命令:

kubectl create rolebinding developer-binding-myuser --role=developer --user=dms

添加到 kubeconfig

最后一步是将这个用户添加到 kubeconfig 文件。 我们假设私钥和证书文件存放在 “/home/vagrant/work/” 目录中。

首先,我们需要添加新的凭据:

kubectl config --kubeconfig=/root/kubernetes/k8sconfig/csr/kubeconfig set-credentials dms --client-key=myuser.key --client-certificate=myuser.crt --embed-certs=true

然后,你需要添加上下文:

kubectl config --kubeconfig=/root/kubernetes/k8sconfig/csr/kubeconfig set-context dms --cluster=dms --user=dms

再添加集群信息

export KUBECONFIG_SAVED=192.168.11.128
kubectl config --kubeconfig=/root/kubernetes/k8sconfig/csr/kubeconfig \
set-cluster dms \
--server=https://$KUBECONFIG_SAVED:6443 \
--certificate-authority=/etc/kubernetes/pki/ca.crt \
--embed-certs=true

来测试一下,把上下文切换为 myuser

kubectl config use-context myuser
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值