クラスタ・アドオンとしてのIstioの作業によるKubernetes Gateway APIの実装

Istioクラスタ・アドオンをインストール、構成および使用して、Kubernetes Engine (OKE)を使用して作成したクラスタにKubernetes Gateway APIを実装する方法をご確認ください。

Kubernetes Gateway API (Gateway API)は、Kubernetesクラスタでイングレスおよびネットワーク・トラフィックを管理するための次世代標準であり、イングレスAPIを継承します。Gateway APIの詳細は、KubernetesドキュメントのGateway APIおよびGateway APIのドキュメントを参照してください。

Istioクラスタ・アドオンは、クラスタ内のIstioコントロール・プレーンをデプロイおよび管理するKubernetes Engine用のOracle管理拡張機能です。これにより、イングレスおよびトラフィック管理のための高度なサービス・メッシュおよびゲートウェイAPIサポートが可能になります。

Istioクラスタ・アドオンを有効にすると、Istioを基礎となるコントローラとして使用して、GatewayHTTPRouteおよびその他のゲートウェイAPIリソースを管理できます。

Istioをクラスタ・アドオン(Istioクラスタ・アドオン)として使用すると、コントロール・プレーン(istiod)のライフサイクル管理が簡素化されます。より単純に:

  • Istioコントロールプレーンを有効または無効にします。
  • Oracleによる自動バージョン更新のオプト・インとオプト・アウト。
  • 承認されたキー/値ペア構成引数を使用して、アドオン固有のカスタマイズを管理します。

次の各項では、Istioクラスタ・アドオンを使用してゲートウェイAPIネットワーキングを構成する方法について説明します:

前提条件

Kubernetes Gateway APIをサポートするようにIstioクラスタ・アドオンを設定する前に:

  • Kubernetes Engineによって作成されたクラスタへのkubectlアクセス権が必要です。
  • カスタム・リソース定義(CRD)およびコントローラをインストールするには、cluster-admin権限が必要です。

ゲートウェイAPIコントローラとしてのIstioクラスタ・アドオンの設定

Istioクラスタ・アドオンをゲートウェイAPIコントローラとして設定するための概要ステップ

Istioクラスタ・アドオンをGateway APIコントローラとして設定するステップは、次のとおりです。

ステップ1: ゲートウェイAPI CRDのインストール

Gateway APIカスタム・リソース定義(CRD)は、Kubernetesエンジンを使用して作成するクラスタにデフォルトではインストールされません。IstioをゲートウェイAPIコントローラとして使用する前に、CRDをインストールする必要があります。

  1. 次のように入力して、標準のゲートウェイAPI CRD (v1.2.0)をインストールします。

    kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.2.0/standard-install.yaml
    
  2. 次のように入力して、CRDがインストールされていることを確認します。

    kubectl get crd gateways.gateway.networking.k8s.io
    
  3. CRDが出力に表示されていることを確認します。
  4. Kubernetes Gateway APIリリースが、クラスタで実行されているKubernetesのバージョンに対してKubernetes EngineでサポートされているIstioアドオン・バージョンと互換性があることを確認します(Gateway APIドキュメントのComparisons - v1.2およびCluster Add-on Supported Versionsを参照)。

ステップ2: Istioクラスタ・アドオン構成ファイルの作成

OCI CLIで使用するIstioクラスタ・アドオン構成ファイルを作成します。

  1. JSONファイルを作成します(たとえば、enableistio.json)。

  2. アドオンを有効にするには、次のコンテンツを追加してください。

    ノート:標準のサービス・メッシュのユース・ケースとは異なり、ゲートウェイAPIはゲートウェイ・インフラストラクチャを動的にプロビジョニングできるため、レガシーenableIngressGatewayを厳密に設定する必要はありません。ただし、これを設定すると、デフォルトのフォールバックが提供されます。

    {
        "addonName": "Istio",
        "configurations": [
            {
                "key": "enableIngressGateway",
                "value": "false"
            }
        ]
    }
    

    次の点を確認します。

    • value"true"に設定すると、Istioクラスタ・アドオンによって、コントロール・プレーンとともに従来のistio-ingressgatewayデプロイメントおよびサービスがプロビジョニングされます。
    • value"false"に設定すると、コントロール・プレーン(istiod)のみがインストールされます。その後、Istioが必要に応じて自動的にプロビジョニングするGatewayリソースを作成できます。
  3. 保存してファイルを閉じます。

ステップ3: クラスタでのIstioクラスタ・アドオンのデプロイおよびデプロイメントの成功の確認

