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