クラスタ・アクセスの設定

Container Engine for Kubernetes (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ファイルを設定するには:

ステップ1: kubeconfigファイルの設定
  1. ナビゲーション・メニューを開き、「開発者サービス」をクリックします「コンテナとアーティファクト」で、「Kubernetesクラスタ(OKE)」をクリックします。
  2. 作業する権限があるコンパートメントを選択します。
  3. 「クラスタ・リスト」ページで、kubectlを使用してアクセスするクラスタの名前をクリックします。「クラスタ」ページには、クラスタの詳細が表示されます。
  4. 「クラスタへのアクセス」ボタンをクリックして、「クラスタへのアクセス」ダイアログ・ボックスを表示します。
  5. 「クラウド・シェルのアクセス」をクリックします。
  6. 「クラウド・シェルの起動」をクリックしてクラウド・シェル・ウィンドウを表示します。クラウド・シェル(必要なIAMポリシーを含む)の詳細は、クラウド・シェルを参照してください。
  7. 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]を使用して貼り付けます。
  8. kubeconfigファイルをデフォルトの場所($HOME/.kube)またはデフォルト名(config)で保存しない場合は、KUBECONFIG環境変数の値をkubeconfigファイルの名前と場所を指すように設定します。たとえば、クラウド・シェル・ウィンドウで次のコマンドを入力します:

    export KUBECONFIG=$HOME/.kube/config
ステップ2: kubectlがクラスタにアクセスできることの確認

クラウド・シェル・ウィンドウに次のコマンドを入力して、kubectlがクラスタに接続できることを確認します:

$ kubectl get nodes

クラスタ内のノードに関する情報が表示されます。

これで、kubectlを使用してクラスタに対する操作を実行できるようになりました。

クラスタへのローカル・アクセスの設定

クラスタのKubernetes APIエンドポイントにパブリックIPアドレスがない場合、ネットワークがクラスタのVCNとピアリングされている場合は、ローカル・ターミナルからクラスタにアクセスできます。

ノート

ローカル・ターミナルからプライベートKubernetes APIエンドポイントを含むクラスタにアクセスするには、Oracle Cloud Infrastructure Bastionサービスを使用して要塞を構成することもできます。詳細は、クラスタ・アクセス用の要塞の設定を参照してください。

kubeconfigファイルを設定するには:

ステップ1: API署名キー・ペアの生成

API署名キー・ペアがすでにある場合は、次のステップに進みます。ない場合は:

  1. OpenSSLコマンドを使用して、必要なPEM形式でキー・ペアを生成します。Windowsを使用している場合は、Git Bash for Windowsをインストールし、そのツールでコマンドを実行する必要があります。API署名キーの生成方法を参照してください。
  2. 公開キーの内容をクリップボードにコピーします(後でコンソールに値を貼り付ける必要があります)。

ステップ2: API署名キー・ペアの公開キーのアップロード
  1. コンソールの右上で、「プロファイル」メニューを開き、「ユーザー設定」をクリックして詳細を表示します。

  2. 公開キーの追加をクリックします。

  3. 公開キーの値をウィンドウに貼り付け、「追加」をクリックします。

    キーがアップロードされ、そのフィンガープリントが表示されます(たとえば、d1:b2:32:53:d3:5f:cf:68:2d:6f:8b:5f:77:8f:07:13)。

ステップ3: Oracle Cloud Infrastructure CLIのインストールおよび構成
  1. Oracle Cloud Infrastructure CLIバージョン2.6.4 (以降)をインストールします。CLIのインストールを参照してください。

  2. Oracle Cloud Infrastructure CLIを構成します。CLIの構成を参照してください。
