すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:クライアント証明書を使用した Kubernetes API の呼び出し

最終更新日:Jun 16, 2026

Kubernetes API は、GET、POST、PUT、PATCH、DELETE をサポートする、リソースベースの RESTful な HTTP インターフェイスです。kubectl を使用せずに、プログラムでクラスターリソースのクエリと管理ができます。クライアント証明書で認証し、cURL を使用して API を呼び出し、Pod と Deployment を管理します。

前提条件

開始する前に、以下をご確認ください。

  • ACK クラスターが作成済みであること

  • ACK コンソールにアクセスするための権限があること

  • ローカルマシンに cURL がインストールされていること

kubeconfig からの認証情報の抽出

  1. ACK コンソールにログインします。

  2. [Go to RAM console] をクリックして、Resource Access Management のクイック承認ページに移動し、[Confirm Authorization Policy] をクリックします。承認後、ACK コンソールを更新します。

  3. 左側メニューで、[クラスター] をクリックします。

  4. [クラスター] ページで、クラスター名をクリックするか、[操作] 列の [詳細] をクリックします。

  5. [接続情報] タブをクリックします。[kubeconfig] の内容をコピーし、ローカルに ./kubeconfig として保存します。

  6. kubeconfig ファイルからクライアント証明書、プライベートキー、API サーバーアドレスを抽出します。

    cat ./kubeconfig | grep client-certificate-data | awk -F ' ' '{print $2}' | base64 -d > ./client-cert.pem
    cat ./kubeconfig | grep client-key-data | awk -F ' ' '{print $2}' | base64 -d > ./client-key.pem
    APISERVER=`cat ./kubeconfig | grep server | awk -F ' ' '{print $2}'`

    これらのコマンドは、証明書データをデコードし、API サーバーの URL を $APISERVER に格納します。これ以降のすべての cURL コマンドは、これらの認証情報と $APISERVER 変数を使用します。

-k フラグは TLS サーバー検証をスキップします。本番環境では、サーバー ID を検証して中間者攻撃を防ぐため、-k--cacert <path-to-ca.pem> に置き換えます。

Pod の管理

すべての Pod API 呼び出しは、パス $APISERVER/api/v1/namespaces/<namespace>/pods を使用します。

操作 HTTP メソッド パス
すべての名前空間を一覧表示 GET /api/v1/namespaces
すべての Pod を一覧表示 GET /api/v1/namespaces/default/pods
Pod の作成 POST /api/v1/namespaces/default/pods
Pod のステータスを取得 GET /api/v1/namespaces/default/pods/nginx
Pod のログを取得 GET /api/v1/namespaces/default/pods/nginx/log
Pod のメトリクスを取得 GET /apis/metrics.k8s.io/v1beta1/namespaces/default/pods/nginx
Pod の削除 DELETE /api/v1/namespaces/default/pods/nginx

クラスター内のすべての名前空間を一覧表示:

curl --cert ./client-cert.pem --key ./client-key.pem -k $APISERVER/api/v1/namespaces

default 名前空間内のすべての Pod を一覧表示:

curl --cert ./client-cert.pem --key ./client-key.pem -k $APISERVER/api/v1/namespaces/default/pods

JSON マニフェストから Pod を作成:

cat nginx-pod.json
{
    "apiVersion": "v1",
    "kind": "Pod",
    "metadata": {
        "name": "nginx",
        "namespace": "default"
    },
    "spec": {
        "containers": [
            {
                "name": "nginx",
                "image": "nginx:alpine",
                "ports": [
                    {
                        "containerPort": 80
                    }
                ]
            }
        ]
    }
}

curl --cert ./client-cert.pem --key ./client-key.pem -k $APISERVER/api/v1/namespaces/default/pods \
  -X POST --header 'content-type: application/json' -d@nginx-pod.json

YAML マニフェストから Pod を作成:

cat nginx-pod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: nginx
  namespace: default
spec:
  containers:
  - name: nginx
    image: nginx:alpine
    ports:
    - containerPort: 80

curl --cert ./client-cert.pem --key ./client-key.pem -k $APISERVER/api/v1/namespaces/default/pods \
  -X POST --header 'content-type: application/yaml' --data-binary @nginx-pod.yaml

Pod のステータスを取得:

curl --cert ./client-cert.pem --key ./client-key.pem -k $APISERVER/api/v1/namespaces/default/pods/nginx

Pod のログを取得:

curl --cert ./client-cert.pem --key ./client-key.pem -k $APISERVER/api/v1/namespaces/default/pods/nginx/log

Metrics Server API を使用して Pod のメトリクスを取得:

curl --cert ./client-cert.pem --key ./client-key.pem -k $APISERVER/apis/metrics.k8s.io/v1beta1/namespaces/default/pods/nginx

Pod の削除:

curl --cert ./client-cert.pem --key ./client-key.pem -k $APISERVER/api/v1/namespaces/default/pods/nginx -X DELETE

Deployment の管理

すべての Deployment API 呼び出しは、パス $APISERVER/apis/apps/v1/namespaces/<namespace>/deployments を使用します。

Deployment の作成:

cat nginx-deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deploy
  labels:
    app: nginx
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:alpine
        ports:
        - containerPort: 80
        resources:
          requests:
            cpu: "2"
            memory: "4Gi"

curl --cert ./client-cert.pem --key ./client-key.pem -k $APISERVER/apis/apps/v1/namespaces/default/deployments \
  -X POST --header 'content-type: application/yaml' --data-binary @nginx-deploy.yaml

default 名前空間内のすべての Deployment を一覧表示:

curl --cert ./client-cert.pem --key ./client-key.pem -k $APISERVER/apis/apps/v1/namespaces/default/deployments

Deployment のスケール:

curl --cert ./client-cert.pem --key ./client-key.pem -k \
  $APISERVER/apis/apps/v1/namespaces/default/deployments/nginx-deploy \
  -X PATCH -H 'Content-Type: application/strategic-merge-patch+json' \
  -d '{"spec": {"replicas": 4}}'

コンテナイメージの更新:

curl --cert ./client-cert.pem --key ./client-key.pem -k \
  $APISERVER/apis/apps/v1/namespaces/default/deployments/nginx-deploy \
  -X PATCH -H 'Content-Type: application/strategic-merge-patch+json' \
  -d '{"spec": {"template": {"spec": {"containers": [{"name": "nginx","image": "nginx:1.7.9"}]}}}}'

次のステップ

プログラムから cURL 以外でアクセスするには、公式の Kubernetes クライアントライブラリを使用します。

言語 クライアントライブラリ
Go client-go 参照
Python client-python 参照
Java client-java 参照

サポートされている言語の完全なリストについては、Kubernetes クライアントライブラリをご参照ください。

代替のアクセス方法については、「Kubernetes API を使用したクラスターへのアクセス」をご参照ください。