IngressClassParameters、IngressClassおよびイングレス・リソースの作成

OCIネイティブ・イングレス・コントローラを使用するために必要なKubernetesイングレス関連リソースを作成する方法をご覧ください。

OCIネイティブ・イングレス・コントローラ(スタンドアロン・プログラムとして、またはクラスタ・アドオンとして)をインストールした後、それを使用するには、多数の異なるKubernetesリソースを作成する必要があります:

  • IngressClassParametersリソース:このカスタム・リソースは、OCIネイティブ・イングレス・コントローラ用に作成するOCIロード・バランサの詳細を指定します。
  • IngressClassリソース:このリソースは、新しいロード・バランサの作成に使用されます。IngressClassリソースは、作成するロード・バランサのシェイプのIngressClassParametersリソースを参照し、OCIネイティブ・イングレス・コントローラIngressリソースのデフォルト・コントローラかどうかを指定します。
  • Ingressリソース:このリソースは、外部トラフィックをバックエンド・サービスにルーティングするルールを指定します。

このトピックに示すように、.yamlファイルでリソースを定義し、kubectl createコマンドを実行して各リソースを作成することで、各リソースを順番に作成します。

IngressClassParametersリソースの作成

カスタムIngressClassParametersリソースを使用して、OCIネイティブ・イングレス・コントローラ用に作成するOCIロード・バランサの詳細を指定します。

.yamlファイルにリソースを定義します。次に最小限の例を示します。

apiVersion: "ingress.oraclecloud.com/v1beta1"
kind: IngressClassParameters
metadata:
  name: <icp-name>
  namespace: <ns-name>
spec:
  compartmentId: "<compartment-ocid>"
  subnetId: "<subnet-ocid>"
  loadBalancerName: "<lb-name>"
  isPrivate: false
  maxBandwidthMbps: <max-bw>
  minBandwidthMbps: <min-bw>
  reservedPublicAddressId: <reserved-ip-ocid>

ここでは:

  • name: <icp-name>は、新しいIngressClassParametersリソースの名前です。
  • name: <ns-name>は、新しいIngressClassParametersリソースを作成するネームスペースの名前です。
  • compartmentId: "<compartment-ocid>"は、新しいロード・バランサが属するコンパートメントのOCIDです。
  • subnetId: "<subnet-ocid>"は、ロード・バランサのサブネットのOCIDです。
  • loadBalancerName: "<lb-name>"は、新しいロード・バランサに付ける名前です。
  • maxBandwidthMbps: <max-bw>は、ワークロードのピーク時に新しいロード・バランサがサポートする帯域幅の上限です。
  • minBandwidthMbps: <min-bw>は、新しいロード・バランサがワークロードに即時に準備できるように常に使用できる帯域幅の量です。
  • reservedPublicAddressId: <reserved-ip-ocid>は、オプションで、ロード・バランサに使用する既存の予約済パブリックIPアドレス・リソースのOCIDです。予約済パブリックIPアドレスを指定しない場合、ロード・バランサにはランダムなIPアドレスが割り当てられます。予約済パブリックIPアドレスの作成の詳細は、「予約済パブリックIPの作成」を参照してください。

例:

apiVersion: "ingress.oraclecloud.com/v1beta1"
kind: IngressClassParameters
metadata:
  name: native-ic-params
  namespace: acme-namespace
spec:
  compartmentId: "ocid1.compartment.oc1..aaaaaaaa______ddq"
  subnetId: "ocid1.subnet.oc1.iad.aaaaaaaa______dba"
  loadBalancerName: "native-ic-lb"
  isPrivate: false
  maxBandwidthMbps: 400
  minBandwidthMbps: 100

kubectl create -f <filename>.yamlを入力してリソースを作成します

IngressClassリソースの作成

IngressClassリソースを使用して、IngressリソースをOCIネイティブ・イングレス・コントローラおよびIngressClassParametersリソースに関連付けます。IngressClassリソースを使用して、OCIネイティブ・イングレス・コントローラIngressリソースのデフォルト・コントローラであるかどうかを指定することもできます。

