プライベート・サービス・エンドポイントの許可リストからコンテキスト・ベースの制限(CBR)への移行

プライベートサービスのエンドポイント許可リストはサポートされなくなり、代わりにコンテキストベースの制限(CBR)を使用する必要があります。 現在、クラスターでマスターのプライベートサービスエンドポイントの許可リストが有効になっている場合、その許可リストを変更することはできず、無効にすることしかできません。 コンテキストベースの制限 (CBR)を使用するように移行するには、以下の手順を実行します。

以下の手順では、CBRルールを使用してクラスタのプライベート・サービス・エンドポイントを保護します。 クラスタにパブリック・サービス・エンドポイントとプライベート・サービス・エンドポイント(PSE)の両方がある場合、クラスタのパブリック・サービス・エンドポイントをCBRで保護することもできます。

CBRの利点には以下のようなものがある:

  • アカウント内の複数のクラスタを一度に対象とし、それぞれのクラスタにリストを設定する必要がありません。
  • IPやサブネットだけでなく、特定のVPCからのアクセスを許可する。
  • PSEの最大合計75ではなく、最大200のプライベートIPと500のパブリックIPまたはサブネットの高い制限を設定します。
  • コンソール、API、CLIからCBRルールを作成・管理。
  • CBRによる一般からのアクセスを制限する。 プライベート・サービス・エンドポイントの許可リストは、プライベート・サービス・エンドポイントのトラフィックだけを制限する。

開始前に

すでにCBRルールを使用してクラスタを保護している場合、これらの説明は使用ケースに合わないかもしれません。 代わりに、CBRのドキュメントを使用して、プライベート・サービス・エンドポイントのallowlistサブネットを含めるために、既存のCBRルールを変更する方法を理解してください。 CBRの詳細については、コンテキスト・ベースの制限によるクラスタ・リソースの保護 および コンテキスト・ベースの制限のシナリオ 例を参照してください。

CBRゾーンとルールの作成を開始する前に、プライベート・サービスのエンドポイントallowlistが期待通りに動作していることを確認してください。 CBRをセットアップした後、これらのテストを再実行して同じ動作を確認することができる。

1 Red Hat OpenShiftクラスタにアクセス します。 許可リストのカスタムサブネットのいずれかにあるプライベートIPを使用するクライアントシステムから、プライベートサービスのエンドポイントをターゲットにします。

  1. 以下のコマンドを実行して、許可されたIPがPSEに接続できることを確認します。

    oc get nodes
    

1 Red Hat OpenShiftクラスタにアクセス します。 接続が可能であることを確認するため、許可されたIPアドレスからプライベートサービスエンドポイントにアクセスしてください。

1 Red Hat OpenShiftクラスタにアクセス します。 許可リストで許可されていないプライベートIPを使用するクライアント・システムから、プライベート・サービスのエンドポイントをターゲットにする。

  1. 前のコマンドをもう一度実行して、許可リストにないIPがPSEに接続できないことを確認する。

これでallowlistが期待通りに動作していることが確認できましたので、移行を続行することができます。

ステップ1:許可リストの詳細を確認する

  1. PSE許可リストの詳細を入手する。

    クラスタでPSE allowlistが有効になっていない場合、コマンドは失敗し、この機能が無効であることを示すエラーが表示されます。 この場合、クラスターにこれ以上の処置は必要ありません。

    ibmcloud oc cluster master private-service-endpoint allowlist get -c CLUSTER
    

    出力例

    Subnet             Type     Status
    10.138.53.64/26    System   Active
    10.30.50.0/24      Custom   Active
    10.249.94.103/32   Custom   Active
    OK
    laptop
    
  2. 出力を確認し、カスタムサブネットをメモする。 これらのサブネットは後で使う。

    • **システム・**エントリーは自動的に移行され、無視することができる。 これらのエントリはクラスターワーカーがクラスターアピサーバーへの接続を許可されていることを確認します。
    • **Custom]**エントリは、このクラスタのプライベート・サービス・エンドポイントへの接続を許可するサブネットを追加したものです。 この例のサブネット「10.30.50.0/24」と「10.249.94.103/32」は、次の手順でCBRネットワークゾーンに追加される。

