CRD を使用した API へのサービスのバインド

バインドを作成すると、Anypoint Service Mesh によって Kubernetes のサービス、サービスを表すために Anypoint Platform で作成した API、サービス用に作成したアダプターの 3 方向の関連付けが作成されます。

アダプターでは一意の API ID を使用してポリシーを取得し、クラスターで実行されているサービスに適用します。

Anypoint Platform を使用して API を作成した場合は、API ID を使用してサービスをバインドします。ただし、CRD を使用して API を作成した場合は、Kubernetes API リソース名を使用してサービスをバインドする必要があります。

バインドを作成した後、Anypoint Service Mesh によってバインド手順が実行され、状況が更新されるまで数秒かかります。バインドが完了すると、​list​ コマンドを使用して状況を表示できるようになります。状況の値には次のようなものがあります。

  • Ready (準備完了): バインドを使用する準備ができました。

  • Failed (失敗): バインドは正常に作成されませんでした。エラーが発生しました。

  • Binding (バインド): バインドは特定のアプリケーションへの関連付けの処理中です。

次の例では、​anypoint-service-mesh-adapter​ アダプターを ​customers​ サービスにバインドするために ​customers​ という名前のバインドが作成されています。このバインドは、アダプターが以前に作成されたのと同じ名前空間である ​nto-payments​ 名前空間で作成され、ID が 1234 の API に関連付けられます。

NAMESPACE      NAME        ADAPTER                         API ID  SERVICE NAME    STATUS
nto-payments   customers   anypoint-service-mesh-adapter   1234    customers       Ready

API をバインドする方法

好みに合わせて Anypoint Platform または Anypoint Service Mesh を使用して API をサービスにバインドできます。

Anypoint Platform を使用して作成された API をバインドする

サービスをバインドする前に、API Manager の [API Administration (API 管理)] タブから API ID を取得します。

サービスを API とバインドするには、次の手順を実行します。

  1. [Anypoint Platform] > [API administration (API 管理)]​ に移動して、API バージョン名を展開してインスタンスを表示します。

  2. インスタンス名をクリックして表示された API ID をコピーします。 この API ID を、簡単にアクセスできる場所に保存します。

    API ID の表示、80%、90%
    Figure 1. API バージョンウィンドウで API ID が表示される場所を示す図。
1 API 名と API インスタンスバージョン。
2 API ID。
  1. API にバインドするサービスの名前を Kubernetes から取得します。

    kubectl get svc -n <namespace>

  2. マイクロサービスポートが Istio の要件​に基づいて命名されていることを確認します。

  3. Anypoint Platform を使用して API を作成した場合は、​yaml​ ファイルで ​spec.parameters.apiId​ パラメーターを使用します。

    apiVersion: servicecatalog.k8s.io/v1beta1
    kind: ServiceBinding
    metadata:
      name: _binding name_ # example: orders-api-binding
      namespace: _namespace name_ # example: default
      labels:
        service-mesh.mulesoft.com/kind: adapter-binding
    spec:
      instanceRef:
        name: _Kubernetes adapter resource name_ # example: bookinfo-service-mesh-adapter
      parameters:
        apiId: _api ID_ # example: 15722113
        service: _Kubernetes service resource name_ # example: orders-service

    バインドは数秒以内にアクティブ化され、API が正常にプロキシに登録されます。

  4. 次のコマンドを使用してバインド状況を確認します。

    asmctl adapter binding list

    API をバインドすると、API Manager の API は [Active (アクティブ)] とマークされます。これで API を保護するためのポリシーを適用する準備ができました。

    85%
    Figure 2. サービスの状況が表示される場所を示す図。
1 API 名と API インスタンスバージョン。
2 サービスの状況。

Anypoint Service Mesh を使用して作成された API をバインドする

Anypoint Service Mesh の Autocreate を使用して作成された API をバインドする手順は、次のとおりです。

  1. バインド定義ファイルを作成し、次のように、​.yaml​ ファイル拡張子を付けて保存します。

    bind-api.yaml​:

  2. Anypoint Service Mesh を使用して API を作成した場合は、​spec.instanceRef.name​ を使用します。

    apiVersion: servicecatalog.k8s.io/v1beta1
    kind: ServiceBinding
    metadata:
      # name is used as resulting secret name if no secretName is specified under the spec section.
      name: _binding name_ # example: orders-api-binding
      namespace: _namespace name_ # example: default
      labels:
        service-mesh.mulesoft.com/kind: api-binding
    spec:
      instanceRef:
        name: _Kubernetes API resource name_ # example: orders-api
      parameters:
        adapter: _Kubernetes adapter resource name_ # example: bookinfo-service-mesh-adapter
        service: _Kubernetes service resource name_ # example: orders-service
  3. 次のコマンドを使用して CRD を適用します。

    kubectl apply -f bind-api.yaml

  4. バインドの状況を確認します。

    asmctl api binding list

  5. Istio サイドカーの状況を確認します。

    asmctl management check sidecar --namespace=​namespace

    API Manager で API が ​Active​ とマークされ、ポリシーを適用して API を保護できるようになります。