九析带你用 curl 轻松完爆 k8s apiserver

目录api

1 apiserver 客户端访问方式app

2 curl 访问 apiservercurl

    2.1 获取 apiserver 地址ide

    2.2 获取 token网站

        2.2.1 肯定 service account编码

        2.2.2 建立 clusterrolebindings 资源url

        2.2.3 获取 tokenspa

    2.3 使用 token 访问 apiserver3d


1 apiserver 客户端访问方式server

        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

clipboard1.pngspacer.gif        也能够经过以下命令一次性获取:

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),从而能够访问什么资源。

spacer.gifclipboard2.png

        上面介绍的三个术语(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

clipboard3.pngspacer.gif

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

clipboard4.pngspacer.gif        再根据 secret 获取 token,以下图所示:

clipboard5.png        由于 secret 中的 token 是通过 base64 编码过的,因此须要解码才可使用。命令以下。注意 token 拷贝要完整,切记,切记,切记。

## YOUR_TOKEN 就是你 default 用户的 token 值。需根据我的状况填写。

echo 'YOUR_TOKEN' | base64 -d

clipboard6.pngspacer.gif2.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/apispacer.gif

clipboard7.png         自此,使用 curl 轻松完爆 k8s apiserver。

相关文章
相关标签/搜索