-
Notifications
You must be signed in to change notification settings - Fork 2
Open
Labels
Description
Work flow
- 在指定 namespace 下创建 serviceaccount ,获取 secret
- 查看 secret,获取 token
- 在 kubeconfig 中设置 token
- RBAC 权限控制
- 使用 kubectl 访问
Service Account
创建 namespace
kubectl create ns dev创建服务账号
kubectl -n dev create sa lqshow获取 Secret 信息
SECRET=$(kubectl -n dev get secrets | grep ^lqshow | cut -f1 -d ' ')从 secret 中获取 ca.crt
kubectl -n dev get secret $SECRET -o json | jq -r '.data["ca.crt"]' | base64 -D > ca.crt从 secret 获取 token
USER_TOKEN=$(kubectl -n dev get secret $SECRET -o json | jq -r '.data["token"]' | base64 -D)Kubectl config set-cluster
在kubeconfig配置文件中设置一个集群项。
options
| key | desc |
|---|---|
| --server | 设置kuebconfig配置文件中集群选项中的server |
| --certificate-authority | 设置kuebconfig配置文件中集群选项中的certificate-authority路径 |
| --embed-certs | 是否在kubeconfig配置文件中嵌入客户端证书/key |
获取 cluster 上下文信息
CURRENT_CONTEXT=$(kubectl config current-context)获取 cluster name
CLUSTER_NAME=$(kubectl config get-contexts $CURRENT_CONTEXT | awk '{print $3}' | tail -n 1)获取 API Server 地址
KUBE_APISERVER=$(kubectl config view -o jsonpath="{.clusters[?(@.name == \"$CLUSTER_NAME\")].cluster.server}")在当前目录下建立一名为cluster-staging的 Config
kubectl config set-cluster cluster-staging \
--certificate-authority=./ca.crt \
--embed-certs=true \
--server=${KUBE_APISERVER} \
--kubeconfig=dev.kubeconfig设置用户凭证
kubectl config set-credentials lqshow \
--token=$USER_TOKEN \
--kubeconfig=dev.kubeconfig绑定用户
kubectl config set-context lqshow-staging \
--cluster=cluster-staging \
--user=lqshow \
--kubeconfig=dev.kubeconfig切换当前上下文
kubectl config use-context lqshow-staging \
--kubeconfig=dev.kubeconfigRole
创建一个 Role 配置
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
namespace: dev
name: dev-user-pod
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "watch", "list", "update", "create", "delete"]kubectl create -f dev-user-role.ymlRolebinding
创建 Rolebinding 配置
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: dev-pod-rolebinding
namespace: dev
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: dev-user-pod
subjects:
- kind: ServiceAccount
name: lqshow
namespace: dev或者直接执行命令绑定角色
kubectl create rolebinding dev-pod-rolebinding \
--role=dev-user-pod \
--serviceaccount=dev:lqshow