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.scopeがNamespaceに設定されているときに使用するパラメータを含むネームスペースの名前です。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を入力してリソースを作成します