API のセットアップ
IBM Cloud® Kubernetes Service API を使用して、コミュニティー Kubernetes クラスターまたは Red Hat OpenShift クラスターを作成および管理できます。 CLI を使用するには、CLI のセットアップを参照してください。
API について
IBM Cloud Kubernetes Service API は、ユーザーにサービスを提供するために必要なコンピュート、ネットワーキング、およびストレージのリソースをアプリが得られるように、クラスターの IBM Cloud インフラストラクチャー・リソースのプロビジョニングと管理を自動化します。
このAPIは、クラスタを作成するために利用可能なさまざまなインフラストラクチャプロバイダーに対応しています。 詳しくは、 インフラストラクチャー・プロバイダーの概要 を参照してください。
バージョン 2 (v2) の API では、クラシック・クラスターと VPC クラスターの両方を管理できます。 v2 API は、可能な限り既存の機能を壊さないように設計されています。 しかし、次に示す v1 と v2 の API の違いを確認してください。
- API エンドポイント・プレフィックス
- v1 API:
https://containers.cloud.ibm.com/global/v1 - v2 API:
https://containers.cloud.ibm.com/global/v2 - v3 API:
https://containers.cloud.ibm.com/global/v3 - API リファレンス資料
- v1 および v2 API
- v3 API。
- API アーキテクチャー・スタイル
- v1 API:
GET、POST、PUT、PATCH、DELETEなどの HTTP メソッドを介して対話するリソースに焦点を当てた Representational State Transfer (REST)。 - v2 API: HTTP メソッド
GETおよびPOSTのみを介したアクションに焦点を当てたリモート・プロシージャー・コール (RPC)。 - サポート対象のコンテナー・プラットフォーム
- v1 API: IBM Cloud Kubernetes Service API を使用して、コミュニティー Kubernetes クラスターと Red Hat OpenShift クラスターの両方の IBM Cloud インフラストラクチャー・リソース (ワーカー・ノードなど) を管理します。
- v2 API: IBM Cloud Kubernetes Service
v2API を使用して、コミュニティー Kubernetes クラスターと Red Hat OpenShift VPC クラスターの両方の IBM Cloud インフラストラクチャー・リソース (ワーカー・ノードなど) を管理します。 - Kubernetes API
- v1 API: Kubernetes API を使用してクラスター内の Kubernetes リソース (ポッドや名前空間など) を管理するには、Kubernetes API を使用したクラスターの操作を参照してください。
- v2 API:
v1と同じです。Kubernetes API を使用したクラスターの操作を参照してください。 - サポートされる API (インフラストラクチャー・タイプ別)
- v1 API:
classic - v2 API:
vpcおよびclassicvpcプロバイダーは、複数の VPC サブプロバイダーをサポートするように設計されています。 サポートされる VPC サブプロバイダーはvpc-gen2であり、これは第 2 世代コンピュート・リソースの VPC クラスターに対応します。- プロバイダー固有の要求の URL には、
v2/vpc/createClusterなどのようにパス・パラメーターが含まれます。 一部の API は、特定のプロバイダーでのみ使用できます。例えば、クラシック用のGET vlanや VPC 用のGET vpcsなどがあります。 - 指定したプロバイダーの応答だけを返させたい場合は、プロバイダーに依存しない要求に、プロバイダー固有の本体パラメーター (通常は
{"provider": "vpc"}のような JSON 形式で指定します) を指定することができます。
GET応答- v1 API: リソース (
GET v1/clustersなど) の集合用のGETメソッドは、リスト内の各リソースについて、個々のリソース (GET v1/clusters/{idOrName}など) 用のGETメソッドと同じ詳細情報を返します。 - v2 API: 応答をより迅速に返すために、リソース (
GET v2/clustersなど) のコレクション用の v2GETメソッドは、個々のリソース (GET v2/clusters/{idOrName}など) 用のGETメソッドで詳述される情報のサブセットのみを返します。 一部のリスト応答には、返された項目がクラシック・インフラストラクチャーと VPC インフラストラクチャーのどちらに該当するかを示すプロバイダー・プロパティーが含まれています。 例えば、GET zonesリストでは、クラシック・インフラストラクチャー・プロバイダーでのみ利用できるmon01のような結果が返されることもあれば、VPC インフラストラクチャー・プロバイダーでのみ利用できるus-south-01のような結果が返されることもあります。 - クラスター、ワーカー・ノード、およびワーカー・プールの応答
- v1 API: 応答には、
GETクラスター内の VLAN やワーカー応答など、クラシック・インフラストラクチャー・プロバイダーに固有の情報のみが含まれます。 - v2 API: 返される情報は、インフラストラクチャー・プロバイダーによって異なります。 そのようなプロバイダー固有の応答の場合は、要求にプロバイダーを指定できます。 例えば、VPC クラスターには VLAN がないため、VLAN 情報は返されません。 代わりに、サブネットや CIDR ネットワークの情報を返します。
API を使用したクラスターのデプロイメントの自動化
IBM Cloud Kubernetes Service API を使用して、Kubernetes クラスターの作成、デプロイメント、管理を自動化できます。
IBM Cloud Kubernetes Service API にはヘッダー情報が必要です。これは、API 要求に指定する必要があります。また、使用する API に応じて異なる場合があります。 APIに必要なヘッダー情報を確認するには、『 IBM Cloud Kubernetes Service 』のAPIドキュメントを参照してください。
IBM Cloud Kubernetes Service で認証するために、IBM Cloud 資格情報を使用して生成した IBM Cloud IAM (ID およびアクセス管理) トークン (クラスターの作成に使用した IBM Cloud アカウント ID が入っているもの) を渡す必要があります。 IBM Cloud での認証方法に応じて、IBM Cloud IAM トークンの作成を自動化するための次のオプションから選択できます。
- 非フェデレーテッド ID
-
- IBM Cloud のAPIキーを生成する: IBM Cloud のユーザー名とパスワードの代わりに、 IBM Cloud のAPIキー を使用することもできます。 IBM Cloud のAPIキーは、そのキーが生成された IBM Cloud アカウントに紐づいています。 同じ IBM Cloud IAM トークン内で IBM Cloud API キーを別のアカウント ID と組み合わせることはできません。 IBM Cloud API キーの基となっているアカウント以外のアカウントを使用して作成されたクラスターにアクセスするには、そのアカウントにログインして新しい API キーを生成する必要があります。
- IBM Cloud ユーザー名とパスワード: このトピックに記載されたステップに従って、IBM Cloud IAM アクセス・トークンの作成を完全に自動化できます。
- 統合 ID
-
- IBM Cloud API キーを生成: IBM Cloud API キーは、生成対象の IBM Cloud アカウントに依存します。 同じ IBM Cloud IAM トークン内で IBM Cloud API キーを別のアカウント ID と組み合わせることはできません。 IBM Cloud API キーの基となっているアカウント以外のアカウントを使用して作成されたクラスターにアクセスするには、そのアカウントにログインして新しい API キーを生成する必要があります。
- ワンタイム・パスコードを使用: ワンタイム・パスコードを使用して IBM Cloud で認証を行う場合、IBM Cloud IAM トークンの作成を完全に自動化することはできません。ワンタイム・パスコードを取得するには、Web ブラウザーと手動で対話する必要があるためです。 IBM Cloud IAM トークンの作成を完全に自動化するには、代わりに IBM Cloud API キーを作成する必要があります。
- APIキー APIキーを生成するには IBM Cloud APIキーを生成するには、次のようにします。
- メニュー・バーから、「管理」 > **「アクセス (IAM)」**をクリックします。
- **「ユーザー」**ページをクリックして、自分を選択します。
- **「API キー」ペインで、「IBM Cloud API キーの作成」**をクリックします。
- API キーの**「名前」と「説明」を入力し、「作成」**をクリックします。
- **「表示」**をクリックして、生成された API キーを確認します。
- API キーをコピーして、新しい IBM Cloud IAM アクセス・トークンを取得できるようにします。
-
IBM Cloud IAM アクセス・トークンを作成します。 要求に含まれる本文情報は、使用する IBM Cloud 認証方式によって異なります。
POST https://iam.cloud.ibm.com/identity/token- ヘッダー
-
Content-Type: application/x-www-form-urlencodedAuthorization: Basic Yng6Yng=``Yng6Yng=は、ユーザー名 bx とパスワード bx の URL エンコード許可に相当します。
- IBM Cloud ユーザー名とパスワードの本文
-
grant_type: passwordusername: IBM Cloud ユーザー名。password: IBM Cloud パスワード。
- IBM Cloud API キーの本文
-
grant_type: urn:ibm:params:oauth:grant-type:apikeyapikey: IBM Cloud API キー
- IBM Cloud ワンタイム・パスコードの本文
-
grant_type: urn:ibm:params:oauth:grant-type:passcodepasscode: IBM Cloud ワンタイム・パスコード。ibmcloud login --ssoを実行し、CLI 出力の説明に従って、Web ブラウザーを使用してワンタイム・パスコードを取得します。
以下の例は、直前の要求の出力を示しています。
{ "access_token": "<iam_access_token>", "refresh_token": "<iam_refresh_token>", "token_type": "Bearer", "expires_in": 3600, "expiration": 1493747503 "scope": "ibm openid" }IBM Cloud のIAMトークンは、API出力の「
access_token」フィールドで確認できます。 次のステップでさらにヘッダー情報を取得するため、IBM Cloud IAM トークンをメモしておきます。 -
作業する IBM Cloud アカウントの ID を取得します。
TOKENを、前の手順で API 出力の「access_token」フィールドから取得した IBM Cloud の IAM トークンに置き換えてください。 API 出力の resources.metadata.guid フィールドで IBM Cloud アカウントの ID を確認できます。GET https://accounts.cloud.ibm.com/coe/v2/accounts- ヘッダー
-
Content-Type: application/jsonAuthorization: bearer TOKENAccept: application/json
以下の例は、直前の要求の出力を示しています。
{ "next_url": null, "total_results": 5, "resources": [ { "metadata": { "guid": "<account_ID>", "url": "/coe/v2/accounts/<account_ID>", "created_at": "2016-09-29T02:49:41.842Z", "updated_at": "2018-08-16T18:56:00.442Z", "anonymousId": "1111a1aa1a1111a1aa11aa11111a1111" }, "entity": { "name": "<account_name>", -
IBM Cloud 資格情報と、作業するアカウント ID が含まれる、新しい IBM Cloud IAM トークンを生成します。
IBM Cloud API キーを使用する場合、API キーの作成対象となった IBM Cloud アカウント ID を使用する必要があります。 アカウントクラスターにアクセスするには、 アカウントログインし、 アカウント基にした「 IBM Cloud 」APIキーを作成してください。
POST https://iam.cloud.ibm.com/identity/token- ヘッダー
-
Content-Type: application/x-www-form-urlencodedAuthorization: Basic Yng6Yng=``Yng6Yng=は、ユーザー名 bx とパスワード bx の URL エンコード許可に相当します。
- IBM Cloud ユーザー名とパスワードの本文
-
grant_type: passwordusername: IBM Cloud ユーザー名。password: IBM Cloud パスワード。bss_account: 前の手順で取得した IBM Cloud アカウント ID。
- IBM Cloud API キーの本文
-
grant_type: urn:ibm:params:oauth:grant-type:apikeyapikey: IBM Cloud API キー。bss_account: 前の手順で取得した IBM Cloud アカウント ID。
- IBM Cloud ワンタイム・パスコードの本文
-
grant_type: urn:ibm:params:oauth:grant-type:passcodepasscode: IBM Cloud パスコード。bss_account: 前の手順で取得した IBM Cloud アカウント ID。
以下の例は、API 要求の出力を示しています。
{ "access_token": "<iam_token>", "refresh_token": "<iam_refresh_token>", "token_type": "Bearer", "expires_in": 3600, "expiration": 1493747503 }APIの出力結果において、「 IBM Cloud 」のIAMトークンは「
access_token」フィールドに、「refresh_token」フィールドにはリフレッシュトークンが表示されます。 -
アカウント内のクラシック・クラスターまたは VPC クラスターをすべてリストします。 クラスターに対して Kubernetes API 要求を実行しようとしている場合は、処理しようとしているクラスターの名前または ID を必ずメモしてください。 クラシック・クラスターをリストする要求の例。
GET https://containers.cloud.ibm.com/global/v2/classic/getClusters- ヘッダー
Authorization: bearer <iam_token>
VPC クラスターをリストするコマンドの例。
GET https://containers.cloud.ibm.com/global/v2/vpc/getClusters?provider=vpc-gen2- ヘッダー
Authorization: IBM Cloud IAM アクセス・トークン (bearer <iam_token>)。
-
サポートされているAPIのリストは、 IBM Cloud Kubernetes Service APIドキュメントをご覧ください。
API を自動化に使用する場合には、API からの応答に含まれるファイルに依存するのではなく、API からの応答を使用してください。 例えば、クラスター・コンテキストの Kubernetes 構成ファイルは変更される可能性があるため、GET /v1/clusters/{idOrName}/config 呼び出しを使用する場合は、このファイルの具体的な内容に基づいて自動化をビルドしないでください。
Kubernetes API を使用したクラスターの処理
IBM Cloud Kubernetes Service では、 Kubernetes API を使用してクラスタを操作することができます。
以下の手順では、Kubernetes マスターのパブリック・クラウド・サービス・エンドポイントに接続するために、クラスターのパブリック・ネットワーク・アクセスが必要です。
-
「 API を使用したクラスタ展開の自動化 」の手順に従って、 IBM Cloud の IAM アクセストークン、 IBM Cloud の API キー、 Kubernetes の API リクエストを実行するクラスタの ID、およびクラスタが配置されている IBM Cloud Kubernetes Service のリージョンを取得してください。
-
IBM Cloud API キーを使用して、 IBM Cloud IAM ID、IAM アクセス、IAM リフレッシュトークンを取得します。 APIの出力結果では、「
id_token」フィールドにIAM IDトークン、「access_token」フィールドにIAMアクセストークン、「refresh_token」フィールドにIAMリフレッシュトークンが記載されています。POST https://iam.cloud.ibm.com/identity/token- ヘッダー
-
Content-Type: application/x-www-form-urlencodedAuthorization: Basic a3ViZTprdWJla3ViZTprdWJlこれは、ユーザー名「kube」とパスワード「kube」に対する、 URL 形式でエンコードされた認証情報に相当します。
- Body
-
grant_type: urn:ibm:params:oauth:grant-type:apikeyapikey:IBM Cloud API キー。
以下の例は、直前の API 要求からの出力を示しています。
{ "access_token": "<iam_access_token>", "id_token": "<iam_id_token>", "refresh_token": "<iam_refresh_token>", "token_type": "Bearer", "expires_in": 3600, "expiration": 1553629664, "refresh_token_expiration": 1761334993, "scope": "ibm openid containers-kubernetes" }あるいは、
ibmcloud ks cluster config --cluster <cluster_name> --output jsonCLIコマンドを使用すると、id_tokenとrefresh_tokenが表示されます。 -
現在のIDでクラスタにアクセスする前に、以下のリクエストを実行する必要があります。
POST https://containers.cloud.ibm.com/global/v2/applyRBAC- ヘッダー
Authorization: bearer <TOKEN>IBM Cloud のIAMアクセストークン- Body
cluster: <cluster_name_or_ID>
-
RBACの同期は非同期なので、同期が完了するまで以下のリクエストを実行することに注意。
GET https://containers.cloud.ibm.com/global/v2/getRBACStatus?cluster=<cluster_name_or_ID>
-H "認証 ${BEARER2} " ``` Header : Authorization: bearer <TOKEN> Your IBM Cloud IAM access token
Example response. Ensure the output shows `synchronized:true`.
```json {: screen}
{"synchronized":true,"error":false}
```
-
IAM アクセス・トークンとクラスターの名前または ID を使用して、Kubernetes マスターのデフォルト・サービス・エンドポイントの URL を取得します。 API 出力の
masterURLで URL を確認できます。クラスターでパブリック・クラウド・サービス・エンドポイントのみ、またはプライベート・クラウド・サービス・エンドポイントのみを有効にした場合は、
masterURLにはこのエンドポイントがリストされます。 クラスターでパブリック・クラウド・サービス・エンドポイントとプライベート・クラウド・サービス・エンドポイントの両方を有効にした場合は、masterURLにはデフォルトでパブリック・クラウド・サービス・エンドポイントがリストされます。 代わりにプライベート・クラウド・サービス・エンドポイントを使用するには、出力のprivateServiceEndpointURLフィールド内でその URL を見つけます。GET https://containers.cloud.ibm.com/global/v2/getCluster?cluster=<cluster_name_or_ID>- ヘッダー
-
Authorization: IBM Cloud IAM アクセス・トークン。
- パス
-
<cluster_name_or_ID>: API を使用したクラスター・デプロイメントの自動化でGET https://containers.cloud.ibm.com/global/v2/classic/getClustersAPI またはGET https://containers.cloud.ibm.com/global/v2/vpc/getClusters?provider=vpc-gen2API を使用して取得したクラスターの名前または ID。
以下の例は、パブリック・クラウド・サービス・エンドポイント要求の出力を示しています。
... "etcdPort": "31593", "masterURL": "https://c2.us-south.containers.cloud.ibm.com:30422", "ingress": { ...}以下の例は、プライベート・クラウド・サービス・エンドポイント要求の出力を示しています。
... "etcdPort": "31593", "masterURL": "https://c2.private.us-south.containers.cloud.ibm.com:30422", "ingress": { ...} -
プライベート・クラウド・サービス・エンドポイントを使用するには、最初に VPN 接続からプライベート・ネットワークにルーティング可能なロード・バランサー IP を使用して、プライベート・クラウド・サービス・エンドポイントを公開する必要があります。
-
前に取得した IAM ID トークンを使用して、クラスターに対して Kubernetes API 要求を実行します。 例えば、クラスターで実行されている Kubernetes バージョンをリストします。
API テスト・フレームワークで SSL 証明書検査を有効にしている場合は、この機能を必ず無効にしてください。
GET <masterURL>/api- ヘッダー
-
Authorization: bearer <id_token>
- パス
-
<masterURL>: 前のステップで取得した、Kubernetes マスターのサービス・エンドポイント。
以下の例は、直前の API 要求の出力を示しています。
{ "kind": "APIVersions", "versions": [ "v1" ], "serverAddressByClientCIDRs": [ { "clientCIDR": "0.0.0.0/0", "serverAddress": "xxx.xx.x.x:xxxx" } ] } -
最新の Kubernetes バージョンでサポートされているAPIの一覧を確認するには、 Kubernetes のAPIドキュメントをご覧ください。 必ず、ご使用のクラスターの Kubernetes バージョンに一致する API 資料を使用してください。 最新 Kubernetes バージョンを使用しない場合は、URL の末尾にバージョンを追加します。 例えば、バージョン 1.12 の API 資料にアクセスするには、
v1.12を追加します。
API を使用して IAM アクセストークンを更新する
API を介して発行されるすべての IBM Cloud IAM (ID およびアクセス管理) アクセス・トークンは、1 時間後に有効期限が切れます。 IBM Cloud API へのアクセスを確保するには、アクセス・トークンを定期的にリフレッシュする必要があります。
始める前に、新しいアクセストークンをリクエストするために使用できる IBM Cloud APIキーが あることを確認してください。
新しい IBM Cloud IAM トークンを取得する場合は、以下の手順を使用します。
-
IBM Cloud API キーを使用して、新しい IBM Cloud IAM アクセストークンを生成します。
POST https://iam.cloud.ibm.com/identity/token- ヘッダー
-
Content-Type: application/x-www-form-urlencoded
- Body
-
grant_type: urn:ibm:params:oauth:grant-type:apikeyapikey:IBM Cloud API キー。
以下の例は、直前の API 要求の出力を示しています。
{ "access_token": "<iam_token>", "refresh_token": "<iam_refresh_token>", "token_type": "Bearer", "expires_in": 3600, "expiration": 1493747503, "scope": "ibm openid" }新しい IBM Cloud IAMトークンは、API出力の「
access_token」フィールドで確認できます。 -
前の手順で取得したトークンを使用して、 IBM Cloud Kubernetes Service APIのドキュメントの操作を続けてください。