Uncategorizedソフトウェア

k8sのREST API

k8sのREST APIにアクセスしてみました。

環境は、k3sを使っています。

defaultネームスペースのserviceaccountのトークンを取得してREST APIにアクセスします。
k3sは、Basic認証なのでエラーになりました。

$ TOKEN=$(kubectl describe secrets $(kubectl get secrets | grep default | awk '{print $1}') | grep -E '^token' | awk '{print $2}')
$ URL=$(kubectl config view | grep server | awk '{print $2}')
$ curl $URL/api/v1/namespaces/default/pods --header "Authorization: Bearer $TOKEN" --insecure
{
"kind": "Status",
"apiVersion": "v1",
"metadata": {
},
"status": "Failure",
"message": "pods is forbidden: User \"system:serviceaccount:default:default\" cannot list resource \"pods\" in API group \"\" in the namespace \"default\"",
"reason": "Forbidden",
"details": {
"kind": "pods"
},
"code": 403
$

Basic認証でアクセスします。

$ USER=$(grep username ~/.kube/config | awk '{print $2}')
$ PWD=$(grep password ~/.kube/config | awk '{print $2}')
$ URL=$(kubectl config view | grep server | awk '{print $2}')
$ curl -s -u $USER:$PWD $URL/api/v1/namespaces/default/pods --insecure | head
{
"kind": "PodList",
"apiVersion": "v1",
"metadata": {
"selfLink": "/api/v1/namespaces/default/pods",
"resourceVersion": "3242"
},
"items": [
{
"metadata": {
(23) Failed writing body

kubectl proxyを使えば、認証方式に依存せずにREST APIにアクセスできます。

$ kubectl proxy --port=8080 &
[1] 94999
Starting to serve on 127.0.0.1:8080
$ curl -s http://localhost:8080/api/v1/namespaces/default/pods | head
{
"kind": "PodList",
"apiVersion": "v1",
"metadata": {
"selfLink": "/api/v1/namespaces/default/pods",
"resourceVersion": "3270"
},
"items": [
{
"metadata": {
(23) Failed writing body
タイトルとURLをコピーしました