在Kubernetes中为kubectl创建用户

jbe*_*nus 9 kubernetes kubectl

我需要创建用户为RBAC分配权限,我按如下方式创建它们:

echo -n "lucia" | base64
bHVjaWE=
echo -n "pass" | base64
cGFzcw==

apiVersion: v1
kind: Secret
metadata:
  name: lucia-secret
type: Opaque
data:
  username: bHVjaWE=
  password: cGFzcw==
Run Code Online (Sandbox Code Playgroud)

或创建:

kubectl create secret generic lucia-secret --from-literal=username='lucia',password='pass'
Run Code Online (Sandbox Code Playgroud)

我不知道如何继续

USER_NICK=lucia

kubectl config set-credentials $USER_NICK \
    --username=lucia \
    --password=pass

kubectl get secret lucia-secret -o json | jq -r '.data["ca.crt"]' | base64 -d > ca.crt

endpoint=`kubectl config view -o jsonpath="{.clusters[?(@.name == \"$name\")].cluster.server}"`

kubectl config set-cluster cluster-for-lucia \
  --embed-certs=true \
  --server=$endpoint \
  --certificate-authority=./ca.crt

kubectl config set-context context-lucia \
  --cluster=cluster-for-lucia \
  --user=$USER_NICK \
  --namespace=default
Run Code Online (Sandbox Code Playgroud)

ca.crt为null

谢谢您的帮助!

Jav*_*ron 13

在本指南中,您可以找到如何为群集配置用户:https://docs.bitnami.com/kubernetes/how-to/configure-rbac-in-your-kubernetes-cluster/#use-case-1-创建用户,用有限的命名空间访问

长话短说:

  • 为用户创建证书
  • 创建证书签名请求
  • 使用群集证书颁发机构对证书进行签名
  • 为您的用户创建配置
  • 为此用户或其组添加RBAC规则

关于ca.crt,您需要在主控主机中找到它.

编辑:如果是GKE,请点击此处https://cloud.google.com/container-engine/docs/iam-integration


小智 11

作为kubernetes的文档和文章,使用证书为kubectl客户端创建或认证用户。但是,有一种使用ServiceAccount的简单方法。可以将ServiceAccount作为一个组来使用,以提供RBAC控制身份验证,这非常容易且具有描述性。步骤如下。我正在执行的所有步骤都在default名称空间中。我将创建一个pod只读用户,该用户可以获取,列出和监视所有命名空间中的任何pod。

  • 创建一个ServiceAccount,说“ readonlyuser”。

    kubectl create serviceaccount readonlyuser

  • 创建集群角色,说“ readonlyuser”。

    kubectl create clusterrole readonlyuser --verb=get --verb=list --verb=watch --resource=pods

  • 创建集群角色绑定,说“ readonlyuser”。

    kubectl create clusterrolebinding readonlyuser --serviceaccount=default:readonlyuser --clusterrole=readonlyuser

  • 现在,从我们之前创建的ServiceAccount的秘密中获取令牌。我们将使用此令牌来验证用户。

    TOKEN=$(kubectl describe secrets "$(kubectl describe serviceaccount readonlyuser | grep -i Tokens | awk '{print $2}')" | grep token: | awk '{print $2}')

  • 现在,在kube配置文件中为用户设置凭据。我正在使用“ vikash”作为用户名。

    kubectl config set-credentials vikash --token=$TOKEN

  • 现在创建一个上下文,说podreader。我在这里使用我的集群名称“ kubernetes”。

    kubectl config set-context podreader --cluster=kubernetes --user=vikash

  • 最后使用上下文。

    kubectl config use-context podreader

就是这样。现在可以执行了kubectl get pods --all-namespaces。也可以通过执行以下命令检查访问权限:

~ : $ kubectl auth can-i get pods --all-namespaces
yes
~ : $ kubectl auth can-i create pods
no
~ : $ kubectl auth can-i delete pods
no
Run Code Online (Sandbox Code Playgroud)