ksaitoの日記

日々試したことの覚え書き

k8sのREST API

移転しました。

自動的にリダイレクトします。

k8sREST 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