K8S-用户认证
普通用户
https://kubernetes.io/zh/docs/reference/access-authn-authz/certificate-signing-requests/
为了让普通用户能够通过认证并调用 API,需要执行几个步骤。 首先,该用户必须拥有 Kubernetes 集群签名的证书, 然后将该证书作为 API 调用的证书头或通过 kubectl 提供出来。
创建私钥
下面的脚本展示了如何生成 PKI 私钥和 CSR。 设置 CSR 的 CN 和 O 字段很重要。CN 是用户名,O 是该用户归属的组。 你可以参考 RBAC 获取标准组的信息。
openssl genrsa -out john.key 2048
openssl req -new -key john.key -out john.csr
创建申请证书的 Kubernetes 对象
创建一个 CertificateSigningRequest,并通过 kubectl 将其提交到 Kubernetes 集群。 下面是生成 CertificateSigningRequest 的脚本。
cat <<EOF | kubectl apply -f -
apiVersion: certificates.k8s.io/v1beta1
kind: CertificateSigningRequest
metadata:
name: duoduo
spec:
groups:
- system:authenticated
request: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0KTUlJQzhEQ0NBZGdDQVFBd2ZURUxNQWtHQTFVRUJoTUNaR1F4RHpBTkJnTlZCQWdNQm1SMWIyUjFiekVQTUEwRwpBMVVFQnd3R1pIVnZaSFZ2TVE4d0RRWURWUVFLREFaa2RXOWtkVzh4RHpBTkJnTlZCQXNNQm1SMWIyUjFiekVQCk1BMEdBMVVFQXd3R1pIVnZaSFZ2TVJrd0Z3WUpLb1pJaHZjTkFRa0JGZ3BrZFc5a2RXOHVZMjl0TUlJQklqQU4KQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBdy81WjBhZVVwYVczMlZEUnRscnRJcm1rYlBscgpqVGFuZ0hpTXFkc2U5clRnS0MyOXo2VjMvcHppZ2tpUkxTU0YzYlc1Q3U2c1cxZlNUakRJSFI0MXUyYm5MMHNHCnV4V1lQNGlMSzFXUXpicGN6VDEvU0tJeFh4VHZtODFkd21MOU1PVjhwUkwva012RDh5YjIyV0pqelU3M0xYYmgKb21DWjNCaUVYYmMyblhwSnEwNWpxR1NvMHU4dUJ3Ykk0VjF6dllFRXEwdVl1aUZWQ01GeXpGalFRNXZ4M0tBcwpvbkV3eU1UMDk4RmNld0RPMmZLTTNQUmdHQTRjVjZnRDBSUWt5WlBQTFk1Yy8xa2JVbTJTRDZVT1RYNkZtV3NtCmlVSmM3MGJaaWFkdUdNU0ZuTENsa25TcmhmaXJmdGdqMHlxWjNBQXptcnVUNzBXTXZBMURLUUJ5YVFJREFRQUIKb0M0d0ZRWUpLb1pJaHZjTkFRa0NNUWdNQmpFeU16RXlNekFWQmdrcWhraUc5dzBCQ1FjeENBd0dNVEl6TVRJegpNQTBHQ1NxR1NJYjNEUUVCQ3dVQUE0SUJBUUE3Vy92L2pzc0hKZkV4WXhBTTJZRUhpd0g4aFIra0VZZDFNaE1wCjBwbW96L29TSm5YcVpLOXJSZEx3dCtNdkVyVFdKWVdTZnhCR2xPb09hTFZHS3B6QUp3RjJoR3htbWF4MzNlRloKb2dWTzVSaDVKUm4zOXlYdTZ6WjhMK1JEclpqd0lidWNhM0NNQXhvdlNxNXcwRXhtRDE5K1NvUmwySFlFbWkxVwpEaWFQYnIvVEV5QWVOcEkxaHg3eEZRZlhPN1I2dXJHdWFkNWVmZXl0N3FyU1l2dEgybkc0Wm9OSkNnTFhrVUxlCkU1ZTI3UTVZejlpbXlVTnRZbkovUEdDY2svSHpqVEpFQWZOQzdIc083dkpCUG5LWUdtTnVBL0pUSndmbVBJaFoKQkZkMEZQVHByc0RZNVdoMXJvOWREZmZkNkNTNjFLTGs3Z0lhalJTZkZZejZ4bUY3Ci0tLS0tRU5EIENFUlRJRklDQVRFIFJFUVVFU1QtLS0tLQo=
usages:
- client auth
EOF
需要注意的几点:
usage 字段必须是 ‘client auth’ request 字段是 CSR 文件内容的 base64 编码值。要得到该值,可以执行命令 cat john.csr | base64 | tr -d “\n” 。
批准证书请求
使用 kubectl 创建 CSR 并批准。
kubectl get csr
获取 CSR 列表
kubectl certificate approve john
取得证书
批准 CRS
kubectl get csr/john -o yaml
证书的内容使用 base64 编码,存放在字段 status.certificate。
创建角色和角色绑定
你已经拿到证书了。为了让这个用户能访问 Kubernetes 集群资源,现在就要创建 Role 和 Role Binding 了。
这是为这个新用户创建角色的示例脚本
kubectl create role developer --verb=create --verb=get --verb=list --verb=update --verb=delete --resource=pods
这是为这个新用户创建角色绑定的示例脚本
kubectl create rolebinding developer-binding-john --role=developer --user=john
添加到 KubeConfig
最后一步是将这个用户添加到 KubeConfig。 我们假设私钥和证书文件存放在 “/home/vagrant/work/” 目录中。
首先,我们需要添加新的凭据
kubectl config set-credentials john --client-key=/home/vagrant/work/john.key --client-certificate=/home/vagrant/work/john.crt --embed-certs=true
然后,我们需要添加上下文
kubectl config set-context john --cluster=kubernetes --user=john
来测试一下,把 kubecontext 切换为 john
kubectl config use-context john
更多推荐
所有评论(0)