目录

1.create serviceaccount

2.get token and sa from secret

3.add cluster

4.check configuration

5.refer to


1.create serviceaccount

# 创建一个服务账号,serviceaccount的shortname就是这个sa.

kubectl create sa ${my-account}
kubectl create rolebinding ${my-rolebinding} --clusterrole=${my-clusterrole} --serviceaccount=${my-account} --namespace=${my-namespace}

事实上,对k8s资源的控制,如限定访问哪些namespace等资源,都通过这个sa所绑定的角色关联,关于角色的绑定,这边不赘述(点击传送)。总之,我们需要准备好一个serviceaccount(下文都使用serviceaccount的shortname sa指代)。

在k8s中创建sa成功(一般需要在k8s集群中提前建立好)后,k8s会同步创建出对应的secret,secret存储了token和证书信息。

2.get token and sa from secret

# 根据sa name找到对应的secret name

SECRET_NAME=$(kubectl get serviceaccount ${my-account} -n kube-system -o jsonpath='{.secrets[0].name}')
echo $SECRET_NAME

# 直接依据secret name 找到token和CA证书信息(后续创建user需要使用) 

# 找到TOKEN

TOKEN=$(kubectl get secret ${SECRET_NAME} -n kube-system -o jsonpath='{.data.token}'|base64 -d)
echo $TOKEN

# 找到CA

CA_CRT=$(kubectl get secret ${SECRET_NAME} -n kube-system -o jsonpath='{.data.ca\.crt }'|base64 -d)
echo $CA_CRT

3.add cluster

# create CA file

cat << EOF > k8s-ca.crt
${CA_CRT}
EOF

# config a new cluster

kubectl config set-cluster ${my-cluster} --server=${serverpath}  --certificate-authority=./k8s-ca.crt --embed-certs=true

serverpath需要在k8s集群上查看,格式是http://k8s-cluster-host:port

# add user

kubectl config set-credentials ${my-user} --token ${TOKEN}

这里实际上是一个绑定了Token的证书,为了方便理解,我称之为user

# add context

kubectl config set-context ${my-context} --user ${my-user} --cluster ${my-cluster}

context的字面意思是上下文,实际上就是一个将用户(证书)和集群(新添加的你需要访问的)绑定的快捷连接

4.check configuration

kubectl cluster-info --context ${my-context} && kubectl get ns --context ${my-context} && kubectl get pods --context ${my-context}

最后这一步是验证配置是否生效的操作,本质是一个查询操作。

当使用--context指定对应的context时,kubectl命令执行从context—>user—>token—>cluster的访问。其中token代表了sa,其中包含了可访问那些资源的权限。

5.refer to

k8s之serviceaccount,登录账号创建 - SZ_文彬 - 博客园
基于角色的访问控制(RBAC)

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