2.12.3. Ingress Operator の Gateway API を使い始める


GatewayClass リソースを作成すると、そのリソースによって Gateway API がクラスター上で使用できるように設定されます。

重要

OpenShift Container Platform Gateway API 実装は、Cluster Ingress Operator (CIO) を利用して、openshift- Ingress namespace に特定のバージョンの OpenShift Service Mesh (OSSM v3.x) をインストールし、管理します。

クラスターのいずれかの namespace にアクティブな OpenShift Service Mesh (OSSM v2.x) サブスクリプションがすでに存在する場合、競合が発生します。OSSM v2.x と OSSM v3.x は同じクラスター上に配置できません。

GatewayClass リソースを作成する際に、競合する OSSM v2.x サブスクリプションが存在する場合、クラスターイングレス Operator は必要な OSSM v3.x コンポーネントのインストールを試みますが、このインストール操作は失敗します。その結果、Gateway や HTTPRoute などの Gateway API リソースは効果を発揮せず、トラフィックをルーティングするためのプロキシーも設定されません。OpenShift Container Platform 4.19 では、この障害は通知されません。OpenShift Container Platform 4.20 以降では、この競合により、イングレス ClusterOperator が Degraded ステータスを報告するようになります。

GatewayClass を作成して Gateway API を有効にする前に、クラスターにアクティブな OSSM v2.x サブスクリプションがないか確認してください。