ステップ4: kubeconfigファイルの設定
  1. ナビゲーション・メニューを開き、「開発者サービス」をクリックします「コンテナとアーティファクト」で、「Kubernetesクラスタ(OKE)」をクリックします。
  2. 作業する権限があるコンパートメントを選択します。
  3. 「クラスタ・リスト」ページで、kubectlを使用してアクセスするクラスタの名前をクリックします。「クラスタ」ページには、クラスタの詳細が表示されます。
  4. 「クラスタへのアクセス」ボタンをクリックして、「クラスタへのアクセス」ダイアログ・ボックスを表示します。

  5. 「ローカル・アクセス」をクリックします。
  6. kubeconfigファイルを格納するディレクトリを作成します。デフォルトで、予想されるディレクトリ名は$HOME/.kubeです。

    たとえば、Linuxの場合は、次のコマンドをローカル・ターミナル・ウィンドウに入力します(または、「クラスタへのアクセス」ダイアログ・ボックスからコピーして貼り付けます):

    mkdir -p $HOME/.kube
  7. 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:要素は、新しく追加されたコンテキストを指すように設定されます。

  8. kubeconfigファイルをデフォルトの場所($HOME/.kube)またはデフォルト名(config)で保存しない場合は、KUBECONFIG環境変数の値をkubeconfigファイルの名前と場所を指すように設定します。たとえば、Linuxの場合は、次のコマンドをローカル・ターミナル・ウィンドウに入力します(または、「クラスタへのアクセス」ダイアログ・ボックスからコピーして貼り付けます):

    export KUBECONFIG=$HOME/.kube/config
ステップ5: kubectlがクラスタにアクセスできることの確認
  1. ローカル・ターミナル・ウィンドウに次のコマンドを入力して、kubectlが使用可能であることを確認します:

    kubectl version

    レスポンスでは次の情報が表示されます:

    • ローカルでインストールおよび実行されているkubectlのバージョン
    • クラスタのコントロール・プレーン・ノードで実行されているKubernetesのバージョン(厳密に言えばkube-apiserverのバージョン)

    kubectlバージョンは、コントロール・プレーン・ノードで実行されているKubernetesバージョンから1マイナー・バージョン以内(古いバージョンまたは新しいバージョン)である必要があります。kubectlが2マイナー・バージョン以上古いまたは新しい場合、適切なバージョンのkubectlをインストールします。KubernetesのドキュメントのKubernetesのバージョンおよびバージョン・スキューのサポート・ポリシーを参照してください。

    kubectlが使用できないことを示すエラーがコマンドで返された場合は、kubectlをインストールし(kubectlのドキュメントを参照)、このステップを繰り返します。

  2. ローカル・ターミナル・ウィンドウに次のコマンドを入力して、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ファイルへのサービス・アカウント認証トークンの追加を参照してください。
  • IAMポリシーは、マルチファクタ認証(MFA)で検証されたユーザーのみにクラスタ・アクセスを制限するように定義されている場合があります。このようなポリシーが存在する場合は、次のように、MFA検証ユーザーがkubectlを使用してクラスタにアクセスできるようにするには、kubeconfigファイルに--profileおよび--auth引数を追加する必要があります。いずれの場合も、<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: []
    • OCI_CLI_PROFILE環境変数を、kubectlコマンドを実行する前に、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ファイルのアップグレード

Container Engine for Kubernetesでは、現在kubeconfigバージョンの2.0.0ファイルがサポートされており、kubeconfigバージョンの1.0.0ファイルはサポートされていません。

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ファイルをアップグレードするには:

  1. kubectlのローカル・インストールの場合、次を入力して、Oracle Cloud Infrastructure CLIバージョン2.6.4 (以降)がインストールされていることを確認します:

    oci -version

    Oracle Cloud Infrastructure CLIバージョンがバージョン2.6.4より前の場合は、CLIを新しいバージョンにアップグレードします。CLIのアップグレードを参照してください。

  2. 適切な手順に従って、クラウド・シェルまたはローカルで使用するkubeconfigファイルを設定します(クラスタへのクラウド・シェル・アクセスの設定またはクラスタへのローカル・アクセスの設定を参照)。「クラスタへのアクセス」ダイアログ・ボックスに表示されるoci ce cluster create-kubeconfigコマンドを実行すると、既存のkubeconfigバージョン1.0.0ファイルがアップグレードされます。kubeconfigファイルの名前または場所を変更する場合は、ファイルの新しい名前および場所を指すようにKUBECONFIG環境変数を設定します。

  3. kubeconfigファイルが現在バージョン2.0.0であることを確認します:
    1. ターミナル・ウィンドウ(クラウド・シェル・ウィンドウまたは必要に応じてローカルのターミナル・ウィンドウ)で、次の情報を入力します:

      kubectl config view
    2. レスポンスが次の形式であることを確認します:

      user:
        exec:
          apiVersion: client.authentication.k8s.io/v1beta1
          args:
          - ce
          - cluster
          - generate-token
          - --cluster-id
          - <cluster ocid>
          command: oci
          env: []