kubectlを使用した仮想サービス・ルート表の管理

kubectlコマンドを使用すると、仮想サービス・ルート表を作成、更新、移動、リスト、表示および削除できます。次のトピックでは、kubectlを使用してこれらの操作を管理する方法について説明します。

仮想サービスのルート表に必要なIAMポリシー

仮想サービス・ルート表を使用するには、管理者がポリシー(IAM)で必要なアクセス・タイプを付与する必要があります。コンソール、REST API、SDK、CLI、Kubernetes kubectlまたはその他のツールのいずれを使用している場合でも、適切な権限が必要です。

アクションによって権限が拒否または認可されていないメッセージが生成される場合は、管理者にいくつかの設定を確認してください。管理者は、適切なタイプのアクセス権が付与され、正しいコンパートメントが指定されていることを確認する必要があります。

たとえば、グループMeshAdminsのユーザーがコンパートメントsales-app内のすべての仮想サービスを作成、更新および削除できるようにするには:

Allow group MeshAdmins to manage mesh-virtual-service-route-tables in compartment sales-app

各リソースのサービス・メッシュIAMポリシー・リファレンスの詳細は、サービス・メッシュIAMポリシーを参照してください。

サービス・メッシュに必要なすべてのIAMポリシーを設定するステップバイステップ・ガイドは、サービス・メッシュに必要なポリシーの設定を参照してください

仮想サービス・ルート表のKubernetes構成オプションの表示

カスタム・リソース定義(CRD)を表示することで、Kubernetes CLI仮想サービス・ルート表YAML構成オプションを表示できます。次のコマンドを使用します:

kubectl get crd virtualserviceroutetables.servicemesh.oci.oracle.com -o yaml

CRDでは、spec:schema:openAPIV3Schema:properties:specの下のYAML構成ファイルで使用されているフィールドが表示されます。CRD出力には、フィールド・タイプ、範囲および制限に関する情報も含まれます。次の項では、YAML構成ファイルの例を示します。

仮想サービス・ルート表の作成

仮想サービス・ルート表を作成するには、kubectl applyコマンドを使用します。次に例を示します。

kubectl apply -f virtual-service-route-table.yaml

リソースは、YAML構成ファイルでmetadata:namespaceフィールドを指定することで、異なるネームスペースで作成できます。デフォルトでは、名前空間が指定されていない場合、このコマンドは現在の名前空間を使用します。YAML構成ファイルのスペック・セクションでメッシュを指定する場合は、メッシュIDまたはメッシュ参照を使用できます。

サンプル: virtual-service-route-table.yaml (参照)
apiVersion: servicemesh.oci.oracle.com/v1beta1
kind: VirtualServiceRouteTable
metadata:
  name: <name>  # Name of virtual service route table
  namespace: <namespace>
  labels:
    version: v1
spec:
  compartmentId: ocid1.compartment.oc1..aaa...
  name: <internalName>  # Virtual service route table name inside the virtual service
  description: My Virtual Service Route Table
  virtualService:
    ref:
      name: <virtualServiceName>  # Name of the virtual service. This should be the name that is used in the metadata name field for the virtual service resource.
      namespace: <virtualServiceNamespace>  # Namespace of the referenced CR. If unspecified, defaults to the referencing object's namespace.
  routeRules:
    - httpRoute:
        destinations:
          - virtualDeployment:
              ref:
                name: <virtualDeploymentName>  # Name of the virtual deployment. This should be the name that is used in the metadata name field for the virtual deployment resource.
                namespace: <virtualDeploymentNamespace>  # Namespace of the referenced CR. If unspecified, defaults to the referencing object's namespace.
            port: 9080
            weight: 100
        isGrpc: true
        path: /
        pathType: PREFIX
サンプル: virtual-service-route-table.yaml (ID)
apiVersion: servicemesh.oci.oracle.com/v1beta1
kind: VirtualServiceRouteTable
metadata:
  name: <name>  # Name of virtual service route table
  namespace: <namespace>
  labels:
    version: v1
spec:
  compartmentId: ocid1.compartment.oc1..aaa...
  name: <internalName>  # Virtual service route table name inside the virtual service
  description: My Virtual Service Route Table
  virtualService:
    id: ocid1.meshvirtualservice.oc1..aaa...
  routeRules:
    - httpRoute:
        destinations:
          - virtualDeployment:
              id: ocid1.meshvirtualserviceroutetable.oc1..aaa...
            port: 9080
            weight: 100
        isGrpc: true
        path: /
        pathType: PREFIX