手順

  1. GatewayClass オブジェクトを作成します。

    1. 次の情報が含まれる YAML ファイル openshift-default.yaml を作成します。

      GatewayClass CR の例

      apiVersion: gateway.networking.k8s.io/v1
      kind: GatewayClass
      metadata:
        name: openshift-default
      spec:
        controllerName: openshift.io/gateway-controller/v1

      • controllerName: コントローラー名。

        重要

        Ingress Operator がこれを管理するには、コントローラー名が表示されているとおりである必要があります。このフィールドを他の値に設定すると、Ingress Operator は GatewayClass オブジェクトと、それに関連付けられたすべての GatewayGRPCRoute、および HTTPRoute オブジェクトを無視します。コントローラー名は OpenShift Container Platform の Gateway API の実装に関連付けられており、許可されるコントローラー名は openshift.io/gateway-controller/v1 のみです。

    2. 次のコマンドを実行して、GatewayClass リソースを作成します。

      $ oc create -f openshift-default.yaml

      出力例

      gatewayclass.gateway.networking.k8s.io/openshift-default created

      GatewayClass リソースの作成中に、Ingress Operator は Red Hat OpenShift Service Mesh の軽量バージョン、Istio カスタムリソース、および openshift-ingress namespace に新しいデプロイメントをインストールします。

    3. オプション: 新しいデプロイメントである istiod-openshift-gateway が準備完了で利用可能であることを確認します。

      $ oc get deployment -n openshift-ingress

      出力例

      NAME                       READY   UP-TO-DATE   AVAILABLE   AGE
      istiod-openshift-gateway   1/1     1            1           55s
      router-default             2/2     2            2           6h4m

  2. 次のコマンドを実行してシークレットを作成します。

    $ oc -n openshift-ingress create secret tls gwapi-wildcard --cert=wildcard.crt --key=wildcard.key
  3. 次のコマンドを実行して、Ingress Operator のドメインを取得します。

    $ DOMAIN=$(oc get ingresses.config/cluster -o jsonpath={.spec.domain})
  4. Gateway オブジェクトを作成します。

    1. 次の情報が含まれる YAML ファイル example-gateway.yaml を作成します。

      ゲートウェイ CR の例

      apiVersion: gateway.networking.k8s.io/v1
      kind: Gateway
      metadata:
        name: example-gateway
        namespace: openshift-ingress
      spec:
        gatewayClassName: openshift-default
        listeners:
        - name: https
          hostname: "*.gwapi.${DOMAIN}"
          port: 443
          protocol: HTTPS
          tls:
            mode: Terminate
            certificateRefs:
            - name: gwapi-wildcard
          allowedRoutes:
            namespaces:
              from: All

      ここでは、以下のようになります。

      metadata.namespace
      Gateway オブジェクトは、openshift-ingress namespace に作成する必要があります。
      gatewayClassName
      Gateway オブジェクトは、以前に作成された GatewayClass オブジェクトの名前を参照する必要があります。
      リスナー名
      HTTPS リスナーは、クラスタードメインのサブドメインに一致する HTTPS 要求をリッスンします。このリスナーを使用し、Gateway API HTTPRoute リソースを使用してアプリケーションへの Ingress を設定します。
      リスナーホスト名
      ホスト名は、Ingress Operator ドメインのサブドメインである必要があります。ドメインを使用する場合、リスナーはそのドメイン内のすべてのトラフィックを処理しようとします。
      tls.name
      以前に作成されたシークレットの名前。
    2. 次のコマンドを実行して、リソースを適用します。

      $ oc apply -f example-gateway.yaml
    3. オプション: Gateway オブジェクトを作成すると、Red Hat OpenShift Service Mesh は同じ名前のデプロイメントとサービスを自動的にプロビジョニングします。以下のコマンドを実行して、これを確認します。

      • デプロイメントを確認するには、次のコマンドを実行します。

        $ oc get deployment -n openshift-ingress example-gateway-openshift-default

        出力例

        NAME                                 READY   UP-TO-DATE   AVAILABLE   AGE
        example-gateway-openshift-default    1/1     1            1           25s

      • サービスを確認するには、次のコマンドを実行します。

        $ oc get service -n openshift-ingress example-gateway-openshift-default

        出力例

        NAME                                TYPE           CLUSTER-IP   EXTERNAL-IP         PORT(S)      AGE
        example-gateway-openshift-default   LoadBalancer   10.1.2.3     <external_ipname>   <port_info>  47s

    4. オプション: Ingress Operator は、リスナーからのホスト名を使用して DNSRecord CR を自動的に作成し、ラベル gateway.networking.k8s.io/gateway-name=example-gateway を追加します。次のコマンドを実行して、DNS レコードのステータスを確認します。

      $ oc -n openshift-ingress get dnsrecord -l gateway.networking.k8s.io/gateway-name=example-gateway -o yaml

      出力例

      kind: DNSRecord
        ...
      status:
        ...
        zones:
        - conditions:
          - message: The DNS provider succeeded in ensuring the record
            reason: ProviderSuccess
            status: "True"
            type: Published
          dnsZone:
            tags:
              ...
        - conditions:
          - message: The DNS provider succeeded in ensuring the record
            reason: ProviderSuccess
            status: "True"
            type: Published
          dnsZone:
            id: ...

  5. すでに作成済みの namespace と example-app/example-app というアプリケーションにリクエストを送信する HTTPRoute リソースを作成します。

    1. 次の情報が含まれる YAML ファイル example-route.yaml を作成します。

      HTTP ルート CR の例

      apiVersion: gateway.networking.k8s.io/v1
      kind: HTTPRoute
      metadata:
        name: example-route
        namespace: example-app-ns
      spec:
        parentRefs:
        - name: example-gateway
          namespace: openshift-ingress
        hostnames: ["example.gwapi.${DOMAIN}"]
        rules:
        - backendRefs:
          - name: example-app 
      1
      
            port: 8443

      ここでは、以下のようになります。

      metadata.namespace
      アプリケーションをデプロイする namespace。
      spec.parentRefs
      このフィールドは、以前に設定した Gateway オブジェクトを指している必要があります。
      spec.hostnames
      ホスト名は、Gateway オブジェクトで指定されたホスト名と一致する必要があります。この場合、リスナーはワイルドカードホスト名を使用します。
      ルール.バックエンド参照
      このフィールドは、サービスを指すバックエンド参照を指定します。
      ルール名
      アプリケーションの Service の名前。
    2. 次のコマンドを実行して、リソースを適用します。

      $ oc apply -f example-route.yaml

      出力例

      httproute.gateway.networking.k8s.io/example-route created

検証

  1. 次のコマンドを実行して、Gateway オブジェクトがデプロイされ、状態が Programmed であることを確認します。

    $ oc wait -n openshift-ingress --for=condition=Programmed gateways.gateway.networking.k8s.io example-gateway

    出力例

    gateway.gateway.networking.k8s.io/example-gateway condition met

  2. 設定された HTTPRoute オブジェクトのホスト名にリクエストを送信します。

    $ curl -I --cacert <local cert file> https://example.gwapi.${DOMAIN}:443
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

Red Hat ドキュメントについて

Legal Notice

Theme

© 2026 Red Hat
トップに戻る