CRD を使用してアダプターをプロビジョニングする

Anypoint Service Mesh を使用してサービスを管理する前に、Anypoint Service Mesh アダプターをプロビジョニングして名前空間を準備する必要があります。プロビジョニングでは、Anypoint Service Mesh 構成で使用する名前空間を準備します。Anypoint Service Mesh で API を保護するすべての名前空間に対して、アダプターをプロビジョニングする必要があります。

アダプターは、Anypoint Platform からポリシーを取得し、ポリシーを満足しているかどうかを確認して、分析データを Anypoint Platform に返すポリシー適用コンポーネントとして機能します。

アダプターをプロビジョニングしたら、Kubernetes クラスターの各ポッドに Envoy サイドカーが挿入されるように、名前空間で ​istio-injection​ ラベルを設定し、その名前空間のすべての既存アプリケーションを再デプロイする必要があります。

Anypoint Service Mesh と Red Hat OpenShift をインストールしている場合、アプリケーションを実行する名前空間で ​istio-cni​ ネットワークアタッチメント定義を設定する必要があります。

アダプタープラン

アダプターをプロビジョニングするときは、Anypoint Service Mesh で管理するシステムの CPU 数とメモリ量に応じたアダプターサイズを指定する必要があります。現在サポートされているアダプタープランは次のとおりです。

プラン CPU (コア数) メモリ (GiB) API 制限

small

.5

1

25

medium

1

1.5

50

large

2

2

100

アダプターのサイズは、プロビジョニング後でも変更できます。サイズプランを変更すると、アダプターデプロイメントが適切に更新されます。そして Kubernetes は、新しい情報でポッドを作成します。ただし、新しいポッドの準備ができるまで、古いアダプターが要求を引き続き処理します。

新しいアダプターの準備ができると、古いポッドは終了し、すべての要求は新しいアダプターに送られます。更新時にスペース不足で新しいポッドを開始できない場合や、ポッドが準備できていない場合は、Kubernetes イベントにエラーメッセージが記録されます。この場合は、新しいポッドが使用できないため、古いアダプターが要求の処理を継続します。

不要になったアダプターは削除できます。ただし、アダプターを削除する前に、そのアダプターの既存のバインドをすべて削除する必要があります。

アダプターの状況

アダプターをプロビジョニングしたりアプリケーションにバインドしたりすると、アダプターコマンドの実行後にメッセージが表示されます。メッセージは、アダプターが、正常に作成、削除、または変更されたことを示します。

さらに、アダプターの状況を確認することで、アダプターの詳細を調べることができます。アダプターの状況を見るには、次のコマンドを実行します。

asmctl adapter list

状況の値には次のようなものがあります。

  • Ready​: アダプターを使用する準備ができています。

  • Failed​: アダプターが正常に作成されませんでした。エラーが発生しました。

  • Provisioning​: アダプターはプロビジョニング中です。

  • DeprovisionBlockedByExisingCredentials​: アダプターに使用中のバインドがあります。

    アダプターを削除する前に、関連付けられているすべてのバインドを削除する必要があります。

CRD を使用してアダプターをプロビジョニングする

CRD を使用して Anypoint Service Mesh アダプターをプロビジョニングする手順は次のとおりです。

  1. アダプター定義ファイルを作成し、.yaml ファイル拡張子を付けて保存します。

    apiVersion: servicecatalog.k8s.io/v1beta1
    kind: ServiceInstance
    metadata:
      name: <adapter name> # example: bookinfo-service-mesh-adapter
      namespace: <namespace name> # example: default
      labels:
        service-mesh.mulesoft.com/kind: adapter
    spec:
      clusterServiceClassExternalName: anypoint-service-mesh-adapter
      clusterServicePlanExternalName: <plan size > # example: small.
      parameters:
        clientId: <client id> # example: 4bc55ee4cfc84a2ddddbb2c1109d1123c5c4
        clientSecret: <client secret> # example: 8E5ae17BbB664Eddd9ab32A5fA869874Be7
        replication:
          replicas: <amount of replicas> # example: 2
  2. 次のコマンドを使用して CRD を適用します。 ​kubectl apply -f my-adapter.yaml

  3. 次のコマンドを使用して、​アダプター状況​を確認します。 ​asmctl adapter list

  4. 名前空間で Istio のラベルを設定します。 ​kubectl label ns <namespace> istio-injection=enabled

  5. Anypoint Service Mesh と Red Hat OpenShift をインストールしている場合、アプリケーションを実行する名前空間で次のコマンドを実行します。

    kubectl -n <namespace> apply -f - <<EOF
    
    apiVersion: "k8s.cni.cncf.io/v1"
    kind: NetworkAttachmentDefinition
    metadata:
      name: istio-cni
    EOF

    このコマンドにより、名前空間で Istio CNI プラグインを有効にするリソースが作成されます。

  6. 名前空間のすべての既存アプリケーションを再デプロイします。

Kubernetes シークレットの参照

Anypoint Service Mesh では、ユーザーログイン情報などの機密情報を保存して管理するために Kubernetes シークレットの使用がサポートされています。

タスクの前提条件

Kubernetes シークレットを作成するのに必要な権限が割り当てられている必要があります。

Kubernetes シークレットにクライアントログイン情報を保存する手順は、次のとおりです。

  1. YAML ファイルで、重要な情報を格納するシークレットを作成します (例: bookinfo-service-mesh-adapter-config.yaml​)。

    apiVersion: v1
    kind: Secret
    metadata:
      name: <secret name> # example: bookinfo-service-mesh-adapter-config
      namespace: <namespace name> # example: default
    type: Opaque
    stringData:
      config: |
        {
          "clientId": "<replace-with-clientId>",
          "clientSecret": "<replace-with-clientSecret>"
        }
  2. シークレットを適用します。

    kubectl apply -f bookinfo-service-mesh-adapter-config.yaml

    シークレットが正しく適用されると、​secret/bookinfo-service-mesh-adapter-config created​ というメッセージが表示されます。

  3. 次の例に示すように、アダプター CRD で (clientId および clientSecret パラメーターの代わりに) シークレットを参照します。

    apiVersion: servicecatalog.k8s.io/v1beta1
    kind: ServiceInstance
    metadata:
      name: <adapter name> # example: bookinfo-service-mesh-adapter
      namespace: <namespace name> # example: default
      labels:
        service-mesh.mulesoft.com/kind: adapter
    spec:
      clusterServiceClassExternalName: anypoint-service-mesh-adapter
      clusterServicePlanExternalName: <plan size > # example: small.
      parameters:
        replication:
          replicas: <amount of replicas> # example: 2
      parametersFrom: # The element specifies the secret name and configuration required for retrieving the parameters
        - secretKeyRef:
            name: <secret name> # example: bookinfo-service-mesh-adapter-config
            key: config