Istioクラスタ・アドオンをデプロイします。

  1. 次のように入力してOCI CLIを使用してアドオンをデプロイします:

    oci ce cluster install-addon --addon-name Istio --cluster-id <cluster-ocid> --from-json file://enableistio.json
    
  2. デプロイメントが成功したことを確認します。

    1. 次のように入力します。

      oci ce cluster list-addons --cluster-id <cluster-ocid>
      
    2. Istioクラスタ・アドオンのライフサイクル状態がACTIVEであることを確認します。

  3. Istioコントロール・プレーンが実行されていることを確認します。

    1. 次のように入力します。

      kubectl get pods -n istio-system
      
    2. istiodポッドがRunning状態であることを確認します。

ステップ4: ゲートウェイの作成

Gatewayリソースを作成します。

  1. 次のように入力して、新しいネームスペース(test-gatewayなど)を作成します。
    kubectl create namespace test-gateway
  2. 次の内容を含むgateway.yamlという名前のファイルを作成します。

    apiVersion: gateway.networking.k8s.io/v1
    kind: Gateway
    metadata:
      name: my-gateway
      namespace: test-gateway
      annotations:
        # OCI specific annotation for Network Load Balancer (Layer 4)
        oci.oraclecloud.com/load-balancer-type: "nlb"
    spec:
      gatewayClassName: istio
      listeners:
      - name: http
        port: 80
        protocol: HTTP
        allowedRoutes:
          namespaces:
            from: Same
    

    このゲートウェイを管理するようにIstioクラスタ・アドオンに指示するgatewayClassName: istio行に注意してください。

  3. 次のように入力してGatewayを作成します。

    kubectl apply -f gateway.yaml
    
  4. 次のように入力して外部IPアドレスを取得します。

    kubectl get gateway -n test-gateway
    

    OCIがロード・バランサをプロビジョニングするのに数分かかる場合があります。

    PROGRAMMED列にTrueが含まれ、IPアドレスがADDRESS列に表示されるまで待機します。

ステップ5: サンプル・アプリケーションをデプロイする

サンプル・アプリケーションを新しいネームスペースにデプロイします。

  1. 次の情報を入力して、サンプル・アプリケーション(httpbinなど)をデプロイします:

    
    kubectl apply -f https://raw.githubusercontent.com/istio/istio/master/samples/httpbin/httpbin.yaml -n test-gateway
    

ステップ6: HTTPRouteの作成

HTTPRouteを作成して、Gatewayからhttpbinサービスにトラフィックを転送します。

  1. 次の内容を含むroute.yamlという名前のファイルを作成します。

    apiVersion: gateway.networking.k8s.io/v1
    kind: HTTPRoute
    metadata:
      name: httpbin-route
      namespace: test-gateway
    spec:
      parentRefs:
      - name: my-gateway
      rules:
      - matches:
        - path:
            type: PathPrefix
            value: /get
        backendRefs:
        - name: httpbin
          port: 8000
    
  2. 次のように入力してHTTPRouteを作成します。

    kubectl apply -f route.yaml
    

ステップ7: 接続性の確認

Gatewayの外部IPアドレスにリクエストを送信して、接続を確認します。

  1. ゲートウェイのパブリックIPアドレスを取得し、次のように入力して環境変数として保存します:

    export GATEWAY_IP=$(kubectl get gateway my-gateway -n test-gateway -o jsonpath='{.status.addresses[0].value}')
  2. curlを使用して、次のように入力してリクエストをゲートウェイの外部IPアドレスに送信します。

    curl -i http://$GATEWAY_IP/get
    
    
    
  3. httpbinアプリケーションから200 OKレスポンスを受信したことを確認します。

Istioクラスタ・アドオンの無効化(および削除)

これらの手順では、Istioクラスタ・アドオンを無効にして削除する方法について説明します。

  1. 次のように入力して、OCI CLIを使用してアドオンを無効化および削除します:

    oci ce cluster disable-addon --addon-name Istio --cluster-id <cluster-ocid> --is-remove-existing-add-on true
    
  2. (オプション) Gateway APIリソースを削除します。

    アドオンの削除プロセスでは、作成したGatewayまたはHTTPRouteリソースは自動的に削除されません。次のように入力して、これらを手動で削除し、関連するロード・バランサをクリーン・アップします。

    kubectl delete -f gateway.yaml
    kubectl delete -f route.yaml
  3. (オプション) Gateway API CRDを削除します。

    このクラスタでゲートウェイAPIが不要になった場合は、次のように入力してCRDを削除できます。

    kubectl delete -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.2.0/standard-install.yaml