Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Kubernetes APIに Pod内からアクセスしてみた

ry
July 27, 2020

Kubernetes APIに Pod内からアクセスしてみた

ry

July 27, 2020
Tweet

More Decks by ry

Other Decks in Technology

Transcript

  1. Service Account による認可 (RBAC) Role Role Binding Service Account Cluster

    Role Cluster Role Binding Service Account どういった操作を許可するのかを定めた Roleを作成し、Service Accountに対して RoleBindingを用いてRoleを紐づけることで権限を管理します。
  2. Role / Cluster Role 02 付与する権限を指定するリソース Role vs Cluster Role

    ここの違いは、Namespaceを跨げるかどうかです。 Cluster Roleは、Namespaceを跨いでCluster単位でリクエスト権限を与えることができま す。
  3. Role / Cluster Role 設定フィールド rulesにリスト形式で指定。 基本は以下の3つを指定していく。 ・apiGroups リソースが含まれている APIのグループを指定

    ・resources このルールを適用するリソースを指定 ・verbs 指定したリソースに対して行う操作を指定 apiGroups resources create 作成 get / list 取得 / 一覧取得 delete 削除 update 更新 patch 一部変更 watch 変更の追跡 verbs
  4. Role Binding / Cluster Role Binding 03 RoleとService Account等を紐付けるリソース。 Role

    BindingとCluster Role Bindingの違いは、 Roleと同様、Namespaceを跨げるかどうかです。
  5. PodからAPIを叩くまでの準備 1 Service Account作成 2 Role / Cluster Role作成 3

    Role Binding / Cluster Role Binding作成 4 Pod作成 5 Pod Setup
  6. Service Account作成 $ kubectl create sa admin-sa -n apitest $

    kubectl get sa -n apitest NAME SECRETS AGE admin-sa 1 9s default 1 6m11s
  7. Cluster Role作成 $ kubectl apply -f cluster-role.yaml -n apitest $

    kubectl get clusterrole -n apitest \ |grep admin-role admin-role 98s
  8. Cluster Role Binding作成 $ kubectl apply -f cluster-role.yaml -n apitest

    $ kubectl get clusterrolebinding -n apitest \ |grep admin-rolebinding admin-rolebinding 63s
  9. Pod作成 $ kubectl apply -f pod.yaml -n apitest $ kubectl

    get pod -n apitest NAME READY STATUS RESTARTS AGE nginx 1/1 Running 0 2s
  10. Set up 必要なmoduleをダウンロードしておきます。 # apt update # apt install -y

    curl # apt install -y vim APIへアクセスできるか確認してみましょう。 # curl -H "Authorization: Bearer $TOKEN" --cacert $CACERT https://$k8s/healthz ok
  11. Deploymentの作成 APIにjsonファイルを送ります。 # curl -X POST -H "Authorization:Bearer $TOKEN" \

    --cacert $CACERT -H 'Content-Type:application/json' \ -d @deployment.json https://$k8s/apis/apps/v1/namespaces/apitest/deployments apiGroup Namespace resoure
  12. Deploymentの確認 別terminalから確認します。 $ kubectl get pods -n apitest NAME READY

    STATUS RESTARTS AGE apitest-nginx-78478c4bdc-27v7p 1/1 Running 0 50s apitest-nginx-78478c4bdc-v4fsl 1/1 Running 0 50s apitest-nginx-78478c4bdc-wjzn9 1/1 Running 0 50s nginx 1/1 Running 0 55m
  13. Deploymentの確認 APIからも確認できます。 # curl -X GET -H "Authorization:Bearer $TOKEN" \

    --cacert $CACERT \ https://$k8s/apis/apps/v1/namespaces/apitest/deployments/apitest-nginx
  14. Deploymentの削除 # curl -X DELETE -H "Authorization:Bearer $TOKEN" \ --cacert

    $CACERT \ https://$k8s/apis/apps/v1/namespaces/apitest/deployments/apitest-nginx 成功時のstdout