クラスタ・アドオンとしてのIstioの作業

Istioをクラスタ・アドオンとしてインストール、構成および使用して、Container Engine for Kubernetes (OKE)で作成したクラスタでのトラフィック管理、セキュリティ、接続および可観測性を簡素化する方法をご紹介します。

スタンドアロン・プログラムとしてではなく、クラスタ・アドオン(Istioアドオン)としてIstioを使用すると、構成と継続的なメンテナンスが簡素化されます。より単純に:

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

Container Engine for Kubernetesを使用してIstioをクラスタ・アドオンとしてデプロイする場合、オプションで、受信HTTPおよびHTTPSリクエストをルーティングするIstioイングレス・ゲートウェイを作成できます。または、サポートされている他のイングレスを使用して、クラスタで実行されている適切なサービスにトラフィックをルーティングすることもできます。Istioイングレス・ゲートウェイのアクセシビリティは、クラスタに指定されたロード・バランサ・サブネット(パブリックまたはプライベート)のタイプによって異なることに注意してください。

Istioアドオンの場合は、承認されたキー/値ペア構成引数を使用して、メッシュ全体の構成パラメータに対してアドオン固有のカスタマイズを行います(Istioアドオン構成引数を参照)。メッシュ・リソースの管理など、その他の構成タスクでは、istioctl (Istioコマンドライン・ツール)またはIstioでサポートされているその他のツールを使用します。承認された引数を使用してIstioアドオンを構成し、Oracleによってアドオンのバージョンが自動的に更新されるときにカスタマイズを保持する場合は、customizeConfigMap構成引数をtrueに設定します。customizeConfigMap構成引数をtrueに設定しない場合、Oracleがアドオンを更新すると、カスタマイズは破棄されます。istioctl (またはIstioでサポートされている別のツール)を使用して行ったカスタマイズは、Oracleがアドオンを更新すると常に破棄されます。

HelmおよびHelmチャートを使用してKubernetesアプリケーションを構成およびデプロイする場合、Helmは、作成したリソースのみを更新または削除できることに注意してください。したがって、HelmでIstioアドオンを管理できるようにするには:

  • Helmチャートを使用して、istioおよびistio-sidecar-injector構成マップを生成します。
  • Istioアドオンのデプロイ時に、customizeConfigMap構成引数をtrueに設定します。

OracleでIstioアドオンを自動的に更新する場合、新しいIstioバージョンが使用可能になると、Oracleはインプレース・アップグレードを実行します。アップグレード中、OracleはIstioコントロール・プレーン(期間)およびイングレス・ゲートウェイを新しいバージョンに自動的に更新します。OracleではIstioデータ・プレーン・サイドカーは自動的に更新されないため、これらのサイドカーは古いバージョンのままです。kubectl rollout restart deploymentコマンドを使用して、Istioサイドカーを使用してポッドを再起動することで、Istioデータ・プレーンを手動で更新する必要があります。Istioコントロール・プレーンには古いサイドカー・バージョンとの下位互換性がありますが、停止時間をゼロにすることが優先される場合、OracleでIstioアドオンが自動的に更新されるのではなく、手動でIstioをアップグレードすることをお薦めします。Istioドキュメントのインプレース・アップグレードを参照してください。

これらのセクションでは、Istioアドオンを使用して、サービス間の通信とネットワークを管理する方法について説明します。

サービス・メッシュ製品(Oracle Cloud Infrastructure Service Mesh、Istio、Linkerdなど)は、ポッド・ネットワーキングにOCI VCNネイティブ・ポッド・ネットワーキングCNIプラグインを使用するときにサポートされます。Istioアドオンを除き、現在サポートはOracle Linux 7に制限されています(Oracle Linux 8のサポートが計画されています)。Istioアドオンは、Oracle Linux 7とOracle Linux 8の両方でサポートされています。ワーカー・ノードは、Kubernetes 1.26 (以降)を実行している必要があります。

また、Istioアドオンは、すでにスタンドアロン・プログラムとしてインストールされているクラスタや、Oracle Cloud Infrastructure Service Meshがインストールされているクラスタでは使用できません。

ノート

Istioは、管理対象ノード・プールで使用できますが、仮想ノード・プールでは使用できません。

Istioアドオンのデプロイ

