如何创建用户并限制用户只能访问Kubernetes中的一个名称空间?Kubernetes通过基于角色的访问控制(RBAC)功能为您提供了一种基于单个用户的角色来规范对Kubernetes集群和资源的访问。先决条件是一个正在运行的Kubernetes集群,参考使用Ansible和Kubespray部署生产就绪Kubernetes集群的步骤。
在Kubernetes中创建服务帐户并将其限制为名称空间 步骤1:创建名称空间 首先,创建一个将用于此演示的名称空间: $ kubectl create namespace demo namespace/demo created $ kubectl get namespaces
步骤2:建立服务帐户 我们将在演示名称空间中创建一个名为demo-user的服务帐户: cat <<EOF | kubectl apply -f - apiVersion: v1 kind: ServiceAccount metadata: name: demo-user namespace: demo EOF 您将得到如下输出: serviceaccount/demo-user created 步骤3:建立角色 如前所述,角色包含代表一组权限的规则,这些权限授予对命名空间中资源的访问权限。 首先确认Kubernetes集群中可用的RBAC的API版本: $ kubectl api-versions| grep rbac rbac.authorization.k8s.io/v1 rbac.authorization.k8s.io/v1beta1 让我们创建一个角色,该角色将为创建的帐户提供对命名空间资源的完全访问权限: cat <<EOF | kubectl apply -f - kind: Role apiVersion: rbac.authorization.k8s.io/v1 metadata: name: admin namespace: demo rules: - apiGroups: ["", "extensions", "apps"] resources: ["*"] verbs: ["*"] - apiGroups: ["batch"] resources: - jobs - cronjobs verbs: ["*"] EOF 确认创建: $ kubectl get roles -n demo NAME AGE admin 94s 也可以在对名称空间中的资源的访问受限的情况下创建角色,例如: cat <<EOF | kubectl apply -f - kind: Role apiVersion: rbac.authorization.k8s.io/v1 metadata: namespace: demo name: deployment-admin rules: - apiGroups: ["", "extensions", "apps"] resources: ["deployments", "replicasets", "pods", "services", "ingresses"] verbs: ["get", "list", "watch", "create", "update", "patch", "delete"] # You can also use ["*"] EOF 步骤4:将角色绑定到用户 现在我们已经创建了用户帐户和角色,我们可以继续将角色绑定到用户: cat <<EOF | kubectl apply -f - kind: RoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: admin-view namespace: demo subjects: - kind: ServiceAccount name: demo-user namespace: demo roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: admin EOF 确认: $ kubectl get rolebindings --namespace demo NAME AGE admin-view 30s 检查用户令牌名称: $ kubectl describe sa demo-user -n demo
获取用于在仪表板上或通过kubectl命令行访问Kubernetes的服务帐户令牌: export NAMESPACE="demo" export K8S_USER="demo-user" kubectl -n ${NAMESPACE} describe secret $(kubectl -n ${NAMESPACE} get secret | (grep ${K8S_USER} || echo "$_") | awk '{print $1}') | grep token: | awk '{print $2}'\n 参考:安装及使用kubectl、kubectx和kubens轻松管理多个Kubernetes集群。 我的输出是:
获取证书数据: kubectl -n ${NAMESPACE} get secret `kubectl -n ${NAMESPACE} get secret | (grep ${K8S_USER} || echo "$_") | awk '{print $1}'` -o "jsonpath={.data['ca\.crt']}" 我的输出:
步骤5:创建kubectl配置 如果要使用获得的凭据来配置kubectl,它将类似于以下内容: $ cat .kube/config
让我们确认它是否有效: $ kubectl get secrets $ kubectl get nodes
我们还可以创建测试部署: cat <<EOF | kubectl apply -f - apiVersion: v1 kind: Pod metadata: name: busybox-sleep spec: containers: - name: busybox image: busybox args: - sleep - "1000000" --- apiVersion: v1 kind: Pod metadata: name: busybox-sleep-less spec: containers: - name: busybox image: busybox args: - sleep - "1000" EOF 确认和清理: $ kubectl get pods $ for i in busybox-sleep-less busybox-sleep; do kubectl delete pod $i; done
到这里,操作完成。
相关主题 |