curl コマンドで Kubernetes の API サーバーへアクセスする際に kubectl proxy
を使った時の話をメモします。
環境
kubectl version
Client Version: version.Info{Major:"1", Minor:"16+", GitVersion:"v1.16.6-beta.0", GitCommit:"e7f962ba86f4ce7033828210ca3556393c377bcc", GitTreeState:"clean", BuildDate:"2020-01-15T08:26:26Z", GoVersion:"go1.13.5", Compiler:"gc", Platform:"darwin/amd64"}
Server Version: version.Info{Major:"1", Minor:"15+", GitVersion:"v1.15.11-eks-af3caf", GitCommit:"af3caf6136cd355f467083651cc1010a499f59b1", GitTreeState:"clean", BuildDate:"2020-03-27T21:51:36Z", GoVersion:"go1.12.17", Compiler:"gc", Platform:"linux/amd64"}
参考
kubectl proxyオプションの紹介 ~--accept-hosts, --address, --port, --api-prefix, --www, --www-prefix~
proxy kubectl proxy [--port=PORT] [--www=static-dir] [--www-prefix=prefix] [--api-prefix=prefix] [flags] Run a proxy to the Kubernetes API server.
やってみる
kubectl
を実行する場合、kubectl get pods
などのコマンドを実行しますが、具体的にどのようなパスがあるか確認したいということがありました。
kubectl
を使ってリクエストする場合、~./kube/config
などを使って接続先への認証情報の設定を行って HTTP リクエストしている認識です。
curl
などで実行する場合、認証情報をすればリクエスト出来る気もしますが面倒そうなので kubectl proxy
を使ってプロキシさせて認証情報を設定するようにします。
ではやってみます。
まずは kubectl proxy
を実行します。
$kubectl proxy
Starting to serve on 127.0.0.1:8001
上記で 8001 ポートが API サーバーにプロキシされるようになっています。
実際にアクセスしてみます。
$curl http://localhost:8001
{
"paths": [
"/api",
"/api/v1",
"/apis",
"/apis/",
Deployments ではどんな verbs があるか見てみます。
$curl http://localhost:8001/apis/apps/v1/ |less
・・・
{
"name": "deployments",
"singularName": "",
"namespaced": true,
"kind": "Deployment",
"verbs": [
"create",
"delete",
"deletecollection",
"get",
"list",
"patch",
"update",
"watch"
],
"shortNames": [
"deploy"
],
"categories": [
"all"
],
"storageVersionHash": "8aSe+NMegvE="
},
以下のように実行することで deployments の情報の確認もできます。
{
"kind": "DeploymentList",
"apiVersion": "apps/v1",
"metadata": {
"selfLink": "/apis/apps/v1/deployments",
"resourceVersion": "8544893"
},
"items": [
{
"metadata": {
"name": "2048-deployment",
"namespace": "2048-game",
"selfLink": "/apis/apps/v1/namespaces/2048-game/deployments/2048-deployment",
"uid": "bec46c02-b046-11ea-847f-06ff6f9a4084",
"resourceVersion": "5306426",
"generation": 6,
"creationTimestamp": "2020-06-17T03:00:48Z",
"labels": {
"app": "2048"
},
kubectl
でも同じように情報を取得出来ます。
$kubectl get deployments -A |grep 2048
2048-game 2048-deployment 1/1 1 1 19d