次のステップの手順では、Istioサービス・メッシュをクラスタ・アドオン(Istioアドオン)としてデプロイし、Container Engine for Kubernetesで作成したクラスタでのトラフィック管理、セキュリティ、接続および可観測性を簡素化する方法について説明します。

作業例は、例: クラスタ・アドオンとしてのIstioのデプロイを参照してください。

ステップ1: Istioアドオン構成ファイルの作成

ノート

次の手順では、CLIを使用してIstioアドオンをデプロイできるようにするIstioアドオン構成ファイルを作成する方法について説明します。構成ファイルには、承認されたキー/値ペアの構成引数が含まれています。CLI (またはAPI)を使用してアドオンをデプロイする場合は、構成ファイルを作成する必要があります。コンソールを使用してIstioアドオンをデプロイすることもできます。その場合は、UIで構成引数を指定します。コンソールを使用したIstioアドオンのデプロイの詳細は、クラスタ・アドオンのインストールを参照してください。

  1. 適切なエディタで、選択した名前でJSONファイルを作成します(これらの手順は、ファイルがenableistio.jsonという名前であると想定しています)。これには、次のものが含まれます。

    {
      "addonName": "Istio",
      "configurations": [
      ]
    }

    このコンテンツは、Istioアドオンを有効にするのに十分です。

  2. (オプション) enableistio.jsonファイルで、次のようにIstioイングレス・ゲートウェイをインストールするかどうかを指定します:
    • Istioイングレス・ゲートウェイをインストールするには、次のようにenableistio.jsonファイルを更新します:
      {
        "addonName": "Istio",
        "configurations": [
          {
            "key": "enableIngressGateway",
            "value": "true"
          }
        ]
      }
    • Istioイングレス・ゲートウェイをインストールしない場合は、次のようにenableistio.jsonファイルを更新します。
      {
        "addonName": "Istio",
        "configurations": [
          {
            "key": "enableIngressGateway",
            "value": "false"
          }
        ]
      }

    構成ファイルにenableIngressGatewayを含めない場合、デフォルトの動作はIstioイングレス・ゲートウェイをインストールしないことに注意してください(enableIngressGatewayfalseに設定するのと同じです)。

  3. (オプション)作成したenableistio.jsonファイルで、他の構成引数を指定してIstioアドオンをカスタマイズします。設定できる構成引数の詳細は、Istioアドオン構成引数を参照してください。

  4. (オプション)アドオンのバージョンがOracleによって自動的に更新された場合、Istioアドオンに対して行ったカスタマイズを保持する場合は、customizeConfigMap引数をtrueに設定します。例:
    • Istioイングレス・ゲートウェイをインストールしてカスタマイズを保持するには、次のようにenableistio.jsonファイルを更新します。
      {
        "addonName": "Istio",
        "configurations": [
          {
            "key": "enableIngressGateway",
            "value": "true"
          },
          {
            "key": "customizeConfigMap",
            "value": "true"
          }
        ]
      }
    • Istioイングレス・ゲートウェイをインストールせず、カスタマイズを保持する場合は、次のようにenableistio.jsonファイルを更新します。
      {
        "addonName": "Istio",
        "configurations": [
          {
            "key": "enableIngressGateway",
            "value": "false"
          },
          {
            "key": "customizeConfigMap",
            "value": "true"
          }
        ]
      }

      構成ファイルにcustomizeConfigMapを含めない場合、アドオンのバージョンがOracleによって自動的に更新された場合(customizeConfigMapfalseに設定した場合と同等)は、デフォルトの動作によってカスタマイズが破棄されます。

  5. enableistio.jsonファイルを保存して閉じます。

ステップ2: クラスタにIstioアドオンをデプロイし、デプロイメントが成功したことを確認します。

ノート

