k8s创建普通用户

创建私钥 

        下面的脚本展示了如何生成 PKI 私钥和 CSR。 设置 CSR 的 CN 和 O 属性很重要。CN 是用户名,O 是该用户归属的组。

  • CN : common name  名字
  • O : orgnization 组
openssl genrsa -out myuser.key 2048
openssl req -new -key myuser.key -out myuser.csr -subj "/CN=myuser/O=myo"

创建 CertificateSigningRequest 

        创建一个 CertificateSigningRequest,并通过 kubectl 将其提交到 Kubernetes 集群
k8s-v1.15.1的yaml文件如下,其他版本可先用kubectl api-versions查询一下,往上的版本apiVersion应为certificates.k8s.io/v1,然后需要加上signerName

apiVersion: certificates.k8s.io/v1beta1
kind: CertificateSigningRequest
metadata:
  name: myuser
spec:
  groups:
  - system:authenticated
  request: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0KTUlJQ1pEQ0NBVXdDQVFBd0h6RVBNQTBHQTFVRUF3d0diWGwxYzJWeU1Rd3dDZ1lEVlFRS0RBTnRlVzh3Z2dFaQpNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUJEd0F3Z2dFS0FvSUJBUUN2NXVzc2ROZmU2K2ZMdWloNDBBSmVsa0F0CkZZSFBaSmxVbUcyVTJaTlpSZ2RlSmtMcHErV2RNMW5qZ0VjM3NmZEhNRXhhVnhiNWVRQU5IanhRUGdrakhvU2QKeEUyd2hTYVZSU1c5M2xrWkZRVFZUVGwvdDhreUYxbTNURktsdVQ4M3JVaFhMSjJURU44Qjk4cDcxTU5nb3JGawo3Ri9FTEJsck5Gc2U4Y08ycXVkb3Z2ZlNGL3dBV1VoSkMyaUlzazk0bStzTTRXNU56bHNjV3A1SlFyNlV6Wm9vCmVvczNNUi9sSDdzVVArbDZtM0d6Q2dnQnZjT3lPYi9lUzFoUC9SU1ZQbzdrS3pDajg3RlpLOU95QVhxaGVMbjcKZmdHeDFFYnA0WkVlMVRlWWhscVh3dFE5c1h5am9LWGtmSk81cWlKQkJwVDRsYjNqeXd2OXowV3FLZkYxQWdNQgpBQUdnQURBTkJna3Foa2lHOXcwQkFRc0ZBQU9DQVFFQUhGZEV2enkvd0xySUMwaEs4S3k0V1M2ZjZ0UVZaMnN4CnVRMjlyQm5PcXFueERyRzljMDJSRklCS1ZpQTU0Ymhjci90Q0VFWllZRzg0UjhCT3N0YS9kamN3SEtod3FaaDEKNmtlM3JlbEFNMG93VmtUdGIwR1NUSjI5VVJOVVlPdVJkSkdwR2dWR1RPU09jSm4yYTNnSEwveXhuY01nQXFabgpBMGZDc2hRSnhKc3ZJQzh2QUhnM1lJTWlidHNUZGhJdHV0ZGp4RCtUaDlSNitkZ2RPeExuejNaY0U1VUpCOGltCkY0Z3dVUGpTUVVROUtqMnkrSXJyVzdXcGUwRStXR3pmWndKV0djaTVWQnJ2a3FVcTM3M1RuQUE3dW5LN1V0TmYKYnF6djJpY2grcnl3QlVQNldBTUpvckRtbXd4VTFJekFzem9lSjNMdXJ2eUVCMjlwR3l4eTBBPT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUgUkVRVUVTVC0tLS0tCg==
  #signerName: kubernetes.io/kube-apiserver-client
  usages:
  - client auth

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

应用到集群

kubectl apply -f myuser.yaml

批准证书签名请求 

获取 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=myuser

添加到 kubeconfig 
最后一步是将这个用户添加到 kubeconfig 文件。

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

kubectl config set-credentials myuser --client-key=myuser.key --client-certificate=myuser.crt --embed-certs=true

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

首先需要查询集群名称:

kubectl config get-clusters

NAME
cluster.local

添加上下文: 

kubectl config set-context myuser --cluster=cluster.local --user=myuser

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

kubectl config use-context myuser

kubectl config的其他命令可用--help查看
 

kubectl config --help
Modify kubeconfig files using subcommands like "kubectl config set current-context my-context"

 The loading order follows these rules:

  1.  If the --kubeconfig flag is set, then only that file is loaded. The flag may only be set once and no merging takes
place.
  2.  If $KUBECONFIG environment variable is set, then it is used as a list of paths (normal path delimiting rules for
your system). These paths are merged. When a value is modified, it is modified in the file that defines the stanza. When
a value is created, it is created in the first file that exists. If no files in the chain exist, then it creates the
last file in the list.
  3.  Otherwise, ${HOME}/.kube/config is used and no merging takes place.

Available Commands:
  current-context 显示 current_context
  delete-cluster  删除 kubeconfig 文件中指定的集群
  delete-context  删除 kubeconfig 文件中指定的 context
  get-clusters    显示 kubeconfig 文件中定义的集群
  get-contexts    描述一个或多个 contexts
  rename-context  Renames a context from the kubeconfig file.
  set             设置 kubeconfig 文件中的一个单个值
  set-cluster     设置 kubeconfig 文件中的一个集群条目
  set-context     设置 kubeconfig 文件中的一个 context 条目
  set-credentials 设置 kubeconfig 文件中的一个用户条目
  unset           取消设置 kubeconfig 文件中的一个单个值
  use-context     设置 kubeconfig 文件中的当前上下文
  view            显示合并的 kubeconfig 配置或一个指定的 kubeconfig 文件

Usage:
  kubectl config SUBCOMMAND [options]

Use "kubectl  --help" for more information about a given command.
Use "kubectl options" for a list of global command-line options (applies to all commands).

参考

证书签名请求 | Kubernetes

用户认证 | Kubernetes

你可能感兴趣的:(k8s,k8s,user)