.yamlファイルにリソースを定義します。次に最小限の例を示します。

apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
  name: <ic-name>
  annotations:
    ingressclass.kubernetes.io/is-default-class: "<true|false>"
spec:
  controller: oci.oraclecloud.com/native-ingress-controller
  parameters:
    scope: Namespace
    namespace: <ns-name>
    apiGroup: ingress.oraclecloud.com
    kind: ingressclassparameters
    name: <icp-name>

ここでは:

  • name: <ic-name>は、新しいIngressClassリソースの名前です。
  • ingressclass.kubernetes.io/is-default-class: "<true|false>"は、IngressリソースでingressClassNameが明示的に指定されていない場合に、このIngressClassが使用されるデフォルトのIngressClassかどうかを示します。デフォルトのIngressClass.を指定することをお薦めします。
  • controller: oci.oraclecloud.com/native-ingress-controllerは、使用するイングレス・コントローラとしてOCIネイティブ・イングレス・コントローラを指定します
  • namespace: <ns-name>は、.spec.parameters.scopeNamespaceに設定されているときに使用するパラメータを含むネームスペースの名前です。
  • name: <icp-name>は、OCIネイティブ・イングレス・コントローラ用に作成するOCIロード・バランサの詳細を指定するIngressClassParametersリソースの名前です。

例:

apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
  name: native-ic-ingress-class
  annotations:
    ingressclass.kubernetes.io/is-default-class: "true"
spec:
  controller: oci.oraclecloud.com/native-ingress-controller
  parameters:
    scope: Namespace
    namespace: acme-namespace
    apiGroup: ingress.oraclecloud.com
    kind: ingressclassparameters
    name: native-ic-params

kubectl create -f <filename>.yamlを入力してリソースを作成します

イングレス・リソースの作成

Ingressリソースを使用して、外部トラフィックをバックエンド・サービスにルーティングするルールを指定します。

.yamlファイルにリソースを定義します。次に最小限の例を示します。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: <i-name>
spec:
  ingressClassName: <ic-name>
  rules:
    <ingress-rule>
ここでは:
  • name: <i-name>は、Ingressリソースの名前です。
  • ingressClassName: <ic-name>は、使用するIngressClassリソースの名前です。IngressClassリソースは、使用するイングレス・コントローラと、OCIネイティブ・イングレス・コントローラ用に作成するOCIロード・バランサの詳細を含むIngressClassParametersリソースの名前の両方を指定します。ingressClassNameを指定しない場合、クラスタのデフォルトIngressClassが使用されます(注釈ingressclass.kubernetes.io/is-default-class: "true"を持つIngressClass )。
  • <ingress-rule>は、オプションでホストまたは1つ以上のパス要素(あるいはその両方)で構成されるルールです。各パスにはバックエンド(サービス名およびポート番号)があります。イングレス・コントローラは、ルールのホスト名(指定されている場合)および関連付けられたバックエンドへのパスに一致するリクエストをルーティングします。ルールでパスを指定する場合:
    • pathType: Exactを使用して、受信リクエスト・パスが、ルールに関連付けられたバックエンドにルーティングされるリクエストのルール内のパスと完全に一致する必要があることを示します
    • pathType:Prefixを使用して、受信リクエスト・パスの開始部分が、ルールの関連付けられたバックエンドにルーティングされるリクエストのルール内のパスと一致する必要があることを示します

    OCIネイティブ・イングレス・コントローラのルート・ルールの指定を参照してください。

例:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: native-ic-ingress
spec:
  ingressClassName: native-ic-ingress-class
  rules:
    - host: "foo.bar.com"
      http:
        paths:
          - pathType: Exact
            path: "/testecho1"
            backend:
              service:
                name: testecho1
                port:
                  number: 80

kubectl create -f <filename>.yamlを入力してリソースを作成します