次の手順では、CLIおよび構成ファイルを使用してIstioアドオンをデプロイする方法について説明します。コンソールおよびAPIを使用してアドオンをデプロイすることもできます。詳細は、クラスタ・アドオンのインストールを参照してください。

  1. まだ実行していない場合は、ステップに従って、クラスタのkubeconfig構成ファイルを設定し、(必要に応じて)そのファイルを指すようにKUBECONFIG環境変数を設定します。自分のkubeconfigファイルを設定する必要があります。別のユーザーが設定したkubeconfigファイルを使用してクラスタにアクセスすることはできません。クラスタ・アクセスの設定を参照してください。
  2. 次のように入力して、Istioアドオンがまだクラスタにインストールされていないことを確認します。
    oci ce cluster list-addons --cluster-id <cluster-ocid>

    <cluster-ocid>は、IstioアドオンをデプロイするクラスタのOCIDです。

  3. 次のように入力して、クラスタにIstioアドオンをデプロイします。

    oci ce cluster install-addon --addon-name Istio --cluster-id <cluster-ocid> --from-json file://./<path-to-config-file>

    ここでは:

    • --cluster-id <cluster-ocid>は、IstioアドオンをデプロイするクラスタのOCIDです。
    • --from-json file://<path-to-config-file>は、前に作成したIstioアドオン構成ファイルの場所を指定します。たとえば、--from-json file://./enableistio.jsonです。

    例:

    oci ce cluster install-addon --addon-name Istio --from-json file://./enableistio.json --cluster-id ocid1.cluster.oc1.iad.aaaaaaaam______dfr

    Istioアドオンをデプロイするための作業リクエストが作成されます。

  4. 次のように、Istioアドオン(およびIstioアドオン構成ファイルで指定した場合はIstioイングレス・ゲートウェイ)が正常にデプロイされたことを確認します。

    1. 次のように入力して、Istioアドオンがクラスタにインストールされていることを確認します:
      oci ce cluster list-addons --cluster-id <cluster-ocid>

      デプロイメントが成功すると、ACTIVEのライフサイクル状態を持つIstioアドオンが出力に表示されます。例:

      {
        "data": [
          {
            "addon-error": null,
            "current-installed-version": "v1.19.0",
            "lifecycle-state": "ACTIVE",
            "name": "Istio",
            "time-created": "2023-11-06T11:21:11+00:00",
            "version": null
          }
        ]
      }
    2. 次のように入力して、istiodポッド(Istioコントロールプレーン)およびistio-ingressgatewayポッド(構成ファイルで指定した場合)がistio-systemネームスペースで実行されていることを確認します。
      kubectl get pods -n istio-system

      デプロイメントが成功すると、出力にはステータスが「実行中」のポッドが表示されます。例:

      NAME                                   READY   STATUS    RESTARTS   AGE
      istio-ingressgateway-df7d86548-n2vxr   1/1     Running   0          102s
      istiod-65d95bd5f9-vb2qk                1/1     Running   0          101s
    3. 構成ファイルでIstioイングレス・ゲートウェイを指定した場合は、次のように入力して、istio-ingressgatewayサービスが正常にデプロイされていることを確認します:
      kubectl get svc istio-ingressgateway -n istio-system

      デプロイメントが成功すると、出力には、タイプがLoadBalancerのサービスとしてのistio-ingressgatewayサービス、およびパブリックにアクセス可能なIPアドレスを持つ(クラスタのロード・バランサ・サブネットがパブリックの場合)が表示されます。例:

      NAME                   TYPE           CLUSTER-IP     EXTERNAL-IP      PORT(S)                                      AGE
      istio-ingressgateway   LoadBalancer   10.96.31.174   <EXTERNAL-IP>    15021:30089/TCP,80:31662/TCP,443:32217/TCP   2m50s

ステップ3: Envoyサイドカー・インジェクションの有効化

Istioが各サービスにEnvoyサイドカーを注入して通信、構成およびセキュリティを提供できるようにするには:

  1. 次のように入力して、アプリケーションをデプロイするネームスペースを作成します(ネームスペースがまだ存在しない場合)。
    kubectl create namespace <namespace-name>
  2. 次のように入力して、アプリケーションをデプロイするネームスペースをデフォルト・ネームスペースにします。
    kubectl config set-context --current --namespace=<namespace-name>
  3. 次のように入力して、アプリケーションをデプロイするネームスペースがデフォルトのネームスペースであることを確認します。
    kubectl config view --minify | grep namespace
  4. ネームスペースにistio-injection=enabledラベルを追加して、次のように入力して、ネームスペースにデプロイされた新しいアプリケーション・ポッドにEnvoyサイドカーを自動的にインストールします:
    kubectl label namespace <namespace-name> istio-injection=enabled
  5. 次のように入力して、ネームスペースに正しくラベル付けされていることを確認します:
    kubectl get namespace -L istio-injection

ステップ4: アプリケーションのデプロイおよびEnvoyサイドカー・コンテナの監視

