云网牛站
所在位置:首页 > Linux云服务器 > 创建限于一个命名空间的Kubernetes服务/用户帐户

创建限于一个命名空间的Kubernetes服务/用户帐户

2020-02-02 21:21:07作者:夏俊稿源:云网牛站

如何创建用户并限制用户只能访问Kubernetes中的一个名称空间?Kubernetes通过基于角色的访问控制(RBAC)功能为您提供了一种基于单个用户的角色来规范对Kubernetes集群和资源的访问。先决条件是一个正在运行的Kubernetes集群,参考使用Ansible和Kubespray部署生产就绪Kubernetes集群的步骤

 

在Kubernetes中创建服务帐户并将其限制为名称空间

步骤1:创建名称空间

首先,创建一个将用于此演示的名称空间:

$ kubectl create namespace demo   

namespace/demo created

$ kubectl get namespaces

创建限于一个命名空间的Kubernetes服务/用户帐户

步骤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

创建限于一个命名空间的Kubernetes服务/用户帐户

获取用于在仪表板上或通过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集群

我的输出是:

创建限于一个命名空间的Kubernetes服务/用户帐户

获取证书数据:

kubectl  -n ${NAMESPACE} get secret `kubectl -n ${NAMESPACE} get secret | (grep ${K8S_USER} || echo "$_") | awk '{print $1}'` -o "jsonpath={.data['ca\.crt']}"

我的输出:

创建限于一个命名空间的Kubernetes服务/用户帐户

步骤5:创建kubectl配置

如果要使用获得的凭据来配置kubectl,它将类似于以下内容:

$ cat .kube/config

创建限于一个命名空间的Kubernetes服务/用户帐户

让我们确认它是否有效:

$ kubectl get secrets

$ kubectl get nodes

创建限于一个命名空间的Kubernetes服务/用户帐户

我们还可以创建测试部署:

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 

创建限于一个命名空间的Kubernetes服务/用户帐户

到这里,操作完成。

 

相关主题

在Docker中运行本地Kubernetes集群

精选文章
热门文章