ステップ2:ネットワークゾーンの作成

既存のカスタム・プライベート・サービス・エンドポイント許可リストと同じサブネットを含むCBRネットワーク・ゾーンを作成する。

コンソールでネットワークゾーンを作成する

  1. CBRコンソールに移動する

  2. 「作成」 をクリックします。

  3. ネットワークゾーンの詳細を入力してください。

    • 名前ネットワークゾーンに名前を付けます。
    • 許可されたIPアドレス:先のステップで見つけたサブネットを入力する。
  4. Next(次へ)」 をクリックして、ネットワークゾーンの詳細を確認します。

  5. Create(作成)」をクリックして、ネットワークゾーンの作成を完了します。

CLI を使用してネットワークゾーンを作成する

  1. 以下の例のようなコマンドを実行して、CLIからネットワーク・ゾーンを作成する。

    cbr zone-create コマンドの構文。

    ibmcloud cbr zone-create [--name NAME] [--description DESCRIPTION] [--addresses ADDRESSES] [--excluded EXCLUDED] [--vpc VPC] [--service-ref SERVICE-REF] [--file FILE]
    

    --addresses パラメータには、上記のステップでプライベートサービスのエンドポイントallowlistで見つけたサブネットをカンマ区切りにしたリストを指定する。

    単一クラスター用のネットワーク・ゾーンを作成するコマンドの例。

    ibmcloud cbr zone-create --name private-subnets-for-cluster-XXXXXX --description "Private subnets that are allowed to access the apisever of cluster XXXXXX" --addresses 10.30.50.0/24,10.249.94.103/32
    
    CBRゾーン作成例1
    パラメーター 説明
    --name ネットワークゾーンに名前をつける。
    --description ゾーンの説明を任意で記入する。
    --addresses 前のステップでマスター・サービスのエンドポイント許可リストにあったサブネットを入力する。

    アカウント内のすべてのクラスタに対してネットワーク・ゾーンを作成するコマンドの例。

    ibmcloud cbr zone-create --name private-subnets-for-all-clusters --description "Private subnets that are allowed to access my clusters" --addresses 10.30.50.0/24,10.249.94.103/32
    
    CBRゾーン作成例1
    パラメーター 説明
    --name ネットワークゾーンに名前をつける。
    --description ゾーンの説明を任意で記入する。
    --addresses 前のステップでマスター・サービスのエンドポイント許可リストにあったサブネットを入力する。
  2. CBRルール を作成して、CBRでクラスタを保護します。 このルールは、自分のクラスタ、またはこのアカウント内のすべてのクラスタを参照し、作成したネットワークゾーンも参照する。

ステップ3:CBRルールの作成

作成したネットワーク・ゾーンを参照するCBRルールを作成する。 CBRルールは、コンソール、CLI、またはAPIで作成できます。

コンソールでCBRルールを作成する

  1. CBRコンソールでネットワーク・ゾーンに移動します。

  2. 自分のアクションのリストをクリックし、編集をクリックします。

  3. サブネット、VPC、またはサービスをネットワーク・ゾーンに追加または削除して、1つまたは複数のクラスタにアクセスできるリソースを制御します。

CLI を使用して CBR ルールを作成する