アプリケーションの通信、構成およびセキュリティの提供にIstioが使用されていることを確認するには:

  1. アプリケーションのデプロイたとえば、次のように入力します:
    kubectl apply -f <manifest-name>
  2. 次のように入力して、アプリケーションのサービスが正常に作成されたことを確認します。
    kubectl get services
  3. 次のように入力して、アプリケーションのポッドのステータスが「実行中」であることを確認します:
    kubectl get pods

    出力は、各アプリケーション・ポッドに2つのコンテナがあることを示しています。ポッドごとに、1つのコンテナがアプリケーション・コンテナで、もう1つのコンテナがIstioが注入したEnvoyサイドカーです。

  4. 次のように入力して、アプリケーションのポッドの1つに2つのコンテナ(1つはアプリケーション・コンテナ、もう1つはIstioによって注入されるEnvoyサイドカー)があることを確認します。
    kubectl get pods <application-pod-name> -o jsonpath='{.spec.containers[*].name}'

    デフォルトでは、イングレス・ゲートウェイを有効にした後は、クラスタ外からアプリケーションにアクセスできないことに注意してください。アプリケーションにアクセス可能にする方法の例は、例: クラスタ・アドオンとしてのIstioのデプロイを参照してください。

例: Istioのクラスタ・アドオンとしてのデプロイ

