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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Kubernetes 中,API Server 是集群中的控制中心,所有的 Kubernetes API 调用都通过 API Server 进行。API Server 认证是 Kubernetes 中非常重要的一环,它确保了只有经过身份验证的用户才能够访问 Kubernetes API,并限制了用户能够访问的资源和操作。 Kubernetes 支持多种认证方式,例如 X.509 证书、Token、基于 HTTP Header 的认证等。下面我们以 X.509 证书认证为例,介绍如何启用 API Server 认证: 1. 生成证书和私钥 首先,需要使用 OpenSSL 工具生成证书和私钥。可以使用以下命令生成一个自签名的证书和私钥: ``` openssl req -new -newkey rsa:2048 -days 365 -nodes -x509 -keyout tls.key -out tls.crt -subj "/CN=kube-apiserver" ``` 该命令生成一个有效期为 365 天的自签名证书和私钥,可以使用 -subj 参数指定证书的主题(这里指定为 kube-apiserver)。 2. 配置 API Server 启用 API Server 认证需要在 kube-apiserver 的启动参数中添加以下配置项: ``` --tls-cert-file=<path/to/tls.crt> --tls-private-key-file=<path/to/tls.key> --client-ca-file=<path/to/ca.crt> --authentication-mode=x509 ``` 其中,--tls-cert-file 和 --tls-private-key-file 分别指定 TLS 证书和私钥的路径,--client-ca-file 指定用于验证客户端证书的 CA 证书的路径,--authentication-mode 设置认证方式为 x509。 3. 配置 kubectl 为了使用证书进行认证,需要在 kubectl 的配置文件中添加以下配置项: ``` apiVersion: v1 kind: Config clusters: - name: my-cluster cluster: certificate-authority: /path/to/ca.crt users: - name: my-user user: client-certificate: /path/to/tls.crt client-key: /path/to/tls.key contexts: - name: my-context context: cluster: my-cluster user: my-user current-context: my-context ``` 其中,certificate-authority 指定用于验证服务器证书的 CA 证书的路径,client-certificate 和 client-key 分别指定客户端证书和私钥的路径。 4. 测试认证 完成上述步骤后,可以使用 kubectl 命令测试认证是否生效。例如,使用以下命令查看所有的 Pod: ``` kubectl get pods ``` 如果认证配置正确,则应该能够成功列出 Pod。如果认证失败,则会提示需要提供证书和私钥。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值