以下の手順では、CLIを使用してネットワーク・ゾーンを作成する方法を説明します。

  1. ネットワークゾーンをリストアップし、先のステップで作成したネットワークゾーンのIDをメモしてください。

    ibmcloud cbr zones
    
  2. CBRルールを作成する。 単一のクラスタまたはアカウント内のすべてのクラスタを保護するルールを作成できます。

    cbr rule-create コマンドの構文。

    ibmcloud cbr rule-create [--description DESCRIPTION] [--context-attributes CONTEXT-ATTRIBUTES] [--resource-attributes RESOURCE-ATTRIBUTES] [--region REGION] [--resource RESOURCE] [--resource-group-id RESOURCE-GROUP-ID] [--resource-type RESOURCE-TYPE] [--service-instance SERVICE-INSTANCE-GUID] [--service-name SERVICE-NAME] [--zone-id ZONE-ID] [--tags TAGS] [--enforcement-mode ENFORCEMENT-MODE] [--file FILE]
    

    クラスタにパブリック・サービス・エンドポイントがある場合は、'--context-attributes endpointType=public パラメータを含めて、パブリック・サービス・エンドポイントへのトラフィックが許可されるようにする必要があります。 このオプションを入れないと、すべてのパブリック・トラフィックがブロックされる。

    このクラスタのみを保護するCBRルールを作成するために、先のステップでクラスタの「CLUSTER-ID」とネットワークゾーンの「NETWORK-ZONE-ID」を使用するコマンドの例。

    ibmcloud cbr rule-create --api-types crn:v1:bluemix:public:containers-kubernetes::::api-type:cluster --description "Protect private endpoint for cluster CLUSTER" --service-name containers-kubernetes --service-instance CLUSTER-ID --context-attributes endpointType=private,networkZoneId=NETWORK-ZONE-ID --context-attributes endpointType=public
    
    CBRルール作成例1
    パラメーター 説明
    --api-types crn:v1:bluemix:public:containers-kubernetes::::api-type:cluster 値はクラスタ制御プレーンマスタAPIを示す。 Red Hat OpenShift on IBM CloudのAPIタイプの詳細については、特定のAPIの保護 を参照してください。
    --description このルールに関する任意の説明。
    --service-name containers-kubernetes containers-kubernetes 値は、Red Hat OpenShift on IBM Cloudがルールの対象サービスであることを示す。
    --service-instance CLUSTER-ID 保護したいクラスタの「CLUSTER-ID 指定します。
    --context-attributes endpointType=private,networkZoneId=NETWORK-ZONE-ID このオプションは、'NETWORK-ZONE-ID ゾーンのリソースだけがクラスタのプライベート・エンドポイントにアクセスできるようにする。
    --context-attributes endpointType=public このオプションは、すべてのリソースがクラスタのパブリック・エンドポイントにアクセスできるようにします。
    networkZoneId 先ほど作成したゾーンの「NETWORK-ZONE-ID 指定する。

    このアカウント内のすべてのクラスターを保護するCBRルールを作成するために、先のステップのネットワークゾーンの「NETWORK-ZONE-ID 使用するコマンドの例。

    ibmcloud cbr rule-create --api-types crn:v1:bluemix:public:containers-kubernetes::::api-type:cluster --description "Protect private endpoint for all clusters" --service-name containers-kubernetes --context-attributes endpointType=private,networkZoneId=NETWORK-ZONE-ID --context-attributes endpointType=public
    
    CBRルール作成例2
    パラメーター 説明
    --api-types crn:v1:bluemix:public:containers-kubernetes::::api-type:cluster 値はクラスタ制御プレーンマスタAPIを示す。 Red Hat OpenShift on IBM CloudのAPIタイプの詳細については、特定のAPIの保護 を参照してください。
    --description このルールに関する任意の説明。
    --service-name containers-kubernetes 値は、Red Hat OpenShift on IBM Cloudがルールの対象サービスであることを示す。
    --context-attributes endpointType=private,networkZoneId=NETWORK-ZONE-ID このオプションは、'NETWORK-ZONE-ID ゾーンのリソースだけがクラスタのプライベート・エンドポイントにアクセスできるようにする。
    --context-attributes endpointType=public このオプションは、すべてのリソースがクラスタのパブリック・エンドポイントにアクセスできるようにします。
    networkZoneId 先ほど作成したゾーンの「NETWORK-ZONE-ID 指定する。

ルールを作成するときに、「A rule with the same resource attributes already exists」というエラーメッセージが表示された場合は、クラスタを保護するCBRルールがすでに存在します。 この場合、既存のルールを更新してネットワークゾーンを追加する必要があります。 詳細については、CBRルール更新 のドキュメントを参照。

ステップ4:プライベート・サービスのエンドポイント許可リストを無効にする

クラスタのプライベート・サービス・エンドポイントがCBRルールで保護されたので、プライベート・サービス・エンドポイントのallowlistを無効にできます。