この例では、Container Engine for Kubernetesで作成したクラスタにIstioアドオンおよびIstioイングレス・ゲートウェイをインストールします。Istioアドオンおよびイングレス・ゲートウェイをインストールしたら、IstioのサンプルBookinfoアプリケーションをデプロイし、クラスタ外からアプリケーションにアクセスできるようにします。

  1. 便宜上、次のように入力して、CLUSTER_IDという名前の環境変数をクラスタのOCIDの値に設定します。
    export CLUSTER_ID=<cluster-ocid>
  2. 次のものを含むenableistio-ig.jsonという名前のJSONファイルを作成します。
    {
      "addonName": "Istio",
      "configurations": [
        {
          "key": "enableIngressGateway",
          "value": "true"
        }
      ]
    }

    この構成ファイルでは、IstioアドオンおよびIstioイングレス・ゲートウェイがインストールされます。

  3. 次のように入力して、IstioアドオンおよびIstioイングレス・ゲートウェイをクラスタにインストールします:
    oci ce cluster install-addon --addon-name Istio --cluster-id $CLUSTER_ID --from-json file://./enableistio-ig.json

    Istioアドオンをインストールするための作業リクエストが作成されます。

  4. IstionアドオンおよびIstioイングレス・ゲートウェイが正常にインストールされたことを確認します。
    1. 次のように入力して、Istioアドオンが正常にインストールされたことを確認します。
      oci ce cluster list-addons --cluster-id $CLUSTER_ID

      デプロイメントが成功すると、ACTIVEのライフサイクル状態を持つIstioアドオンが出力に表示されます。たとえば、次の出力は、いくつかの重要なクラスタ・アドオンとともに、Istioアドオンを示しています。

      {
        "data": [
          {
            "addon-error": null,
            "current-installed-version": "v1.10.1-multiarch-7",
            "lifecycle-state": "ACTIVE",
            "name": "CoreDNS",
            "time-created": "2023-11-06T10:35:26+00:00",
            "version": null
          },
          {
            "addon-error": null,
            "current-installed-version": "v1.19.0",
            "lifecycle-state": "ACTIVE",
            "name": "Istio",
            "time-created": "2023-11-06T11:21:11+00:00",
            "version": null
          },
          {
            "addon-error": null,
            "current-installed-version": "v1.27.2-oke.0.2.20-multiarch-98",
            "lifecycle-state": "ACTIVE",
            "name": "KubeProxy",
            "time-created": "2023-11-06T10:35:26+00:00",
            "version": null
          },
          {
            "addon-error": null,
            "current-installed-version": "v2.0.1",
            "lifecycle-state": "ACTIVE",
            "name": "OciVcnIpNative",
            "time-created": "2023-11-06T10:35:26+00:00",
            "version": null
          }
        ]
      }
    2. 次のように入力して、Istioコントロール プレーン(ピリオド)ポッドとistio-ingressgatewayポッドが両方ともistio-system名前空間で実行されていることを確認します。
      kubectl get pods -n istio-system

      デプロイメントが成功すると、出力にはステータスが「実行中」の両方のポッドが表示されます。例:

      NAME                                   READY   STATUS    RESTARTS   AGE
      istio-ingressgateway-df7d86548-n2vxr   1/1     Running   0          102s
      istiod-65d95bd5f9-vb2qk                1/1     Running   0          101s
    3. 次のように入力して、istio-ingressgatewayサービスが正常にデプロイされたことを確認します:
      kubectl get svc istio-ingressgateway -n istio-system

      デプロイメントが成功すると、出力には、タイプがLoadBalancerのサービスとしてのistio-ingressgatewayサービス、およびパブリックにアクセス可能なIPアドレスを持つ(クラスタのロード・バランサ・サブネットがパブリックの場合)が表示されます。例:

      NAME                   TYPE           CLUSTER-IP     EXTERNAL-IP      PORT(S)                                      AGE
      istio-ingressgateway   LoadBalancer   10.96.31.174   <EXTERNAL-IP>    15021:30089/TCP,80:31662/TCP,443:32217/TCP   2m50s
  5. Bookinfoサンプル・アプリケーションをデプロイする新しいネームスペースを作成します。
    1. 次のように入力して、bookinfoネームスペースを作成します。
      kubectl create namespace bookinfo
    2. 次のように入力して、bookinfoネームスペースをデフォルト・ネームスペースにします。
      kubectl config set-context --current --namespace=bookinfo
    3. 次のように入力して、bookinfoがデフォルトのネームスペースであることを確認します。
      kubectl config view --minify | grep namespace
  6. istio-injection=enabledラベルをbookinfoネームスペースに追加して、ネームスペースにデプロイされた新しいアプリケーション・ポッドにEnvoyサイドカーを自動的にインストールします。
    1. 次のように入力して、ラベルをbookinfoネームスペースに追加します。
      kubectl label namespace bookinfo istio-injection=enabled
    2. 次のように入力して、bookinfo名前空間が正しくラベル付けされていることを確認します。
      kubectl get namespace -L istio-injection
  7. 次のように入力してBookinfoサンプル・アプリケーションをデプロイします:
    kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.19/samples/bookinfo/platform/kube/bookinfo.yaml

    デプロイメントが成功すると、出力には、次のようにクラスタ上に作成された複数のデプロイメントおよびサービスが表示されます。

    service/details created
    serviceaccount/bookinfo-details created
    deployment.apps/details-v1 created
    service/ratings created
    serviceaccount/bookinfo-ratings created
    deployment.apps/ratings-v1 created
    service/reviews created
    serviceaccount/bookinfo-reviews created
    deployment.apps/reviews-v1 created
    deployment.apps/reviews-v2 created
    deployment.apps/reviews-v3 created
    service/productpage created
    serviceaccount/bookinfo-productpage created
    deployment.apps/productpage-v1 created
  8. Bookinfoサンプル・アプリケーションの正常なデプロイメントを確認します。
    1. 次のように入力して、サービスが正常に作成されたことを確認します。
      kubectl get services

      デプロイメントが成功すると、出力には、次のようなクラスタで作成されたサービスが表示されます。

      NAME          TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)    AGE
      details       ClusterIP   10.96.72.219   <none>        9080/TCP   54s
      productpage   ClusterIP   10.96.65.83    <none>        9080/TCP   54s
      ratings       ClusterIP   10.96.101.51   <none>        9080/TCP   54s
      reviews       ClusterIP   10.96.14.9     <none>        9080/TCP   54s
    2. 次のように入力して、すべてのポッドのステータスが「Running」であることを確認します。
      kubectl get pods

      デプロイメントが成功すると、出力には、次のような実行中のポッドが表示されます。

      NAME                             READY   STATUS    RESTARTS   AGE
      details-v1-5f4d584748-hcm9t      2/2     Running   0          81s
      productpage-v1-564d4686f-48lpw   2/2     Running   0          80s
      ratings-v1-686ccfb5d8-bpl8t      2/2     Running   0          81s
      reviews-v1-86896b7648-6c8d4      2/2     Running   0          81s
      reviews-v2-b7dcd98fb-fsv7c       2/2     Running   0          81s
      reviews-v3-5c5cc7b6d-qgrv2       2/2     Running   0          81s

      出力は、各アプリケーション・ポッドに2つのコンテナがあることを示しています。ポッドごとに、1つのコンテナがアプリケーション・コンテナで、もう1つのコンテナがIstioによって注入されるEnvoyサイドカーです。

    3. ratingsポッドに2つのコンテナ(1つはアプリケーション・コンテナ、もう1つはIstioによって注入されるEnvoyサイドカー)があることを確認します。たとえば、次のように入力します:
      kubectl get pods ratings-v1-686ccfb5d8-bpl8t -o jsonpath='{.spec.containers[*].name}'

      出力には、アプリケーション・コンテナ(評価)とIstioによって注入されたEnvoyサイドカー・コンテナ(istio-proxy)の2つのコンテナが表示されます。

      ratings istio-proxy
    4. ポッドからcurlコマンドを送信して、アプリケーションが実行中であることを確認します。
      kubectl exec "$(kubectl get pod -l app=ratings -o jsonpath='{.items[0].metadata.name}')" -c ratings -- curl -sS productpage:9080/productpage | grep -o "<title>.*</title>"
      <title>Simple Bookstore App</title>

      Bookinfoサンプル・アプリケーションは、イングレス・ゲートウェイを有効にした後でも、クラスタの外部からまだアクセスできないことに注意してください。また、Istioイングレス・ゲートウェイのアクセシビリティは、クラスタに指定されたロード・バランサ・サブネット(パブリックまたはプライベート)のタイプによって異なります。

  9. クラスタの外部からBookinfoサンプル・アプリケーションにアクセスできるようにします。

    1. 次のように入力して、サンプル・デプロイメントのイングレスをIstioイングレス・ゲートウェイにマップします:
      kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.19/samples/bookinfo/networking/bookinfo-gateway.yaml

      出力は、Kubernetes GatewayおよびVirtualServiceリソースが作成されたことを示しています:

      gateway.networking.istio.io/bookinfo-gateway created
      virtualservice.networking.istio.io/bookinfo created
  10. Bookinfoサンプル・アプリケーションにアクセス可能で、Istioイングレス・ゲートウェイを使用していることを確認します。
    1. 次のように入力して、イングレス・ホストおよびイングレス・ポートの環境変数を設定します:
      export INGRESS_NAME=istio-ingressgateway
      export INGRESS_NS=istio-system
      export INGRESS_HOST=$(kubectl -n "$INGRESS_NS" get service "$INGRESS_NAME" -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
      export INGRESS_PORT=$(kubectl -n "$INGRESS_NS" get service "$INGRESS_NAME" -o jsonpath='{.spec.ports[?(@.name=="http2")].port}')
    2. 次のように入力して、Bookinfoサンプル・アプリケーションにアクセスでき、Istioイングレス・ゲートウェイを使用していることを確認します:
      curl -s "http://${INGRESS_HOST}:${INGRESS_PORT}/productpage" | grep -o "<title>.*</title>"

      デプロイメントが成功すると、出力には、次のようなクラスタで作成されたサービスが表示されます。

      <title>Simple Bookstore App</title>
    3. 次のURLを開いて、ブラウザでBookinfo Webページを表示します。
      http://${INGRESS_HOST}:${INGRESS_PORT}/productpage
    4. ブラウザで、Bookinfo Webページを数回リフレッシュして、ページに表示されるレビューの異なるバージョンを表示します。
  11. (オプション)例を完了したら、作成したリソースを削除できるようになりました。
    1. 次を入力して、Bookinfoサンプル・アプリケーションを削除します:
      kubectl delete -f https://raw.githubusercontent.com/istio/istio/release-1.19/samples/bookinfo/platform/kube/bookinfo.yaml
    2. 次のように入力して、oci ce cluster disable-addonコマンドを使用してIstioアドオンを無効化(およびオプションで削除)します:

      oci ce cluster disable-addon --addon-name Istio --cluster-id $CLUSTER_ID --is-remove-existing-add-on <true|false>

      ここで、--is-remove-existing-add-on <true|false>は、Istioアドオンを完全に削除するか(trueに設定されている場合)、アドオンを削除せず、単に無効にして使用しないか(falseに設定されている場合)を指定します。アドオンを無効にすると、新しいバージョンが利用可能になった時点で Oracleはアドオンのバージョンを自動的に更新しなくなります。

      例:

      oci ce cluster disable-addon --addon-name Istio --cluster-id $CLUSTER_ID --is-remove-existing-add-on true

      Istioアドオンを無効化(およびオプションで削除)するための作業リクエストが作成されます。

    3. 次のように入力して、デフォルトで削除されないIstio CustomResourceDefinitions (CRD)を削除します。
      kubectl delete crd $(kubectl get crd -A | grep "istio.io" | awk '{print $1}')
    4. 次のように入力して、Istioアドオンによって管理されていないIstioメッシュ・リソース(Kubernetes GatewayやVirtualServiceリソースなど)を削除します。
      kubectl delete -f https://raw.githubusercontent.com/istio/istio/release-1.19/samples/bookinfo/networking/bookinfo-gateway.yaml

Istioアドオンの更新

ノート

次の手順では、CLIと構成ファイルを使用してIstioアドオンを更新する方法について説明します。コンソールおよびAPIを使用してアドオンを更新することもできます。詳細は、「クラスタ・アドオンの更新」を参照してください。

  1. 適切なエディタでIstioアドオン構成ファイルを開きます。

  2. 必要に応じて、構成ファイルの構成引数を追加、削除または変更します。設定できる引数の詳細は、Istioアドオン構成の引数を参照してください。

  3. OracleでIstioアドオンのバージョンを自動的に更新するように指定し、構成変更を保持する場合は、customizeConfigMap構成引数をtrueに設定します(まだ設定されていない場合)。
  4. oci ce cluster update-addonコマンドを使用して、次のように入力してIstioアドオンを更新します:
    oci ce cluster update-addon --addon-name Istio --from-json file://<path-to-config-file> --cluster-id <cluster-ocid>

    ここでは:

    • --cluster-id <cluster-ocid>は、Istioアドオンを更新するクラスタのOCIDです。
    • --from-json file://<path-to-config-file>は、アドオンの更新時に使用するIstioアドオン構成ファイルの場所を指定します。たとえば、--from-json file://./istio-add-on.jsonです。

    例:

    oci ce cluster update-addon --addon-name Istio --from-json file://./istio-add-on.json --cluster-id ocid1.cluster.oc1.iad.aaaaaaaam______dfr

    Istioアドオンを更新するための作業リクエストが作成されます。

  5. (オプション)次のように入力して、istiodおよびistio-ingressgatewayポッドのステータスを表示し、進行状況を確認します:
    kubectl get pods -n istio-system

Istioアドオンの無効化(および削除)

ノート

次の手順では、CLIと構成ファイルを使用してIstioアドオンを無効化および削除する方法について説明します。コンソールおよびAPIを使用してアドオンを更新することもできます。詳細は、クラスタ・アドオンの無効化(および削除)を参照してください。

  1. 次のように入力して、oci ce cluster disable-addonコマンドを使用してIstioアドオンを無効化(およびオプションで削除)します:

    oci ce cluster disable-addon --addon-name Istio --cluster-id <cluster-ocid> --is-remove-existing-add-on <true|false>

    ここでは:

    • --cluster-id <cluster-ocid>は、Istioアドオンを無効にする(およびオプションで削除する)クラスタのOCIDです。
    • --is-remove-existing-add-on <true|false>は、Istioアドオンを完全に削除する(trueに設定されている場合)か、アドオンを削除しないで無効にする(falseに設定されている場合)かを指定します。Istioアドオンを無効にすると、新しいバージョンが使用可能になったときに、Oracleによってアドオンのバージョンが自動的に更新されなくなります。

    例:

    oci ce cluster disable-addon --addon-name Istio --cluster-id ocid1.cluster.oc1.iad.aaaaaaaam______dfr --is-remove-existing-add-on true

    Istioアドオンを無効化(およびオプションで削除)するための作業リクエストが作成されます。

  2. (オプション)次のように入力して、istiodおよびistio-ingressgatewayポッドのステータスを表示し、進行状況を確認します:
    kubectl get pods -n istio-system
  3. (オプション)次のように入力して、デフォルトで削除されないIstio CustomResourceDefinitions (CRD)を削除します。
    kubectl delete crd $(kubectl get crd -A | grep "istio.io" | awk '{print $1}')
  4. (オプション) kubectl deleteコマンドを使用して、Istioアドオンによって管理されていないIstioメッシュ・リソース(Kubernetes GatewayやVirtualServiceリソースなど)を削除します。