创建用户认证授权的 kubeconfig 文件

创建用户认证授权的 kubeconfig 文件

当我们安装好集群后,如果想要把 kubectl 命令交给用户使用,就需要对用户的身份进行认证和对其权限做出限制。

Kubernetes中账户区分为:User Accounts(用户账户) 和 Service Accounts(服务账户) 两种:

  • UserAccount是给kubernetes集群外部用户使用的,例如运维或者集群管理人员,使用kubectl命令时用的就是UserAccount账户;UserAccount是全局性。在集群所有namespaces中,名称具有唯一性,默认情况下用户为admin;
  • ServiceAccount是给运行在Pod的程序使用的身份认证,Pod容器的进程需要访问API Server时用的就是ServiceAccount账户;ServiceAccount仅局限它所在的namespace,每个namespace都会自动创建一个default service account;创建Pod时,如果没有指定Service Account,Pod则会使用default Service Account。

前提

  • 使用kubeadm安装的集群,所有的证书文件都在/etc/kubernetes/pki目录下
  • 可以访问kubernetes集群,并用于最高管理员权限

通过服务账户创建

获取集群的api

USER=test
NAMESPACE=test
export KUBE_APISERVER=`kubectl config view -ojsonpath='{.clusters[0].cluster.server}'`

创建一个sa用户

cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: ServiceAccount
metadata:
  name: ${USER}
  namespace: ${NAMESPACE}
  labels:
    sa: ${USER}-${NAMESPACE}
EOF

获取该用户的token

DASH_TOCKEN=$(kubectl -n ${NAMESPACE}  get secrets `kubectl get sa -n ${NAMESPACE} -l sa=${USER}-${NAMESPACE} -ojsonpath={.items[0].secrets[0].name}` -o jsonpath={.data.token} |base64 -d)

1、创建角色role.yaml

在 RBAC API 中,一个角色包含了一套表示一组权限的规则。 权限以纯粹的累加形式累积(没有” 否定” 的规则)。 角色可以由命名空间(namespace)内的 Role 对象定义,而整个 Kubernetes 集群范围内有效的角色则通过 ClusterRole 对象实现。

cat <<EOF | kubectl apply -f -
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  namespace: ${NAMESPACE}  #执行命名空间
  name: ${USER}   #role名字
rules:
- apiGroups: ["*"]
  resources: ["*"]  #可操作资源
  verbs: ["get","watch","list","create","update","patch","delete"]  #可以操作动作
EOF

2、创建角色绑定rolebinding.yaml

cat <<EOF | kubectl apply -f -
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name:  ${USER}
  namespace: ${NAMESPACE}
subjects:
- kind: ServiceAccount
  name: ${USER}
  namespace: ${NAMESPACE}
roleRef:
  kind: Role
  name: ${USER}
  apiGroup: rbac.authorization.k8s.io
EOF

3、更改集群配置和用户上下文环境

kubectl config set-cluster kubernetes --certificate-authority=/etc/kubernetes/pki/ca.crt --embed-certs=true --server=${KUBE_APISERVER} --kubeconfig=${USER}-sa.kubeconfig
kubectl config set-credentials ${USER} --token=$DASH_TOCKEN --kubeconfig=${USER}-sa.kubeconfig
kubectl config set-context ${USER}@kubernetes --cluster=kubernetes --user=${USER} --kubeconfig=${USER}-sa.kubeconfig
kubectl config use-context ${USER}@kubernetes --kubeconfig=${USER}-sa.kubeconfig

4、切换角色,进行验证

kubectl get all -n ${NAMESPACE}  --kubeconfig=${USER}-sa.kubeconfig

使用范围:

  • 生成的kubeconfig和token可以给官方的dashboard使用
  • kubectl使用

通过用户账户创建

USER=dev
NAMESPACE=dev
DIR_HOME=$(dirname $(realpath ${BASH_SOURCE[0]}))
export KUBE_APISERVER=`kubectl config view -ojsonpath='{.clusters[0].cluster.server}'`

1、创建证书key

openssl genrsa -out ${USER}.key 2048
openssl req -new -key ${USER}.key -out ${USER}.csr -subj "/CN=${USER}"
openssl x509 -req -in ${USER}.csr -CA /etc/kubernetes/pki/ca.crt -CAkey /etc/kubernetes/pki/ca.key -CAcreateserial -out ${USER}.crt -days 3650

2、更改集群配置和用户上下文环境

kubectl config set-cluster kubernetes --certificate-authority=/etc/kubernetes/pki/ca.crt --embed-certs=true --server=${KUBE_APISERVER} --kubeconfig=${USER}.kubeconfig
kubectl config set-credentials ${USER} --client-certificate=${DIR_HOME}/${USER}.crt --client-key=${DIR_HOME}/${USER}.key --embed-certs=true --kubeconfig=${USER}.kubeconfig
kubectl config set-context ${USER}@kubernetes --cluster=kubernetes --user=${USER} --kubeconfig=${USER}.kubeconfig
kubectl config use-context ${USER}@kubernetes --kubeconfig=${USER}.kubeconfig

3、切换回管理员身份

kubectl config use-context kubernetes-admin@kubernetes

4、创建角色role.yaml

cat <<EOF | kubectl apply -f -
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  namespace: ${NAMESPACE}  #执行命名空间
  name: ${USER}   #role名字
rules:
- apiGroups: ["*"]
  resources: ["*"]  #可操作资源
  verbs: ["get","watch","list","create","update","patch","delete"]  #可以操作动作
EOF

5、创建角色绑定rolebinding.yaml

cat <<EOF | kubectl apply -f -
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: ${USER}
  namespace: ${NAMESPACE}
subjects:
- kind: User
  name: ${USER}
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role               
  name: ${USER} 
  apiGroup: rbac.authorization.k8s.io
EOF

6、切换角色,进行验证

kubectl config use-context ${USER}@kubernetes --kubeconfig=${USER}.kubeconfig
kubectl get all -n ${NAMESPACE}

7、切换回管理员身份

kubectl config use-context kubernetes-admin@kubernetes

创建dashboard访问token

创建用户

# dashboard-adminuser.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kubernetes-dashboard

---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: admin-user
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: admin-user
  namespace: kubernetes-dashboard

获取 token:

kubectl -n kubernetes-dashboard get secret $(kubectl -n kubernetes-dashboard get sa/admin-user -o jsonpath="{.secrets[0].name}") -o go-template="{{.data.token | base64decode}}"
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值