API のプロビジョニングの問題のトラブルシューティング

アダプターをプロビジョニングしたら、サービスをバインドする API を作成する必要があります。無効なログイン情報を指定すると、API のプロビジョニング時にエラーが発生することがあります。以下の各セクションでは、API のプロビジョニングの問題の考えられる原因と解決法を説明します。

クライアントシークレットの設定が正しくない

シークレットを使用して API を作成する場合は、シークレットを正しく参照していることを確認する必要があります。

原因

無効なログイン情報を指定すると、次のエラーが発生します。

API のプロビジョニング時のログイン情報エラー

診断

この問題を診断する手順は、次のとおりです。

kubectl describe serviceinstance ​api_instance_name​ コマンドを使用して、サービスインスタンスの状態を確認します。

+ $ kubectl describe serviceinstance inventory-resource-api​ ​Status​ 項目に、エラーの詳細が表示されます。

+ image::error-with-params-error-display-api-prov-service-mesh.png[API のプロビジョニング時のパラメーターエラー]

次の例では、stringData セクションのクライアントシークレットセグメントの最後に余分なカンマがあるためにエラーとなっています。

apiVersion: v1
kind: Secret
metadata:
  name: my-credentials
  namespace: nto-payment
type: Opaque
stringData:
  user-pass:
    '{
      "clientId": "<id>",
      "clientSecret": "<secret>",
    }'
text

解決策

この問題を解決する手順は、次のとおりです。

  1. API を削除します。

  2. ログイン情報エラーを解決します。

  3. API を作成し直します。

API 仕様ファイルがサポートされているサイズを超過している

550KB より大きい仕様ファイルで API をプロビジョニングしようとすると、プロビジョニング動作や Service Mesh のサービスで問題が発生することがあります。

原因

大きなファイルを使用すると、Service Catalog の制限によってポッドが再起動することがあります。

E0605 21:13:58.080886       1 controller_instance.go:1968] ServiceInstance "default/flights-api-v1" v8611662: Failed to update status: rpc error: code = ResourceExhausted desc = trying to send message larger than max (2554151 vs. 2097152)
I0605 21:13:58.080907       1 controller.go:408] Dropping ServiceInstance "default/flights-api-v1" out of the queue: rpc error: code = ResourceExhausted desc = trying to send message larger than max (2554151 vs. 2097152)
text

診断

この問題を診断する手順は、次のとおりです。

  1. Service Catalog の状況を確認します。

    $ kubectl get pods -n service-mesh

    Running​ 以外の状況が表示されている場合は、リソース不足が原因で Service Catalog ポッドがエラーになっている可能性があります。

  2. ポッドが正常に動作している場合は、​rpc​ エラーのログを確認します。

    $ kubectl logs -f deployment/service-mesh-catalog-controller-manager -n service-mesh --tail=250 | grep "rpc error"

解決策

この問題を解決する手順は、次のとおりです。

  1. Service Catalog ポッドがエラーになる場合は、リソースの上限を増やします。

    $ kubectl -n service-mesh set resources deployment service-mesh-catalog-controller-manager --limits=memory=64Mi

    $ kubectl -n service-mesh set resources deployment service-mesh-catalog-webhook --limits=memory=64Mi

  2. サービスインスタンスを削除します。

  3. Anypoint Platform から API を作成します。

API のプロビジョニングエラー

Anypoint Service Mesh を使用して API をプロビジョニングする場合、アセット (Exchange 内) と API インスタンス (API Manager 内) が Anypoint Platform で正常に作成されない場合があります。

原因

このエラーは以下の試行時に発生することがあります。

  • 7 日間を超えてから削除されたアセットの Exchange での再作成

  • 無効な値での API のプロビジョニング

診断

この問題を診断する手順は、次のとおりです。

  1. $ asmctl api list​ コマンドを実行します。

    API の状況は ​ProvisionCallFailed​ と表示されます。

  2. asmctl api logs --name=<replace_with_api_name> --namespace=<replace_with_namespace>​ コマンドを実行します。

    無効な値で API をプロビジョニング使用とした場合の出力例を示します。

    DATE                   MESSAGE
    2020-05-29T17:12:36Z   Error provisioning ServiceInstance of ClusterServiceClass (K8S: "1c3b2100-5cdc-49ea-9423-dd7170e674b4" ExternalName: "anypoint-platform-api-instance") at ClusterServiceBroker "service-mesh-incluster-broker": Status: 400; ErrorMessage: Bad Request; Description: version: should match pattern "^\d+\.\d+\.\d+(-.+)?$" (ID: 49724b5d-7fad-4cc3-980e-695c2e47b383); ResponseError: <nil>
    text
  3. 情報が何も表示されない場合は、​kubectl describe serviceinstances <replace_with_api_name> -n <replace_with_namespace>​ コマンドを実行します。

    リソースの ​status​ セクションには、問題を説明したエラーメッセージが表示されます。

    Error provisioning ServiceInstance of ClusterServiceClass (K8S: "1c3b2100-5cdc-49ea-9423-dd7170e674b4"
    ExternalName: "anypoint-platform-api-instance") at ClusterServiceBroker "service-mesh-incluster-broker": Status: 410; ErrorMessage: Gone; Description: Error from Exchange: There is no asset matching given parameters. (ID: 79d0cc7f-9969-477b-816d-c822916c0290); ResponseError: <nil>' reason: ProvisionCallFailed
    text

このケースでは、7 日間を超えてから削除されたアセットを Exchange で作成し直そうとしたことがエラーの原因です。Exchange ではこのような操作は許可されませんので、新しい ​assetId​ を使用して新しいアセットを作成してください。

解決策

この問題を解決する手順は、次のとおりです。

  1. API を削除します。

    asmctl api delete --name=<replace_with_api_name> --namespace=<replace_with_namespace>

  2. 新しいアセットを使用することでエラーを修復します。

  3. API を作成し直します。