次のコマンドを実行します。

ibmcloud oc cluster master private-service-endpoint allowlist disable -c CLUSTER

ステップ 5:CBR ルールのテスト

CBRルールがクラスタのプライベート・サービス・エンドポイントを保護していることを確認し、期待どおりに動作していることを確認します。 先ほど完了した のと同じテストを実行する。

  1. [{ターゲット_両方}。]

  2. プライベートサービスのエンドポイントをターゲットとする'kubeconfig を使用して、このクラスタに対して次のコマンドを実行します。

    oc get nodes
    
  3. このコマンドを、作成したネットワークゾーンのサブネットの1つに含まれるプライベートIPを使用するクライアント・システム(動作することを確認するため)と、ネットワークゾーンのサブネットのいずれにも含まれないプライベートIPを使用するクライアント・システム(失敗してタイムアウトすることを確認するため)の両方からテストする。

動作が期待したものと異なる場合は、クラスタ・アクセスにも影響を及ぼしている可能性があるため、クラスタに適用される可能性のある「containers-kubernetes サービスの他のCBRルールがあるかどうかを確認してください。

ステップ6:クラスタにアクセスできるサブネットを追加または削除する

CBRルールを使用してクラスタを保護するようになったので、ネットワーク・ゾーンを変更して、クラスタにアクセスできるサブネットを指定できます。

コンソールからネットワークゾーンを変更する

  1. CBR コンソールでネットワーク・ゾーンに移動します。

  2. ゾーンを選択し、アクションのリストをクリックして編集をクリックします。

  3. サブネット、VPC、またはサービスをネットワークゾーンに追加または削除して、選択したクラスタにアクセスできるリソースを制御します。

CLIからネットワークゾーンを変更する

クラスタにアクセスできるサブネットを追加するには、'cbr zone-update コマンドを使用する。

ibmcloud cbr zone-update <NETWORK-ZONE-ID> --name <NETWORK-ZONE-NAME> --addresses <EXISTING-SUBNETS>,<NEW-SUBNETS>

2つのサブネット'10.30.50.0/24 と'10.249.94.103/32 を持つアカウント内のすべてのクラスタに対して、先に作成されたネットワークゾーンの例を見てみましょう。 3つ目のサブネット「10.10.10.0/24」を追加するコマンドの例は以下の通り。

ibmcloud cbr zone-update <NETWORK-ZONE-ID> --name private-subnets-for-all-clusters --description "Private subnets that are allowed to access my clusters" --addresses 10.30.50.0/24,10.249.94.103/32,10.10.10.0/24

追加したいものだけでなく、そのネットワークゾーンに存在するすべてのエントリーを含める必要があります。 --addresses」に指定した値は、そのネットワークゾーンの現在のアドレスまたはサブネットリストを置き換える。

ゾーンからサブネットを削除するには、同じコマンドを使用し、'--addresses 値から 削除したいサブネットを省略すればよい。 この場合、クラスタへのアクセスを許可するサブネットのみを含めます。

プライベート・サービスのエンドポイントからコンテキスト・ベースの制限を取り除く

コンソールからルールを削除する

  1. CBRコンソールでルールに移動します。

  2. ルールを選択し、[アクションのリスト]をクリックして[削除] をクリックします。

  3. サブネット、VPC、またはサービスをネットワークゾーンに追加または削除して、選択したクラスタにアクセスできるリソースを制御します。

CLIからルールを削除する

ibmcloud cbr rule-delete <RULE-ID> または 'ibmcloud cbr rule-update <RULE-ID> コマンドで CBR ルールを削除できる。

クラスタまたはすべてのクラスタからCBR保護を完全に削除するには、クラスタに影響するすべてのCBRルールを削除するか無効にする必要があります。

ibmcloud cbr rule-update コマンドを使用して既存のルールを無効化または有効化する場合、 '--enforcement-mode disabled パラメータに加えて現在のルールのすべての属性を指定する必要がある。

次のステップ

CBRに関する詳細については、以下のリンクをご覧ください。