クラスタ・アクセスの設定
Kubernetes Engine (OKE)を使用して作成するクラスタへのアクセスを設定するステップについて説明します。ステップが完了したら、kubectlを使用してクラスタの管理を開始できます。
kubectlを使用してクラスタにアクセスするには、クラスタのKubernetes構成ファイル(通常はkubeconfigファイル)を設定する必要があります。kubeconfigファイル(デフォルトではconfig
という名前で、$HOME/.kube
ディレクトリに格納される)には、クラスタにアクセスするために必要な詳細が含まれています。kubeconfigファイルを設定したら、kubectlを使用してクラスタの管理を開始できます。
kubeconfigファイルの設定時に実行するステップは、クラスタへのアクセス方法によって異なります:
-
クラウド・シェルでkubectlを使用してクラスタにアクセスするには、クラウド・シェル・ウィンドウでOracle Cloud Infrastructure CLIコマンドを実行し、kubeconfigファイルを設定します。
クラスタへのクラウド・シェル・アクセスの設定を参照してください。
-
kubectlのローカル・インストールを使用してクラスタにアクセスするには:
- API署名キー・ペアを生成します(まだない場合)。
- API署名キー・ペアの公開キーをアップロードします。
- Oracle Cloud Infrastructure CLIをインストールおよび構成します。
- kubeconfigファイルを設定します。
クラスタへのローカル・アクセスの設定を参照してください。
クラスタへのクラウド・シェル・アクセスの設定
クラスタのKubernetes APIエンドポイントにパブリックIPアドレスがある場合、kubeconfigファイルを設定することでクラウド・シェルでクラスタにアクセスできます。
クラウド・シェルでプライベートKubernetes APIエンドポイントを含むクラスタにアクセスするには、Oracle Cloud Infrastructure Bastionサービスを使用して要塞を構成できます。詳細は、クラスタ・アクセス用の要塞の設定を参照してください。
kubeconfigファイルを設定するには:
- ナビゲーション・メニューを開き、「開発者サービス」を選択します。「コンテナとアーティファクト」で、「Kubernetesクラスタ(OKE」を選択します。
- 作業する権限があるコンパートメントを選択します。
- 「クラスタ・リスト」ページで、kubectlを使用してアクセスするクラスタの名前をクリックします。「クラスタ」ページには、クラスタの詳細が表示されます。
- 「クラスタへのアクセス」ボタンをクリックして、「クラスタへのアクセス」ダイアログ・ボックスを表示します。
- 「クラウド・シェルのアクセス」をクリックします。
- 「クラウド・シェルの起動」をクリックしてクラウド・シェル・ウィンドウを表示します。クラウド・シェル(必要なIAMポリシーを含む)の詳細は、クラウド・シェルを参照してください。
-
Oracle Cloud Infrastructure CLIコマンドを実行してkubeconfigファイルを設定し、kubectlにアクセスできる場所に保存します。
たとえば、「クラウド・シェル」ウィンドウに次のコマンドを入力します(または「クラスタへのアクセス」ダイアログ・ボックスからコピーして貼り付けます):
oci ce cluster create-kubeconfig --cluster-id ocid1.cluster.oc1.phx.aaaaaaaaae... --file $HOME/.kube/config --region us-phoenix-1 --token-version 2.0.0 --kube-endpoint PUBLIC_ENDPOINT
ここでは:
ocid1.cluster.oc1.phx.aaaaaaaaae...
は、現在のクラスタのOCIDです。便宜上、「クラスタへのアクセス」ダイアログ・ボックスのコマンドには、クラスタのOCIDがすでに含まれています。--kube-endpoint PUBLIC_ENDPOINT
は、クラスタのKubernetes APIエンドポイントのパブリックIPアドレスをkubeconfigファイルに追加することを指定します。詳細は、Kubernetesクラスタ・コントロール・プレーンおよびKubernetes APIを参照してください。
指定した場所にkubeconfigファイルがすでに存在する場合、クラスタの詳細は、既存のkubeconfigファイルに新しいコンテキストとして追加されます。kubeconfigファイルの
current-context:
要素は、新しく追加されたコンテキストを指すように設定されます。ヒント
クラウド・シェル・ウィンドウのクリップボード操作では、Windowsユーザーは[Ctrl]+[C]または[Ctrl]+[Insert]を使用してコピーし、[Shift]+[Insert]を使用して貼り付けることができます。Mac OSユーザーの場合は、[Cmd]+[C]を使用してコピーし、[Cmd]+[V]を使用して貼り付けます。 -
kubeconfigファイルをデフォルトの場所(
$HOME/.kube
)またはデフォルト名(config
)で保存しない場合は、KUBECONFIG環境変数の値をkubeconfigファイルの名前と場所を指すように設定します。たとえば、クラウド・シェル・ウィンドウで次のコマンドを入力します:export KUBECONFIG=$HOME/.kube/config
クラウド・シェル・ウィンドウに次のコマンドを入力して、kubectlがクラスタに接続できることを確認します:
$ kubectl get nodes
クラスタ内のノードに関する情報が表示されます。
これで、kubectlを使用してクラスタに対する操作を実行できるようになりました。
クラスタへのローカル・アクセスの設定
クラスタのKubernetes APIエンドポイントにパブリックIPアドレスがない場合、ネットワークがクラスタのVCNとピアリングされていれば、ローカル・ターミナルからクラスタにアクセスできます。
ローカル・ターミナルからプライベートKubernetes APIエンドポイントを含むクラスタにアクセスするには、Oracle Cloud Infrastructure Bastionサービスを使用して要塞を構成することもできます。詳細は、クラスタ・アクセス用の要塞の設定を参照してください。
kubeconfigファイルを設定するには:
API署名キー・ペアがすでにある場合は、次のステップに進みます。ない場合は:
- OpenSSLコマンドを使用して、必要なPEM形式でキー・ペアを生成します。Windowsを使用している場合は、Git Bash for Windowsをインストールし、そのツールでコマンドを実行する必要があります。API署名キーの生成方法を参照してください。
-
公開キーの内容をクリップボードにコピーします(後でコンソールに値を貼り付ける必要があります)。
-
詳細を表示するには: ナビゲーション・バーで、「プロファイル」メニューを選択し、表示されるオプションに応じて「ユーザー設定」または「マイ・プロファイル」を選択します。
-
公開キーの追加をクリックします。
-
公開キーの値をウィンドウに貼り付け、「追加」をクリックします。
キーがアップロードされ、そのフィンガープリントが表示されます(たとえば、d1:b2:32:53:d3:5f:cf:68:2d:6f:8b:5f:77:8f:07:13)。
-
Oracle Cloud Infrastructure CLIバージョン2.6.4 (以降)をインストールします。CLIのインストールを参照してください。
- Oracle Cloud Infrastructure CLIを構成します。CLIの構成を参照してください。
- ナビゲーション・メニューを開き、「開発者サービス」を選択します。「コンテナとアーティファクト」で、「Kubernetesクラスタ(OKE」を選択します。
- 作業する権限があるコンパートメントを選択します。
- 「クラスタ・リスト」ページで、kubectlを使用してアクセスするクラスタの名前をクリックします。「クラスタ」ページには、クラスタの詳細が表示されます。
-
「クラスタへのアクセス」ボタンをクリックして、「クラスタへのアクセス」ダイアログ・ボックスを表示します。
- 「ローカル・アクセス」をクリックします。
-
kubeconfigファイルを格納するディレクトリを作成します。デフォルトで、予想されるディレクトリ名は
$HOME/.kube
です。たとえば、Linuxの場合は、次のコマンドをローカル・ターミナル・ウィンドウに入力します(または、「クラスタへのアクセス」ダイアログ・ボックスからコピーして貼り付けます):
mkdir -p $HOME/.kube
-
Oracle Cloud Infrastructure CLIコマンドを実行してkubeconfigファイルを設定し、kubectlにアクセスできる場所に保存します。
たとえば、Linuxの場合は、次のコマンドをローカル・ターミナル・ウィンドウに入力します(または、「クラスタへのアクセス」ダイアログ・ボックスからコピーして貼り付けます):
oci ce cluster create-kubeconfig --cluster-id ocid1.cluster.oc1.phx.aaaaaaaaae... --file $HOME/.kube/config --region us-phoenix-1 --token-version 2.0.0 --kube-endpoint PRIVATE_ENDPOINT|PUBLIC_ENDPOINT
ここでは:
ocid1.cluster.oc1.phx.aaaaaaaaae...
は、現在のクラスタのOCIDです。便宜上、「クラスタへのアクセス」ダイアログ・ボックスのコマンドには、クラスタのOCIDがすでに含まれています。--kube-endpoint PRIVATE_ENDPOINT|PUBLIC_ENDPOINT
は、クラスタのKubernetes APIエンドポイントのプライベートIPアドレスまたはパブリックIPアドレスをkubeconfigファイルに追加するかどうかを指定します。詳細は、Kubernetesクラスタ・コントロール・プレーンおよびKubernetes APIを参照してください。
指定した場所にkubeconfigファイルがすでに存在する場合、クラスタの詳細は、既存のkubeconfigファイルに新しいコンテキストとして追加されます。kubeconfigファイルの
current-context:
要素は、新しく追加されたコンテキストを指すように設定されます。 -
kubeconfigファイルをデフォルトの場所(
$HOME/.kube
)またはデフォルト名(config
)で保存しない場合は、KUBECONFIG環境変数の値をkubeconfigファイルの名前と場所を指すように設定します。たとえば、Linuxの場合は、次のコマンドをローカル・ターミナル・ウィンドウに入力します(または、「クラスタへのアクセス」ダイアログ・ボックスからコピーして貼り付けます):export KUBECONFIG=$HOME/.kube/config
-
ローカル・ターミナル・ウィンドウに次のコマンドを入力して、kubectlが使用可能であることを確認します:
kubectl version
レスポンスでは次の情報が表示されます:
- ローカルでインストールおよび実行されているkubectlのバージョン
- クラスタのコントロール・プレーン・ノードで実行されているKubernetesのバージョン(厳密に言えばkube-apiserverのバージョン)
kubectlバージョンは、コントロール・プレーン・ノードで実行されているKubernetesバージョンから1マイナー・バージョン以内(古いバージョンまたは新しいバージョン)である必要があります。kubectlが2マイナー・バージョン以上古いまたは新しい場合、適切なバージョンのkubectlをインストールします。KubernetesのドキュメントのKubernetesのバージョンおよびバージョン・スキューのサポート・ポリシーを参照してください。
kubectlが使用できないことを示すエラーがコマンドで返された場合は、kubectlをインストールし(kubectlのドキュメントを参照)、このステップを繰り返します。
-
ローカル・ターミナル・ウィンドウに次のコマンドを入力して、kubectlがクラスタに接続できることを確認します:
kubectl get nodes
クラスタ内のノードに関する情報が表示されます。
これで、kubectlを使用してクラスタに対する操作を実行できるようになりました。
kubeconfigファイルに関するノート
kubeconfigファイルについては、次の点に注意してください:
- 1つのkubeconfigファイルには、複数のコンテキストとして複数のクラスタの詳細を含めることができます。操作が実行されるクラスタは、kubeconfigファイルの
current-context:
要素で指定されます。 - kubeconfigファイルには、認証トークンを動的に生成し、kubectlコマンドの実行時に挿入するOracle Cloud Infrastructure CLIコマンドが含まれています。Oracle Cloud Infrastructure CLIは、シェルの実行可能パス(たとえば、Linuxの$PATH)で使用できる必要があります。
- kubeconfigファイルのOracle Cloud Infrastructure CLIコマンドによって生成される認証トークンは、短期間の、クラスタの有効範囲が設定された、個別のユーザーに固有なものです。そのため、Kubernetesクラスタにアクセスするユーザー間でkubeconfigファイルを共有することはできません。
-
kubeconfigファイルのOracle Cloud Infrastructure CLIコマンドは、認証トークンの生成時に、現在のCLIプロファイルを使用します。CLI構成ファイル(たとえば、~/.oci/config)で、異なるテナンシに複数のプロファイルを定義した場合は、次のように、認証トークンを生成するときに使用するプロファイルを指定します。どちらの場合も、In both cases,
<profile-name>
は、CLI構成ファイルで定義されたプロファイルの名前です:-
次のように、kubeconfigファイルの
args:
セクションに--profile
を追加します:user: exec: apiVersion: client.authentication.k8s.io/v1beta1 args: - ce - cluster - generate-token - --cluster-id - <cluster ocid> - --profile - <profile-name> command: oci env: []
-
kubectlコマンドを実行する前に、OCI_CLI_PROFILE環境変数を、CLI構成ファイルで定義されているプロファイルの名前に設定します。例:
export OCI_CLI_PROFILE=<profile-name>
kubectl get nodes
-
- kubeconfigファイルのOracle Cloud Infrastructure CLIコマンドによって生成される認証トークンは、kubectlを使用してクラスタにアクセスする個々のユーザーを認証するのに適しています。ただし、継続的統合や継続的配信(CI/CD)ツールなど、他のプロセスやツールがクラスタにアクセスする場合も、生成される認証トークンは適していません。この場合、Kubernetesサービス・アカウントを作成して、それに関連する認証トークンをkubeconfigファイルに追加することを検討します。詳細は、Kubeconfigファイルへのサービス・アカウント認証トークンの追加を参照してください。
-
マルチファクタ認証(MFA)で検証されたユーザーのみにクラスタ・アクセスを制限するようにIAMポリシーが定義されている場合があります。If such a policy exists, you have to add
--profile
and--auth
arguments to the kubeconfig file to enable an MFA-verified user to access the cluster using kubectl, as follows.どちらの場合も、<profile-name>
は、Oracle Cloud Infrastructure CLI構成ファイルで定義されたMFA検証済ユーザー・プロファイルの名前です:-
kubeconfigファイルの
args:
セクションに次の引数を追加します:- --profile - <profile-name> - --auth - security_token
例:
user: exec: apiVersion: client.authentication.k8s.io/v1beta1 args: - ce - cluster - generate-token - --cluster-id - <cluster ocid> - --profile - <profile-name> - --auth - security_token command: oci env: []
-
kubectlコマンドを実行する前に、OCI_CLI_PROFILE環境変数を、CLI構成ファイルで定義されているMFA検証済ユーザー・プロファイルの名前に設定します。例:
export OCI_CLI_PROFILE=<profile-name>
kubectl get nodes
kubeconfigファイルの更新後、クラスタへのアクセスに使用するユーザーをMFA検証する必要があります。MFA検証されていないユーザーを使用してクラスタにアクセスしようとすると、メッセージ
error: You must be logged in to the server (Unauthorized)
が表示されます。MFA検証済ユーザーの詳細は、多要素認証の管理を参照してください。
-
バージョン1.0.0からバージョン2.0.0へのkubeconfigファイルのアップグレード
kubeconfigバージョン2.0.0ファイルの機能拡張により、Kubernetes環境のセキュリティが向上します。これには、自動リフレッシュを行う短期間でクラスタ有効範囲が設定されたトークンや、KubernetesクラスタにアクセスするためのInstance Principalsのサポートがあります。さらに、認証トークンは、クラスタごとにオンデマンドで生成されるため、kubeconfigバージョン2.0.0ファイルは、Kubernetesクラスタにアクセスするユーザー間で共有することはできません(kubeconfigバージョン1.0.0ファイルとは異なります)。
kubeconfigバージョンの2.0.0ファイルは、1.11.9バージョンより前のkubectlバージョンと互換性がありません。現在kubectlバージョン1.10.x以降を実行している場合は、kubectlをバージョン1.11.9以降にアップグレードします。別のバージョンのkubernetesとkubectl間の互換性については、Kubernetesのドキュメントを参照してください。
次の手順に従って、kubeconfigファイルの現在のバージョン、および残りのkubeconfigバージョン1.0.0ファイルをバージョン2.0.0にアップグレードする方法を確認します。
kubeconfigファイルのバージョンの確認
クラスタのkubeconfigファイルのバージョンを確認するには:
1. ターミナル・ウィンドウ(クラウド・シェル・ウィンドウまたは必要に応じてローカル・ターミナル・ウィンドウ)で次のコマンドを入力し、KUBECONFIG環境変数によって現在指定されているkubeconfigファイルのフォーマットを確認します:
kubectl config view
2. kubeconfigファイルがバージョン1.0.0の場合、次の形式でレスポンスが表示されます:
users:
- name: <username>
user:
token: <token-value>
前述の形式でレスポンスが表示された場合、kubeconfigファイルをアップグレードする必要があります。バージョン1.0.0からバージョン2.0.0へのkubeconfigファイルのアップグレードを参照してください。
3. kubeconfigファイルがバージョン2.0.0の場合、次の形式でレスポンスが表示されます:
user:
exec:
apiVersion: client.authentication.k8s.io/v1beta1
args:
- ce
- cluster
- generate-token
- --cluster-id
- <cluster ocid>
command: oci
env: []
前述の形式でレスポンスが表示された場合、それ以上のアクションは必要ありません。
kubeconfigバージョン1.0.0ファイルのバージョン2.0.0へのアップグレード
kubeconfigバージョン1.0.0ファイルをアップグレードするには:
-
kubectlのローカル・インストールの場合、次を入力して、Oracle Cloud Infrastructure CLIバージョン2.6.4 (以降)がインストールされていることを確認します:
oci -version
Oracle Cloud Infrastructure CLIバージョンがバージョン2.6.4より前の場合は、CLIを新しいバージョンにアップグレードします。CLIのアップグレードを参照してください。
-
適切な手順に従って、クラウド・シェルまたはローカルで使用するkubeconfigファイルを設定します(クラスタへのクラウド・シェル・アクセスの設定またはクラスタへのローカル・アクセスの設定を参照)。「クラスタへのアクセス」ダイアログ・ボックスに表示される
oci ce cluster create-kubeconfig
コマンドを実行すると、既存のkubeconfigバージョン1.0.0ファイルがアップグレードされます。kubeconfigファイルの名前または場所を変更する場合は、ファイルの新しい名前および場所を指すようにKUBECONFIG環境変数を設定します。 - kubeconfigファイルが現在バージョン2.0.0であることを確認します:
-
ターミナル・ウィンドウ(クラウド・シェル・ウィンドウまたは必要に応じてローカルのターミナル・ウィンドウ)で、次の情報を入力します:
kubectl config view
-
レスポンスが次の形式であることを確認します:
user: exec: apiVersion: client.authentication.k8s.io/v1beta1 args: - ce - cluster - generate-token - --cluster-id - <cluster ocid> command: oci env: []
-