クラスタ・アドオンとしての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を基礎となるコントローラとして使用して、Gateway、HTTPRouteおよびその他のゲートウェイ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をインストールする必要があります。
-
次のように入力して、標準のゲートウェイAPI CRD (v1.2.0)をインストールします。
kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.2.0/standard-install.yaml -
次のように入力して、CRDがインストールされていることを確認します。
kubectl get crd gateways.gateway.networking.k8s.io - CRDが出力に表示されていることを確認します。
- Kubernetes Gateway APIリリースが、クラスタで実行されているKubernetesのバージョンに対してKubernetes EngineでサポートされているIstioアドオン・バージョンと互換性があることを確認します(Gateway APIドキュメントのComparisons - v1.2およびCluster Add-on Supported Versionsを参照)。
ステップ2: Istioクラスタ・アドオン構成ファイルの作成
OCI CLIで使用するIstioクラスタ・アドオン構成ファイルを作成します。
-
JSONファイルを作成します(たとえば、
enableistio.json)。 -
アドオンを有効にするには、次のコンテンツを追加してください。
ノート:標準のサービス・メッシュのユース・ケースとは異なり、ゲートウェイAPIはゲートウェイ・インフラストラクチャを動的にプロビジョニングできるため、レガシー
enableIngressGatewayを厳密に設定する必要はありません。ただし、これを設定すると、デフォルトのフォールバックが提供されます。{ "addonName": "Istio", "configurations": [ { "key": "enableIngressGateway", "value": "false" } ] }次の点を確認します。
valueを"true"に設定すると、Istioクラスタ・アドオンによって、コントロール・プレーンとともに従来のistio-ingressgatewayデプロイメントおよびサービスがプロビジョニングされます。valueを"false"に設定すると、コントロール・プレーン(istiod)のみがインストールされます。その後、Istioが必要に応じて自動的にプロビジョニングするGatewayリソースを作成できます。
-
保存してファイルを閉じます。
ステップ3: クラスタでのIstioクラスタ・アドオンのデプロイおよびデプロイメントの成功の確認
Istioクラスタ・アドオンをデプロイします。
-
次のように入力してOCI CLIを使用してアドオンをデプロイします:
oci ce cluster install-addon --addon-name Istio --cluster-id <cluster-ocid> --from-json file://enableistio.json -
デプロイメントが成功したことを確認します。
-
次のように入力します。
oci ce cluster list-addons --cluster-id <cluster-ocid> -
Istioクラスタ・アドオンのライフサイクル状態が
ACTIVEであることを確認します。
-
-
Istioコントロール・プレーンが実行されていることを確認します。
-
次のように入力します。
kubectl get pods -n istio-system -
istiodポッドがRunning状態であることを確認します。
-
ステップ4: ゲートウェイの作成
Gatewayリソースを作成します。
- 次のように入力して、新しいネームスペース(test-gatewayなど)を作成します。
kubectl create namespace test-gateway -
次の内容を含む
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行に注意してください。 -
次のように入力して
Gatewayを作成します。kubectl apply -f gateway.yaml -
次のように入力して外部IPアドレスを取得します。
kubectl get gateway -n test-gatewayOCIがロード・バランサをプロビジョニングするのに数分かかる場合があります。
PROGRAMMED列にTrueが含まれ、IPアドレスがADDRESS列に表示されるまで待機します。
ステップ5: サンプル・アプリケーションをデプロイする
サンプル・アプリケーションを新しいネームスペースにデプロイします。
-
次の情報を入力して、サンプル・アプリケーション(httpbinなど)をデプロイします:
kubectl apply -f https://raw.githubusercontent.com/istio/istio/master/samples/httpbin/httpbin.yaml -n test-gateway
ステップ6: HTTPRouteの作成
HTTPRouteを作成して、Gatewayからhttpbinサービスにトラフィックを転送します。
-
次の内容を含む
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 -
次のように入力して
HTTPRouteを作成します。kubectl apply -f route.yaml
ステップ7: 接続性の確認
Gatewayの外部IPアドレスにリクエストを送信して、接続を確認します。
-
ゲートウェイのパブリックIPアドレスを取得し、次のように入力して環境変数として保存します:
export GATEWAY_IP=$(kubectl get gateway my-gateway -n test-gateway -o jsonpath='{.status.addresses[0].value}') -
curlを使用して、次のように入力してリクエストをゲートウェイの外部IPアドレスに送信します。curl -i http://$GATEWAY_IP/get -
httpbinアプリケーションから
200 OKレスポンスを受信したことを確認します。
Istioクラスタ・アドオンの無効化(および削除)
これらの手順では、Istioクラスタ・アドオンを無効にして削除する方法について説明します。
-
次のように入力して、OCI CLIを使用してアドオンを無効化および削除します:
oci ce cluster disable-addon --addon-name Istio --cluster-id <cluster-ocid> --is-remove-existing-add-on true -
(オプション) Gateway APIリソースを削除します。
アドオンの削除プロセスでは、作成した
GatewayまたはHTTPRouteリソースは自動的に削除されません。次のように入力して、これらを手動で削除し、関連するロード・バランサをクリーン・アップします。kubectl delete -f gateway.yamlkubectl delete -f route.yaml -
(オプション) Gateway API CRDを削除します。
このクラスタでゲートウェイAPIが不要になった場合は、次のように入力してCRDを削除できます。
kubectl delete -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.2.0/standard-install.yaml