Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Kubernetes APIに Pod内からアクセスしてみた
Search
ry
July 27, 2020
Technology
1
1.8k
Kubernetes APIに Pod内からアクセスしてみた
ry
July 27, 2020
Tweet
Share
More Decks by ry
See All by ry
eBPF Tools on Kubernetes part1
ry
0
280
Vault Secrets Operator Tutorial
ry
0
530
KyvernoとRed Hat ACMを用いたマルチクラスターの一元的なポリシー制御
ry
0
1.1k
明日から始められるKyvernoを用いたポリシー制御
ry
3
780
CNDT2022 k8snovice Community introduction
ry
0
140
Policy Engine on Kubernetes
ry
1
1.4k
ConfigMap and Secret
ry
0
350
Policy Manager試してみた!
ry
0
410
AKS 101 in Kubernetes Novice Tokyo #1
ry
0
660
Other Decks in Technology
See All in Technology
組織内、組織間の資産保護に必要なアイデンティティ基盤と関連技術の最新動向
fujie
0
510
Power Automate のパフォーマンス改善レシピ / Power Automate Performance Improvement Recipes
karamem0
0
110
そもそも AWS FIS について。なぜ今 FIS のハンズオンなのか?などなど
kazzpapa3
2
120
大規模組織にAIエージェントを迅速に導入するためのセキュリティの勘所 / AI agents for large-scale organizations
i35_267
6
220
SREを知らずに SREマネージャーになった話 / How I Became an SRE Manager Without Knowing What SRE Is
moneyforward
0
300
TROCCO今昔
gtnao
0
210
FAST導入1年間のふりかえり〜現実を直視し、さらなる進化を求めて〜 / Review of the first year of FAST implementation
wooootack
1
120
ecspressoの設計思想に至る道 / sekkeinight2025
fujiwara3
8
1.2k
スプリントゴール未達症候群に送る処方箋
kakehashi
PRO
1
190
SRE with AI:実践から学ぶ、運用課題解決と未来への展望
yoshiiryo1
1
680
RapidPen: AIエージェントによる高度なペネトレーションテスト自動化の研究開発
laysakura
1
390
Wasmで社内ツールを作って配布しよう
askua
0
110
Featured
See All Featured
Why Our Code Smells
bkeepers
PRO
337
57k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
18
1k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
60k
Bootstrapping a Software Product
garrettdimon
PRO
307
110k
We Have a Design System, Now What?
morganepeng
53
7.7k
Java REST API Framework Comparison - PWX 2021
mraible
31
8.7k
Building Applications with DynamoDB
mza
95
6.5k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
34
5.9k
Side Projects
sachag
455
43k
Fantastic passwords and where to find them - at NoRuKo
philnash
51
3.3k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
47
9.6k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Transcript
機密 <会社名> 専用 バージョン 1.0 Kubernetes APIに Pod内からアクセスしてみた
自己紹介 ry (@URyo_0213) インフラエンジニア 主な仕事内容: - Storageの導入・設定 (+ 自動化) -
社内app作成 - 社内app基盤の運用・管理 (kubernetes with PKS)
機密 <会社名> 専用 バージョン 1.0 1. 今日学ぶこと 2. まず初めに 3.
Practice 4. まとめ Agenda
今日学ぶこと
今日学ぶこと 1 RBACについて 2 Pod内からKubernetes APIを叩く方法
まず初めに
Kubernetes API Kubernetesを操作する際の指示を受け取る口。 CLIツールである「kubectl」や、yaml形式で書かれた「manifest」 を用いた先では、このAPIを叩いています。
Kubernetes API へのアクセス クライアントからのアクセスが入ると、 ・Authentication(認証) アクセスが許可されているかを判断 ・Authorization(認可) 処理の権限を持っているのかを判断 ・Admission Control(リクエスト制御)
そのリクエストを受け入れるのかを判断 Authorization Authentication Client Admission Control Excecute
PodからAPIを叩くために必要なもの 1 Service Account 2 Role / Cluster Role 3
Role Binding / Cluster Role Binding
Service Account 01 kubernetes内で管理され、認証情報をPodに割り当てるリソース 特徴: ・Nampespaceに紐づく。 ・1つ1つに「Token」と「証明書」が割り当てられる。 ・Pod起動時にService Accountを必ず1つ割り当てる必要がある。 (指定しない場合、default
service accountが割り当てられる)
Service Account Token
Service Account Token による認証 1 HTTPリクエスト時、Service Account tokenをHeaderにいれる 2 Kubernetesは、どのService
Accountを使用しているかを認識 3 認証をpassする
Service Account による認可 (RBAC) Role Role Binding Service Account Cluster
Role Cluster Role Binding Service Account どういった操作を許可するのかを定めた Roleを作成し、Service Accountに対して RoleBindingを用いてRoleを紐づけることで権限を管理します。
Role / Cluster Role 02 付与する権限を指定するリソース Role vs Cluster Role
ここの違いは、Namespaceを跨げるかどうかです。 Cluster Roleは、Namespaceを跨いでCluster単位でリクエスト権限を与えることができま す。
Role / Cluster Role 設定フィールド rulesにリスト形式で指定。 基本は以下の3つを指定していく。 ・apiGroups リソースが含まれている APIのグループを指定
・resources このルールを適用するリソースを指定 ・verbs 指定したリソースに対して行う操作を指定 apiGroups resources create 作成 get / list 取得 / 一覧取得 delete 削除 update 更新 patch 一部変更 watch 変更の追跡 verbs
Role / Cluster Role manifest例 https://kubernetes.io/docs/reference/access-authn-authz/rbac/#command-line-utilities
Role Binding / Cluster Role Binding 03 RoleとService Account等を紐付けるリソース。 Role
BindingとCluster Role Bindingの違いは、 Roleと同様、Namespaceを跨げるかどうかです。
Role Binding / Cluster Role Binding manifest例
Practice
PodからAPIを叩くまでの準備 1 Service Account作成 2 Role / Cluster Role作成 3
Role Binding / Cluster Role Binding作成 4 Pod作成 5 Pod Setup
ちょっとその前に!! 今回のAPI 検証用のNamespaceを作成します。 # kubectl create ns apitest
Service Account作成 $ kubectl create sa admin-sa -n apitest $
kubectl get sa -n apitest NAME SECRETS AGE admin-sa 1 9s default 1 6m11s
Cluster Role作成 $ kubectl apply -f cluster-role.yaml -n apitest $
kubectl get clusterrole -n apitest \ |grep admin-role admin-role 98s
Cluster Role Binding作成 $ kubectl apply -f cluster-role.yaml -n apitest
$ kubectl get clusterrolebinding -n apitest \ |grep admin-rolebinding admin-rolebinding 63s
Pod作成 $ kubectl apply -f pod.yaml -n apitest $ kubectl
get pod -n apitest NAME READY STATUS RESTARTS AGE nginx 1/1 Running 0 2s
Podの中を見てみる Podに接続していきます。 $ kubectl exec -it nginx -- /bin/bash root@nginx:/#
環境変数 ・API アクセス先 KUBERNETES_PORT_443_TCP_ADDR KUBERNETES_PORT_443_TCP_PORT
Token Service AccountのTokenは /var/run/secrets/kubernetes.io/serviceaccount/token に格納されています。
ca.crt APIにアクセスする際に用いる証明書は /var/run/secrets/kubernetes.io/serviceaccount/ca.crt に格納されています。
Set up APIにアクセスする際に必要なパラメータを環境変数に仕込んでおきます。
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
Deploymentの作成 APIに送るjsonファイルを作成しましょう。 # vi deployment.json
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
Deploymentの作成 適切なRBAC設定を行っていない場合、
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
Deploymentの確認 APIからも確認できます。 # curl -X GET -H "Authorization:Bearer $TOKEN" \
--cacert $CACERT \ https://$k8s/apis/apps/v1/namespaces/apitest/deployments/apitest-nginx
Deploymentの確認 APIでの確認結果 (長いので、途中まで)
Deploymentの削除 # curl -X DELETE -H "Authorization:Bearer $TOKEN" \ --cacert
$CACERT \ https://$k8s/apis/apps/v1/namespaces/apitest/deployments/apitest-nginx 成功時のstdout
まとめ
まとめ 1 RBACについては以下の3リソースを用いる。 Service Account, (Cluster)Role, (Cluster)Role Binding 2 Pod内からは、指定したService
Account の情報を使って Kubernetes APIを叩くことができる。
Thank you