代码之家  ›  专栏  ›  技术社区  ›  Stephane

如何在Kubernetes集群中创建用户?

  •  1
  • Stephane  · 技术社区  · 6 年前

    我正在尝试在Kubernetes集群中创建一个用户。

    我用我的一个地形脚本在DigitalOcean上旋转了两个水滴。

    ssh :

    doctl compute ssh droplet1
    

    kubectl create namespace thalasoft
    

    我在中创建了一个用户角色 role-deployment-manager.yml 文件:

    kind: Role
    apiVersion: rbac.authorization.k8s.io/v1beta1
    metadata:
      namespace: thalasoft
      name: deployment-manager
    rules:
    - apiGroups: ["", "extensions", "apps"]
      resources: ["deployments", "replicasets", "pods"]
      verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
    

    kubectl create -f role-deployment-manager.yml
    

    我在 rolebinding-deployment-manager.yml 文件:

    kind: RoleBinding
    apiVersion: rbac.authorization.k8s.io/v1beta1
    metadata:
      name: deployment-manager-binding
      namespace: thalasoft
    subjects:
    - kind: User
      name: stephane
      apiGroup: ""
    roleRef:
      kind: Role
      name: deployment-manager
      apiGroup: ""
    

    并执行命令: kubectl创建-f rolebinding-deployment-manager.yml

    这是我的终端输出:

    Last login: Wed Dec 19 10:48:48 2018 from 90.191.151.182
    root@droplet1:~# kubectl create namespace thalasoft
    namespace/thalasoft created
    root@droplet1:~# vi role-deployment-manager.yml
    root@droplet1:~# kubectl create -f role-deployment-manager.yml
    role.rbac.authorization.k8s.io/deployment-manager created
    root@droplet1:~# vi rolebinding-deployment-manager.yml
    root@droplet1:~# kubectl create -f rolebinding-deployment-manager.yml
    rolebinding.rbac.authorization.k8s.io/deployment-manager-binding created
    root@droplet1:~# 
    

    现在,我想首先在集群中创建一个用户,然后配置客户机 kubectl 使用此用户,以便从我的笔记本电脑进行操作,并避免通过 ssh̀ 到水滴。

    我知道我可以在中配置用户 库贝特尔 客户:

    # Create a context, that is, a user against a namespace of a cluster, in the client configuration
    kubectl config set-context digital-ocean-context --cluster=digital-ocean-cluster --namespace=digital-ocean-namespace --user=stephane
    
    # Configure the client with a user credentials
    cd;
    kubectl config set-credentials stephane --client-certificate=.ssh/id_rsa.pub --client-key=.ssh/id_rsa
    

    但据我所知,这只是一些客户端配置。

    # Create a private key
    openssl genrsa -out .ssh/thalasoft.key 4096
    # Create a certificate signing request
    openssl req -new -key .ssh/thalasoft.key -out .ssh/thalasoft.csr -subj "/CN=stephane/O=thalasoft"
    # Sign the certificate
    export CA_LOCATION=/etc/kubernetes/pki/
    openssl x509 -req -in .ssh/thalasoft.csr -CA $CA_LOCATION/ca.crt -CAkey $CA_LOCATION/ca.key -CAcreateserial -out .ssh/thalasoft.crt -days 1024
    
    # Configure a cluster in the client
    kubectl config set-cluster digital-ocean-cluster --server=https://${MASTER_IP}:6443 --insecure-skip-tls-verify=true
    
    # Configure a user in the client
    # Copy the key and the certificate to the client
    scp -o "StrictHostKeyChecking no" root@165.227.171.72:.ssh/thalasoft.* .
    # Configure the client with a user credentials
    kubectl config set-credentials stephane --client-certificate=.ssh/thalasoft.crt  --client-key=.ssh/thalasoft.key
    # Create a context, that is, a user against a namespace of a cluster, in the client configuration
    kubectl config set-context digital-ocean-context --cluster=digital-ocean-cluster --namespace=digital-ocean-namespace --user=stephane
    
    1 回复  |  直到 6 年前
        1
  •  6
  •   Community CDub    4 年前

    但据我所知,这只是一些客户端配置。

    我应该使用什么命令来创建用户?

    Kubernetes不提供用户管理。这是通过x509证书处理的,该证书可以由集群CA签名。

    首先,您需要创建一个密钥:

    openssl genrsa -out my-user.key 4096
    

    其次,您需要创建一个签名请求:

    openssl req -new -key my-user.key -out my-user.csr -subj "/CN=my-user/O=my-organisation"
    

    openssl x509 -req -in my-user.csr -CA CA_LOCATION/ca.crt -CAkey CA_LOCATION/ca.key -CAcreateserial -out my-user.crt -days 500
    

    ca.crt ca.key 是否由提供相同的证书/密钥 kubeadm 或者在主配置中。

    然后,您可以将此签名证书连同密钥一起提供给用户,然后可以通过以下方式配置访问:

    kubectl config set-credentials my-user --client-certificate=my-user.crt  --client-key=my-user.key
    kubectl config set-context my-k8s-cluster --cluster=cluster-name --namespace=whatever --user=my-user
    

    https://docs.bitnami.com/kubernetes/how-to/configure-rbac-in-your-kubernetes-cluster/#use-case-1-create-user-with-limited-namespace-access