通过minikube启动一个集群,默认使用的authentication机制为client certificates. 该certificates对应的账户拥有设置RoleBinding/ClusterRoleBinding.

启动minikube

首先,如果要使用bootstrap token做验证,同时需要使用rbac做访问管理,那么在启动api server的时候传入参数: --enable-bootstrap-token-auth--authorization-mode=rbac. 在minikube里,等价与:

# minikube --extra-config="apiserver.authorization-mode=rbac" --extra-config="apiserver.enable-bootstrap-token-auth" start

创建bootstrap token

# kubeadm token create --ttl 0
x972sl.gk76qr3zjk7u2wrm

注意:返回的这串用.分隔的字符串就是一个bootstrap token. 它的前6位是一个token id,后16位是token secret. 通过这个token登录的用户名为:bootstrap:<token-id>,属于system:bootstrapper这个group。

设置rbac

刚才创建的这个token对应的user只有在kube-system这个namespace中拥有有限的权限,例如它无法访问default namespace中的资源。可以通过rbac为它bind更高的权限。

以下示例给bootstrap token对应的user绑定最高权限:

# #使用minikube默认context执行
# kubectl config use-context minikube

# #给该用户:system:bootstrap:x972sl 设置权限
# kubectl create clusterrolebinding cluster-admin-bootstrap --clusterrole=cluster-admin --user=system:bootstrap:x972sl

访问api server

接下来,我们就可以用刚才创建的这个帐号与api server进行交互.

NOTE:如果没有设置rbac,访问这个集群会得到如下错误信息:pods is forbidden: User “system:bootstrap:x972sl” cannot list resource “pods” in API group “” in the namespace “default”.