目录
1 apiserver 客户端访问方式
2 curl 访问 apiserver
2.1 获取 apiserver 地址
2.2 获取 token
2.2.1 确定 service account
2.2.2 创建 clusterrolebindings 资源
2.2.3 获取 token
2.3 使用 token 访问 apiserver
1 apiserver 客户端访问方式
apiserver 常用的客户端访问方式有两种:
1)数字证书认证:基于 k8s CA 签发的数字证书认证方式
2)TOKEN 认证:基于 TOKEN 识别合法用户的认证方式
本文介绍使用 curl + TOKEN 的认证方式来访问 apiserver。
2 curl 访问 apiserver
命令格式如下:
## -k:允许 curl 不使用数字证书可以访问 https 网站
## -H:自定义 http header 内容
curl -k -H 'Authorization: Bearer $TOKEN' $APISERVER/api
如上可知,如果想访问 apiserver,只需要获取 token、apiserver 即可。
2.1 获取 apiserver 地址
kubectl config view
也可以通过如下命令一次性获取:
kubectl config view | grep -i server | cut -d ':' -f 2-
2.2 获取 token
在获取 token 时,需要介绍一下 k8s RBAC(Role-based Access Control),简单来说,RBAC 就是谁(service account)用什么角色(role)进行绑定(role/clusterrole binding),从而可以访问什么资源。
上面介绍的三个术语(service account、role/clusterrole、rolebinding/clusterrolebinding)中我们并没有发现 token,那么 token 在哪里?答案是 secret 对象中,而 secret 存在于 service account 中。
因此,如果想拥有集群的最高访问权限,最简单的做法就是将某个 service account 绑定到集群管理员即可(cluster-admin)。
2.2.1 确定 service account
这里我们采用 k8s 安装时默认生成的 default 用户。
kubectl get sa
2.2.2 创建 clusterrolebindings 资源
创建 default-clusterrolebings.yaml 资源文件:
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: default-admin-cluster
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: default
namespace: default
执行下面命令给 default 用户绑定集群管理员角色:
kubectl apply -f default-clusterrolebings.yaml
2.2.3 获取 token
查找 service account 信息获取 secret。
kubectl get sa default -o yaml
再根据 secret 获取 token,如下图所示:
因为 secret 中的 token 是经过 base64 编码过的,所以需要解码才可以使用。命令如下。注意 token 拷贝要完整,切记,切记,切记。
## YOUR_TOKEN 就是你 default 用户的 token 值。需根据个人情况填写。
echo 'YOUR_TOKEN' | base64 -d
2.3 使用 token 访问 apiserver
## YOUR_DECODE_TOKEN_VAL 是上面经过 base64 解码后的值
export TOKEN=YOUR_DECODE_TOKEN_VAL
## 设置 apiserver 地址
export APISERVER=$(kubectl config view | grep -i server | cut -d ':' -f 2-)
curl -k -H 'Authorization: Bearer $TOKEN' $APISERVER/api
自此,使用 curl 轻松完爆 k8s apiserver。