ヒント

サービス・メッシュKubernetesカスタム・リソース・ステータスの詳細は、「サービス・メッシュKubernetesリソース条件」を参照してください。

場所:

  • <name> (immutable): 仮想サービス・ルート表の名前。名前は同じ仮想サービス内で一意である必要があり、作成後に変更できません。名前は、文字またはアンダースコアで始まり、文字、数字、ハイフンまたはアンダースコアが続く必要があります。長さは1から255文字です。機密情報を入力しないでください。
  • <compartmentId> (オプション): 仮想サービス・ルート表が属するコンパートメントのOCID。
  • <virtualService:id:>この仮想サービスのルート表が作成される仮想サービスのOCID。
  • <description> (オプション): 仮想サービスのルート表の説明。フィールドは変更可能です。機密情報を入力しないでください。
  • <priority> (オプション): ルート表の優先度を1から1000に設定します。デフォルトは500です。数値が小さいほど優先度が高くなります。同じ優先度で、ルート表は、最も新しいルート表が最も高い優先度で作成された時間に基づいて優先順位付けされます。
  • <routeRules>: 仮想サービス・ルート表のルート条件および宛先。少なくとも1つのルート・ルールが必要であり、各ルールで次を指定できます:

    httpRoutetcpRouteまたはtlsPassthroughRouteから選択します。tlsPassthroughRouteを選択した場合、プロキシはTLSを管理しません。暗号化されたデータは、TLSを独自に管理するアプリケーションにそのまま渡されます。

    httpRoute:

    • <path>: このルートへのパス(/mypathなど)。ルート(「/」)にデフォルト設定するパス値を指定しません。ルート値を指定せずにパスを指定すると、ルールによってルート(/)がパスの先頭に付加されます。
    • <pathType>: 指定されたパスのタイプ。デフォルトのPREFIXオプションは、パスをエンドポイントへの接頭辞として処理し、サポートされている唯一のオプションです。pathTypeが指定されていない場合、デフォルトが使用されます。
    • <isGrpc>: trueに設定すると、content-typeヘッダーにapplication/grpcまたは様々なapplication/grpc+値の1つが含まれていることがチェックされます。
    • <destinations>: このルートの仮想デプロイメントの宛先を定義します。少なくとも1つの出力先が必要です。
      • <virtualDeployment:id>: リクエストがルーティングされる仮想デプロイメントのOCID。
      • <weight>: この宛先の重み。宛先が1つのみ作成されている場合、値はデフォルトで100になります。複数の宛先を作成する場合は、宛先ごとに1から100の値を指定できます。合計すると、すべての宛先の加重の合計が100になる必要があります。
      • <port>:
        1から65535の範囲のポートを選択します。このルールで許可されるポートは1つのみです。ポートを指定しない場合、ルールは仮想デプロイメントのすべてのポートをターゲットとします。
        注意

        メッシュ・リソースでは、15000、15003、15006および9901のサービス・メッシュ予約済ポートを使用しないでください。

仮想サービス・ルート表の更新

kubectlを使用して仮想サービスのルート表を更新するには:
  1. 構成ファイルを必要に応じて変更します。
  2. ファイルを保存します。
  3. applyコマンドを再度実行します。

仮想サービスのルート表の移動

仮想サービス・ルート表を別のコンパートメントに移動するには:
  1. コンパートメントOCIDをターゲット・コンパートメントの値に更新します。
  2. ファイルを保存します。
  3. applyコマンドを再度実行します。

仮想サービス・ルート表のリストの取得

ネームスペース内の仮想サービス・ルート表のリストを取得するには、次のコマンドを使用します:

kubectl get virtualserviceroutetables -n <namespace>

仮想サービスのルート表の表示

ネームスペース内の特定の仮想サービス・ルート表の詳細を表示するには、次のコマンドを使用します:

kubectl describe virtualserviceroutetable <name> -n <namespace>

仮想サービスのルート表の削除

ネームスペース内の特定の仮想サービス・ルート表を削除するには、次のコマンドを使用します:

kubectl delete virtualserviceroutetable <name> -n <namespace>