OCIネイティブ・イングレス・コントローラをスタンドアロン・プログラムとしてデプロイするための前提条件
OCIネイティブ・イングレス・コントローラをスタンドアロン・プログラムとしてデプロイして、受信トラフィックのロード・バランシングを行い、Kubernetesクラスタのワーカー・ノードで実行されているサービス・ポッドにルーティングする前に、何をする必要があるかを確認してください。
OCIネイティブ・イングレス・コントローラをスタンドアロン・プログラムとしてデプロイする前に:
- ネットワーク・タイプとしてVCNネイティブ・ポッド・ネットワーキングまたはフラッシュ・オーバーレイのいずれかを持つ新しいクラスタを作成するか、既存のクラスタを識別します。クラスタは、拡張クラスタまたは基本クラスタです。クラスタでKubernetesバージョン1.26以降が実行されている必要があります。クラスタの作成を参照してください。
- ロード・バランサのサブネットとの間のインバウンドおよびアウトバウンド・トラフィックを許可するように、ロード・バランサ・セキュリティ・ルールを構成します。Load Balancer Subnet Configurationを参照してください。
- インスタンス・プリンシパル、ユーザー・プリンシパルまたはワークロード・アイデンティティ・プリンシパルを設定して、OCIネイティブ・イングレス・コントローラが他のOracle Cloud Infrastructureサービスおよびリソースにアクセスできるようにします。OCIサービスおよびリソースへのアクセスを有効にするためのInstance Principal、User PrincipalまたはWorkload Identity Principalの設定を参照してください。
- OCIネイティブ・イングレス・コントローラがリソースにアクセスできるように、インスタンス・プリンシパル、ユーザー・プリンシパルまたはワークロード・アイデンティティ・プリンシパルに権限を付与します。スタンドアロン・プログラムとしてのOCIネイティブ・イングレス・コントローラへの権限の付与を参照してください。
- cert-managerをインストールして、ポッド・レディネス・ゲート機能をサポートするWebフック・サーバーに必要なTLS証明書を生成および管理します。Installing cert-managerを参照してください。
- Helm CLIをインストールして、2つの方法のいずれかでOCIネイティブ・イングレス・コントローラをインストールできるようにします。スタンドアロン・プログラムとしてOCIネイティブ・イングレス・コントローラをインストールするためのHelm CLIのインストールを参照してください。
- OCIネイティブ・イングレス・コントローラ・リポジトリをGitHubからローカル・リポジトリにクローニングして、OCIネイティブ・イングレス・コントローラをデプロイし、デプロイメントのパラメータ値を指定できます。OCIネイティブ・イングレス・コントローラ・リポジトリのクローニングおよびvalues.yamlのパラメータの設定を参照してください。
OCIサービスおよびリソースへのアクセスを有効にするためのInstance Principal、User PrincipalまたはWorkload Identity Principalの設定
ロード・バランサを作成し、受信トラフィックをルーティングするために、OCIネイティブ・イングレス・コントローラは、スタンドアロン・プログラムとしてインストールされているか、クラスタ・アドオンとしてインストールされているかにかかわらず、他のOracle Cloud Infrastructureサービス・リソース(Load Balancerサービスおよび証明書サービスを含む)に対してアクションを実行します。OCIサービス・リソースでこれらのアクションを実行するために、OCIネイティブ・イングレス・コントローラ・ポッドは、認可されたアクター(またはプリンシパル)の資格証明を使用します。現在、OCIネイティブ・イングレス・コントローラがOCIサービス・リソースに対してアクションを実行できるように、次のタイプのプリンシパルを設定できます:
- インスタンス・プリンシパル: OCIネイティブ・イングレス・コントローラは、実行されているインスタンスのアイデンティティを使用します。インスタンス・プリンシパルを使用したOCIサービスおよびリソースへのアクセスの有効化を参照してください。
- ユーザー・プリンシパル: OCIネイティブ・イングレス・コントローラは、OCIユーザーのアイデンティティを使用します。ユーザー・プリンシパルを使用したOCIサービスおよびリソースへのアクセスの有効化を参照してください。
- ワークロード・アイデンティティ・プリンシパル: OCIネイティブ・イングレス・コントローラは、Kubernetesクラスタで実行されているワークロード・リソースのアイデンティティを使用します。ワークロード・アイデンティティ・プリンシパルを使用したOCIサービスおよびリソースへのアクセスの有効化を参照してください。
ノート:
- OCIネイティブ・イングレス・コントローラがOCIサービスおよびリソースにアクセスできるようにするインスタンス・プリンシパルの使用は、仮想ノードを持つクラスタではサポートされていません。
- OCIネイティブ・イングレス・コントローラがOCIサービスおよびリソースにアクセスできるようにするワークロード・アイデンティティ・プリンシパルの使用は、拡張クラスタでサポートされていますが、基本クラスタではサポートされていません。
インスタンス・プリンシパルを使用したOCIサービスおよびリソースへのアクセスの有効化
OCIネイティブ・イングレス・コントローラがOCIサービス・リソースに対してアクションを実行できるように、インスタンス・プリンシパルを設定できます。管理対象ノードではインスタンス・プリンシパルのみを使用できます。
インスタンス・プリンシパルを設定するには:
- 新しい動的グループを作成して、クラスタのワーカー・ノードをホストするコンピュート・インスタンスを含めます:
- ナビゲーション・メニューを開き、「アイデンティティとセキュリティ」をクリックします。「アイデンティティ」で、「ドメイン」をクリックします。「アイデンティティ・ドメイン」で、「動的グループ」をクリックします。
-
コンピュート・インスタンスが属するコンパートメントを選択します。
-
動的グループを作成するにはの手順に従って、動的グループに名前を付けます(たとえば、
acme-oke-native-ingress-controller-dyn-grp
)。 - コンパートメント内のコンピュート・インスタンスを含むルールを次の形式で入力します:
ALL {instance.compartment.id = '<compartment-ocid>'}
<compartment-ocid>
は、クラスタ・ノード・プールが作成されるコンパートメントのOCIDです。例:
ALL {instance.compartment.id = 'ocid1.compartment.oc1..aaaaaaaa23______smwa'}
- 「動的グループの作成」をクリックします。
OCIネイティブ・イングレス・コントローラをデプロイする前に、次のことを行います:
- 動的グループを介してOCIネイティブ・イングレス・コントローラが実行されているインスタンスに権限を付与します。スタンドアロン・プログラムとしてのOCIネイティブ・イングレス・コントローラへの権限の付与を参照してください。
- values.yamlファイルで次を指定して、OCIネイティブ・イングレス・コントローラでインスタンス・プリンシパルを使用することを指定します:
authType: instance
OCIネイティブ・イングレス・コントローラ・リポジトリのクローニングおよびvalues.yamlのパラメータの設定を参照してください。
ユーザー・プリンシパルを使用したOCIサービスおよびリソースへのアクセスの有効化
OCIネイティブ・イングレス・コントローラがOCIサービス・リソースに対してアクションを実行できるように、ユーザー・プリンシパルを設定できます。
ユーザー・プリンシパルを設定するには:
- 適切なユーザーがまだ存在しない場合は、IAMでユーザーを作成します(ユーザーを作成するにはを参照)。
- 適切なグループがまだ存在しない場合は、IAMにグループを作成します(グループを作成するにはを参照)。
- ユーザーをグループに追加します(「ユーザーのグループへの追加手順」を参照)。
-
次の項目を取得します:
- PEMフォーマットのRSAキー・ペア(最小2048ビット)。API署名キーの生成方法を参照してください。
- 公開キーのフィンガープリント。キーのフィンガープリントの取得方法を参照してください。
- テナンシのOCIDおよびユーザーのOCID。テナンシのOCIDとユーザーのOCIDを取得する場所を参照してください。
- コンソールでキー・ペアから公開キーをアップロードします。公開キーのアップロード方法を参照してください。
- 次の形式で、資格証明情報を含む.yamlファイルとして構成ファイルを作成します。
auth: region: <region-identifier> passphrase: <passphrase> user: <user-ocid> fingerprint: <fingerprint> tenancy: <tenancy-ocid>
ここでは:region: <region-identifier>
は、クラスタが存在するリージョンです。例:us-ashburn-1
passphrase: <passphrase>
は、キーが暗号化されている場合に使用するパスフレーズを指定します。user: <user-ocid>
は、OCIネイティブ・イングレス・コントローラが使用するユーザーのOCIDです。fingerprint: <fingerprint>
は、公開キーの指紋です。tenancy: <tenancy-ocid>
は、クラスタを含むテナンシのOCIDです。
例:
auth: region: us-ashburn-1 passphrase: examplepass user: ocid1.user.oc1..aaaaaaaa_example fingerprint: 67:d9:74:4b:21:example tenancy: ocid1.tenancy.oc1..aaaaaaaa_example
- 次のように入力して、クラスタにKubernetesシークレット・リソースを作成します:
kubectl create secret generic <secret-name> \ --from-file=config=<config-file>.yaml \ --from-file=private-key=<private-key-file-path>.pem \ --namespace <namespace>
ここでは:<secret-name>
は、作成するシークレットの名前を指定します。たとえば、oci-config
--from-file=config=<config-file>.yaml
は、以前に作成した資格証明情報を含む.yamlファイルの名前とパスを指定します。例:user-auth-config.yaml
--from-file=private-key=./oci/oci_api_key.pem
は、ダウンロードした秘密キー・ファイルの名前とパスを指定します。たとえば、./oci/oci_api_key.pem
です。--namespace <namespace>
は、OCIネイティブ・イングレス・コントローラを含むネームスペースを指定します
例:
kubectl create secret generic oci-config \ --from-file=config=user-auth-config.yaml \ --from-file=private-key=./oci/oci_api_key.pem \ --namespace acme-namespace
OCIネイティブ・イングレス・コントローラをデプロイする前に、次のことを行います:
- ユーザーが属するグループを介してユーザーに権限を付与します。スタンドアロン・プログラムとしてのOCIネイティブ・イングレス・コントローラへの権限の付与を参照してください。
- values.yamlファイルで次を指定して、OCIネイティブ・イングレス・コントローラでユーザー・プリンシパルを使用することを指定します:
authType: user authSecretName: <secret-name>
<secret-name>
は、以前に作成したKubernetesシークレットの名前です。例:authType: user authSecretName: oci-config
OCIネイティブ・イングレス・コントローラ・リポジトリのクローニングおよびvalues.yamlのパラメータの設定を参照してください。
ワークロード・アイデンティティ・プリンシパルを使用したOCIサービスおよびリソースへのアクセスの有効化
OCIネイティブ・イングレス・コントローラがOCIサービス・リソースに対してアクションを実行できるように、ワークロード・アイデンティティ・プリンシパルを設定できます。ワークロード・アイデンティティ・プリンシパルは、拡張クラスタでのみ使用できます。
ワークロード・アイデンティティ・プリンシパルを設定するには:
- クラスタのOCIDを取得します(たとえば、コンソールの「クラスタの詳細」タブを使用します)。
-
OCIネイティブ・イングレス・コントローラをデプロイする前に、次のことを行います:
- OCIネイティブ・イングレス・コントローラのワークロード・アイデンティティに対する権限を付与します。スタンドアロン・プログラムとしてのOCIネイティブ・イングレス・コントローラへの権限の付与を参照してください。
- values.yamlファイルで次を指定して、OCIネイティブ・イングレス・コントローラでワークロード・アイデンティティ・プリンシパルを使用することを指定します:
authType: workloadIdentity
OCIネイティブ・イングレス・コントローラ・リポジトリのクローニングおよびvalues.yamlのパラメータの設定を参照してください。
-
deployment.yamlファイルで
OCI_RESOURCE_PRINCIPAL_VERSION
およびOCI_RESOURCE_PRINCIPAL_REGION
環境変数を設定します。OCIネイティブ・イングレス・コントローラ・リポジトリのクローニングおよびvalues.yamlのパラメータの設定を参照してください。
スタンドアロン・プログラムとしてのOCIネイティブ・イングレス・コントローラへの権限の付与
OCIネイティブ・イングレス・コントローラには、他のOracle Cloud Infrastructureサービス(Load Balancerサービスや証明書サービスなど)によって作成されたリソースにアクセスする権限が必要です。OCIネイティブ・イングレス・コントローラをスタンドアロン・プログラムとしてインストールするか、クラスタ・アドオンとしてインストールするかに関係なく、付与する権限は同じです。また、OCIネイティブ・イングレス・コントローラのインスタンス・プリンシパル、ユーザー・プリンシパルまたはワークロード・アイデンティティ・プリンシパルを設定したかどうかに関係なく、権限は同じです。ただし、これらの権限を付与する方法は、設定したプリンシパルのタイプによって異なります。
- インスタンス・プリンシパルを使用する場合、OCIネイティブ・イングレス・コントローラは、インスタンスが属する動的グループを介して、インスタンスが実行されているインスタンスに付与された権限を継承します。インスタンス・プリンシパルの動的グループの作成の詳細は、インスタンス・プリンシパルを使用したOCIサービスおよびリソースへのアクセスの有効化を参照してください。
- ユーザー・プリンシパルを使用する場合、OCIネイティブ・イングレス・コントローラは、ユーザーが属するグループを介してユーザーに付与された権限を継承します。ユーザーおよびユーザー・プリンシパルのグループの作成の詳細は、ユーザー・プリンシパルを使用したOCIサービスおよびリソースへのアクセスの有効化を参照してください。
- ワークロード・アイデンティティ・プリンシパルを使用する場合、OCIネイティブ・イングレス・コントローラは、インストール時にOCIネイティブ・イングレス・コントローラ用に作成されたKubernetesサービス・アカウントおよびネームスペースで、指定されたクラスタで実行されているワークロードに付与された権限を継承します。詳細は、「ワークロード・アイデンティティ・プリンシパルを使用したOCIサービスおよびリソースへのアクセスの有効化」を参照してください。
OCIネイティブ・イングレス・コントローラの権限を設定するには、OCIサービスおよびリソースにアクセスするためのポリシー・ステートメントを使用して、グループ(ユーザー・プリンシパルの場合)、動的グループ(インスタンス・プリンシパルの場合)、またはワークロード(ワークロード・アイデンティティ・プリンシパルの場合)のポリシーを作成します:
- ナビゲーション・メニューを開き、「アイデンティティとセキュリティ」をクリックします。「アイデンティティ」で、「ポリシー」をクリックします。
- ポリシーを作成するにはの説明に従って、ポリシーに名前を付けます(たとえば、
acme-oke-native-ingress-controller-policy
)。 -
インスタンス・プリンシパルまたはユーザー・プリンシパルを使用している場合は、OCIネイティブ・イングレス・コントローラで使用されるOCIサービスおよびリソースへのアクセスを許可するポリシー・ステートメントを次の形式で入力します:
Allow <group|dynamic-group> <subject-name> to <verb> <resource> in <location>
ここでは:
<group|dynamic-group>
は、group
(ユーザー・プリンシパルの場合)またはdynamic-group
(インスタンス・プリンシパルの場合)のいずれかです。<subject-name>
は、グループの名前(ユーザー・プリンシパルの場合)または動的グループの名前(インスタンス・プリンシパルの場合)のいずれかです。たとえば、acme-oke-nat-ing-cont-dyn-grp
です。グループまたは動的グループがデフォルトのアイデンティティ・ドメインにない場合は、<group|dynamic-group> '<identity-domain-name>'/'<group-name|dynamic-group-name>'
の形式で、グループまたは動的グループ名の前にアイデンティティ・ドメイン名を入力します。group id <group-ocid>
またはdynamic-group id <dynamic-group-ocid>
の形式で、そのOCIDを使用してグループまたは動的グループを指定することもできます。<verb> <resource>
は次のいずれかです(これらはすべて、個別のポリシー・ステートメントで必要です)。manage load-balancers
use virtual-network-family
manage cabundles
manage cabundle-associations
manage leaf-certificates
read leaf-certificate-bundles
manage certificate-associations
read certificate-authorities
manage certificate-authority-associations
read certificate-authority-bundles
read public-ips
manage floating-ips
manage waf-family
read cluster-family
use tag-namespaces
(OCIネイティブ・イングレス・コントローラで定義済タグをロード・バランサに適用する場合にのみ必要です。ロード・バランサへの定義済タグの適用を参照してください)
<location>
は次のいずれかです。tenancy
: OCIネイティブ・イングレス・コントローラがテナンシ全体のリソースにアクセスできるようにする場合。compartment <compartment-name>
: OCIネイティブ・イングレス・コントローラに、compartment <compartment-name>
として指定した名前のコンパートメント内のリソースへのアクセスのみを許可する場合。
例:
Allow dynamic-group acme-oke-nat-ing-cont-dyn-grp to manage load-balancers in compartment acme-oke-cluster-compartment
ポリシー・ステートメントの完全なリストの構文は次のとおりです。
Allow <group|dynamic-group> <subject-name> to manage load-balancers in <location> Allow <group|dynamic-group> <subject-name> to use virtual-network-family in <location> Allow <group|dynamic-group> <subject-name> to manage cabundles in <location> Allow <group|dynamic-group> <subject-name> to manage cabundle-associations in <location> Allow <group|dynamic-group> <subject-name> to manage leaf-certificates in <location> Allow <group|dynamic-group> <subject-name> to read leaf-certificate-bundles in <location> Allow <group|dynamic-group> <subject-name> to manage certificate-associations in <location> Allow <group|dynamic-group> <subject-name> to read certificate-authorities in <location> Allow <group|dynamic-group> <subject-name> to manage certificate-authority-associations in <location> Allow <group|dynamic-group> <subject-name> to read certificate-authority-bundles in <location> Allow <group|dynamic-group> <subject-name> to read public-ips in <location> Allow <group|dynamic-group> <subject-name> to manage floating-ips in <location> Allow <group|dynamic-group> <subject-name> to manage waf-family in <location> Allow <group|dynamic-group> <subject-name> to read cluster-family in <location> Allow <group|dynamic-group> <subject-name> to use tag-namespaces in <location>
ポリシー・ステートメントの完全なリストの例:
Allow dynamic-group acme-oke-nat-ing-cont-dyn-grp to manage load-balancers in compartment acme-oke-cluster-compartment Allow dynamic-group acme-oke-nat-ing-cont-dyn-grp to use virtual-network-family in compartment acme-oke-cluster-compartment Allow dynamic-group acme-oke-nat-ing-cont-dyn-grp to manage cabundles in compartment acme-oke-cluster-compartment Allow dynamic-group acme-oke-nat-ing-cont-dyn-grp to manage cabundle-associations in compartment acme-oke-cluster-compartment Allow dynamic-group acme-oke-nat-ing-cont-dyn-grp to manage leaf-certificates in compartment acme-oke-cluster-compartment Allow dynamic-group acme-oke-nat-ing-cont-dyn-grp to read leaf-certificate-bundles in compartment acme-oke-cluster-compartment Allow dynamic-group acme-oke-nat-ing-cont-dyn-grp to manage certificate-associations in compartment acme-oke-cluster-compartment Allow dynamic-group acme-oke-nat-ing-cont-dyn-grp to read certificate-authorities in compartment acme-oke-cluster-compartment Allow dynamic-group acme-oke-nat-ing-cont-dyn-grp to manage certificate-authority-associations in compartment acme-oke-cluster-compartment Allow dynamic-group acme-oke-nat-ing-cont-dyn-grp to read certificate-authority-bundles in compartment acme-oke-cluster-compartment Allow dynamic-group acme-oke-nat-ing-cont-dyn-grp to read public-ips in compartment acme-oke-cluster-compartment Allow dynamic-group acme-oke-nat-ing-cont-dyn-grp to manage floating-ips in compartment acme-oke-cluster-compartment Allow dynamic-group acme-oke-nat-ing-cont-dyn-grp to manage waf-family in compartment acme-oke-cluster-compartment Allow dynamic-group acme-oke-nat-ing-cont-dyn-grp to read cluster-family in compartment acme-oke-cluster-compartment Allow dynamic-group acme-oke-nat-ing-cont-dyn-grp to use tag-namespaces in compartment acme-oke-cluster-compartment
- ワークロード・アイデンティティ・プリンシパルを使用している場合は、OCIネイティブ・イングレス・コントローラで使用されるOCIサービスおよびリソースへのアクセスを許可するポリシー・ステートメントを次の形式で入力します:
Allow any-user to <verb> <resource> in <location> where all {request.principal.type = 'workload', request.principal.namespace = 'native-ingress-controller-system', request.principal.service_account = 'oci-native-ingress-controller', request.principal.cluster_id = '<cluster-ocid>'}
ここでは:
<verb> <resource>
は次のいずれかです(これらはすべて、個別のポリシー・ステートメントで必要です)。manage load-balancers
use virtual-network-family
manage cabundles
manage cabundle-associations
manage leaf-certificates
read leaf-certificate-bundles
manage certificate-associations
read certificate-authorities
manage certificate-authority-associations
read certificate-authority-bundles
read public-ips
manage floating-ips
manage waf-family
read cluster-family
use tag-namespaces
(OCIネイティブ・イングレス・コントローラで定義済タグをロード・バランサに適用する場合にのみ必要です。ロード・バランサへの定義済タグの適用を参照してください)
<location>
は次のいずれかです。tenancy
: OCIネイティブ・イングレス・コントローラがテナンシ全体のリソースにアクセスできるようにする場合。compartment <compartment-name>
: OCIネイティブ・イングレス・コントローラに、compartment <compartment-name>
として指定した名前のコンパートメント内のリソースへのアクセスのみを許可する場合。
request.principal.namespace = 'native-ingress-controller-system'
は、インストール時にOCIネイティブ・イングレス・コントローラ用に作成されたネームスペースの名前です。request.principal.service_account = 'oci-native-ingress-controller'
は、インストール時にOCIネイティブ・イングレス・コントローラ用に作成されたサービス・アカウントの名前です。<cluster-ocid>
は、以前に取得したクラスタのOCIDです。
例:
Allow any-user to manage load-balancers in tenancy where all {request.principal.type = 'workload', request.principal.namespace = 'native-ingress-controller-system', request.principal.service_account = 'oci-native-ingress-controller', request.principal.cluster_id = 'ocid1.cluster.oc1.iad.aaaaaaaa______ska'}
ポリシー・ステートメントの完全なリストの構文は次のとおりです。
Allow any-user to manage load-balancers in <location> where all {request.principal.type = 'workload', request.principal.namespace = 'native-ingress-controller-system', request.principal.service_account = 'oci-native-ingress-controller', request.principal.cluster_id = '<cluster-ocid>'} Allow any-user to use virtual-network-family in <location> where all {request.principal.type = 'workload', request.principal.namespace = 'native-ingress-controller-system', request.principal.service_account = 'oci-native-ingress-controller', request.principal.cluster_id = '<cluster-ocid>'} Allow any-user to manage cabundles in <location> where all {request.principal.type = 'workload', request.principal.namespace = 'native-ingress-controller-system', request.principal.service_account = 'oci-native-ingress-controller', request.principal.cluster_id = '<cluster-ocid>'} Allow any-user to manage cabundle-associations in <location> where all {request.principal.type = 'workload', request.principal.namespace = 'native-ingress-controller-system', request.principal.service_account = 'oci-native-ingress-controller', request.principal.cluster_id = '<cluster-ocid>'} Allow any-user to manage leaf-certificates in <location> where all {request.principal.type = 'workload', request.principal.namespace = 'native-ingress-controller-system', request.principal.service_account = 'oci-native-ingress-controller', request.principal.cluster_id = '<cluster-ocid>'} Allow any-user to read leaf-certificate-bundles in <location> where all {request.principal.type = 'workload', request.principal.namespace = 'native-ingress-controller-system', request.principal.service_account = 'oci-native-ingress-controller', request.principal.cluster_id = '<cluster-ocid>'} Allow any-user to manage certificate-associations in <location> where all {request.principal.type = 'workload', request.principal.namespace = 'native-ingress-controller-system', request.principal.service_account = 'oci-native-ingress-controller', request.principal.cluster_id = '<cluster-ocid>'} Allow any-user to read certificate-authorities in <location> where all {request.principal.type = 'workload', request.principal.namespace = 'native-ingress-controller-system', request.principal.service_account = 'oci-native-ingress-controller', request.principal.cluster_id = '<cluster-ocid>'} Allow any-user to manage certificate-authority-associations in <location> where all {request.principal.type = 'workload', request.principal.namespace = 'native-ingress-controller-system', request.principal.service_account = 'oci-native-ingress-controller', request.principal.cluster_id = '<cluster-ocid>'} Allow any-user to read certificate-authority-bundles in <location> where all {request.principal.type = 'workload', request.principal.namespace = 'native-ingress-controller-system', request.principal.service_account = 'oci-native-ingress-controller', request.principal.cluster_id = '<cluster-ocid>'} Allow any-user to read public-ips in <location> where all {request.principal.type = 'workload', request.principal.namespace = 'native-ingress-controller-system', request.principal.service_account = 'oci-native-ingress-controller', request.principal.cluster_id = '<cluster-ocid>'} Allow any-user to manage floating-ips in <location> where all {request.principal.type = 'workload', request.principal.namespace = 'native-ingress-controller-system', request.principal.service_account = 'oci-native-ingress-controller', request.principal.cluster_id = '<cluster-ocid>'} Allow any-user to manage waf-family in <location> where all {request.principal.type = 'workload', request.principal.namespace = 'native-ingress-controller-system', request.principal.service_account = 'oci-native-ingress-controller', request.principal.cluster_id = '<cluster-ocid>'} Allow any-user to read cluster-family in <location> where all {request.principal.type = 'workload', request.principal.namespace = 'native-ingress-controller-system', request.principal.service_account = 'oci-native-ingress-controller', request.principal.cluster_id = '<cluster-ocid>'} Allow any-user to use tag-namespaces in <location> where all {request.principal.type = 'workload', request.principal.namespace = 'native-ingress-controller-system', request.principal.service_account = 'oci-native-ingress-controller', request.principal.cluster_id = '<cluster-ocid>'}
cert-managerのインストール
OCIネイティブ・イングレス・コントローラは、スタンドアロン・プログラムとしてインストールされるか、クラスタ・アドオンとしてインストールされるかに関係なく、Webフックを使用してポッド準備ゲートをポッド仕様に注入します。セキュリティを確保するには、Webフック・サーバーをHTTPSモードで実行する必要があります。このモードでは、証明書とキーのペアが必要です。OCIネイティブ・イングレス・コントローラは、証明書マネージャ(cert-managerとも呼ばれる)を使用してWebフック・サーバーの証明書とキーを生成および管理するため、ポッド・レディネス・ゲートを使用するには、クラスタにcert-managerをインストールする必要があります。
OCIネイティブ・イングレス・コントローラをスタンドアロン・プログラムとしてインストールするか、クラスタ・アドオンとしてインストールするかに関係なく、次の2つの方法でcert-managerをインストールおよび実行できます。
-
次のように入力して、cert-managerをオープンソース製品としてインストールおよび実行できます。
kubectl apply -f https://github.com/jetstack/cert-manager/releases/latest/download/cert-manager.yaml
-
cert-managerはクラスタ・アドオンとしてインストールおよび実行できます。cert-managerをクラスタ・アドオンとしてインストールする方法の詳細は、「クラスタ・アドオンのインストール」を参照してください。
cert-managerの詳細は、cert-manager.ioのドキュメントを参照してください。
スタンドアロン・プログラムとしてOCIネイティブ・イングレス・コントローラをインストールするためのHelm CLIのインストール
Helmは、Kubernetesのパッケージ・マネージャです。Helmは、Helmチャートと呼ばれる1つの再利用可能なパッケージに構成ファイルを組み合せることで、Kubernetesアプリケーションの作成、パッケージ化、構成およびデプロイに一般的に使用されます。チャートは、チャート・アーカイブと呼ばれるアーカイブ形式でパッケージ化および配布されます。チャートには、Kubernetesクラスタに一連のKubernetesリソースをインストールするために必要な情報が含まれています。チャートには次のものが含まれます。
- アプリケーションを記述するchart.yamlファイル。
- values.yamlファイル。アプリケーション・パラメータのデフォルト値を指定します。
- アプリケーションで使用されるファイルのテンプレート
- その他の依存性
Helmには、コマンドライン・クライアントであるHelm CLI (helm、すべて小文字とも呼ばれる)もあります。
OCIネイティブ・イングレス・コントローラをスタンドアロン・プログラムとしてインストールするには、OCIネイティブ・イングレス・コントローラをHelmチャートとして使用可能にします。OCIネイティブ・イングレス・コントローラ・チャートをインストールする前に、まずHelm CLIをインストールする必要があります。
Helm CLIをインストールするには、Helmインストールドキュメントの手順に従って、適切なtar.gzまたはzipアーカイブ・ファイルをダウンロードして抽出します。
OCIネイティブ・イングレス・コントローラ・リポジトリのクローニングおよびvalues.yamlのパラメータの設定
OCIネイティブ・イングレス・コントローラをクローニングし、OCIネイティブ・イングレス・コントローラをスタンドアロン・プログラムとしてインストールする準備としてvalues.yamlにパラメータを設定するには:
- 次のように入力して、GitHubからOCIネイティブ・イングレス・コントローラ・リポジトリをクローニングします:
git clone https://github.com/oracle/oci-native-ingress-controller
- ローカルGitリポジトリで、
oci-native-ingress-controller
ディレクトリに移動し、テキスト・エディタでvalues.yaml
ファイルを開きます。 values.yaml
ファイルで、compartment_id
パラメータを、OCIネイティブ・イングレス・コントローラがOCIロード・バランサおよび証明書を作成するコンパートメントのOCIDに設定します。例:compartment_id: "ocid1.compartment.oc1..aaaaaaaa______ddq"
values.yaml
ファイルで、subnet_id
パラメータをロード・バランサのサブネットのOCIDに設定します。例:subnet_id: "ocid1.subnet.oc1.iad.aaaaaaaa______dba"
values.yaml
ファイルで、cluster_id
パラメータをクラスタのOCIDに設定します。例:cluster_id: "ocid1.cluster.oc1.iad.aaaaaaaa______ska"
values.yaml
ファイルで、次のようにOCIネイティブ・イングレス・コントローラがOCIサービスおよびリソースにアクセスする方法を指定します:- OCIネイティブ・イングレス・コントローラがインスタンス・プリンシパルを使用してOCIサービスおよびリソースにアクセスするように指定するには、次のように
authType
パラメータを設定します:authType: instance
- OCIネイティブ・イングレス・コントローラがユーザー・プリンシパルを使用してOCIサービスおよびリソースにアクセスするように指定するには、次のように
authType
およびauthSecretName
パラメータを設定します:authType: user authSecretName: <secret-name>
<secret-name>
は、以前に作成したKubernetesシークレットの名前です。例:authType: user authSecretName: oci-config
ユーザー・プリンシパルを使用したOCIサービスおよびリソースへのアクセスの有効化を参照してください。
- OCIネイティブ・イングレス・コントローラがワークロード・アイデンティティ・プリンシパルを使用してOCIサービスおよびリソースにアクセスするように指定するには、次のように
authType
パラメータを設定します:authType: workloadIdentity
ワークロード・アイデンティティ・プリンシパルを使用したOCIサービスおよびリソースへのアクセスの有効化を参照してください。
- OCIネイティブ・イングレス・コントローラがインスタンス・プリンシパルを使用してOCIサービスおよびリソースにアクセスするように指定するには、次のように
- (オプション)可用性の理由でOCIネイティブ・イングレス・コントローラの複数のインスタンスを実行する場合は、
values.yaml
ファイルのreplicaCount
の値を変更します。例:
デフォルトでは、replicaCount: 3
replicaCount
は1
に設定されています。これは、OCIネイティブ・イングレス・コントローラの1つのインスタンスが1つのポッドとして実行されることを意味します。可用性を確保するために、replicaCount
(通常は2
または3
)を増やして、複数のOCIネイティブ・イングレス・コントローラ・インスタンスを異なるポッドとして実行できます。1つのポッドがリーダーとして指名され、OCIネイティブ・イングレス・コントローラとして機能し、残りのポッドはパッシブ状態で待機します。その後、リーダーが使用できなくなった場合、他のポッドの1つがリーダーとして指名され、OCIネイティブ・イングレス・コントローラとして機能します。 values.yaml
ファイルで行った変更を保存し、ファイルを閉じます。- OCIネイティブ・イングレス・コントローラでワークロード・アイデンティティ・プリンシパルを使用してOCIサービスおよびリソースにアクセスする場合は、次のように追加の環境変数を設定する必要があります。
- ローカルGitリポジトリで、
oci-native-ingress-controller/templates
ディレクトリに移動し、テキスト・エディタでdeployment.yaml
ファイルを開きます。 deployment.yaml
ファイルで、次のように環境変数を設定します。env: - name: OCI_RESOURCE_PRINCIPAL_VERSION value: "2.2" - name: OCI_RESOURCE_PRINCIPAL_REGION value: "us-ashburn-1"
deployment.yaml
ファイルで行った変更を保存し、ファイルを閉じます。
- ローカルGitリポジトリで、