すべてのプロダクト
Search
ドキュメントセンター

Alibaba Cloud Service Mesh:ASM インスタンス内のビジネスサービスが外部データベースにアクセスできる場合、サービス認証が失敗するのはなぜですか。

最終更新日:Jan 13, 2025

サービスメッシュ(ASM)インスタンス内のビジネスサービスが外部データベースにアクセスできる場合でも、サービス認証が失敗することがあります。このトピックでは、この問題の原因と解決策について説明します。

問題の説明

V1.10 以前の ASM インスタンスを使用しています。サービス A などのビジネスサービスを使用して、異なる外部データベースにアクセスし、データベースへのログオンに使用される認証情報が異なっています。サービス A を ASM インスタンスに追加し、サービス A をホストする Pod のサイドカープロキシインジェクションを有効にすると、サービス A が外部データベースにアクセスしようとすると、認証エラーを示すエラーメッセージが表示されます。

原因

ExternalName タイプのサービスを使用して、コンテナサービス Kubernetes 版(ACK)クラスター外の Transmission Control Protocol(TCP)ネットワークサービスデータベースの CNAME レコードを追加した可能性があります。サービス A が ASM インスタンスに追加されると、ACK クラスターの IP アドレスが外部データベースのドメイン名にマッピングされていないため、サービス A から外部データベースへのリクエストは、一致するポートに基づいて送信されます。これにより、外部データベースへのリクエストが別のデータベースに送信されるという問題が発生する可能性があります。その後、2 つのデータベースのログオンに必要な認証情報が異なるため、認証は失敗します。

解決策

解決策 1:ASM インスタンスのバージョンを更新する

ASM インスタンスのバージョンを V1.11 以降に更新することで、この問題を解決できます。詳細については、「ASM インスタンスの更新」トピックの手順セクションをご参照ください。

解決策 2:サービスエントリを使用する

インスタンス内のサービスがサービスエントリで指定された IP アドレスで識別されるデータベースにアクセスできるように、ASM インスタンスにサービスエントリを作成できます。特定の名前空間にサービスエントリを作成することもできます。このように、サービスエントリはその名前空間でのみ有効になります。

  1. ASM コンソール にログオンします。

  2. 左側のナビゲーションペインで、[サービスメッシュ] > [メッシュ管理] を選択します。

  3. [メッシュ管理] ページで、構成する ASM インスタンスを見つけます。[管理] 列の ASM インスタンス名をクリックするか、[アクション] をクリックします。

  4. ASM インスタンスの詳細ページで、[クラスターとワークロードの管理] > [外部サービス (serviceentry)] を選択します。表示されるページで、[YAML から作成] をクリックします。

  5. [作成] ページで、[名前空間] ドロップダウンリストから istio-system を選択し、テンプレートを選択し、[YAML] コードエディターの内容を次のコードに置き換えて、[作成] をクリックします。

    apiVersion: networking.istio.io/v1beta1
    kind: ServiceEntry
    metadata:
      name: mysql-demo
    spec:
      addresses:
      - 172.1.xx.xx  // アクセスするデータベースのIPアドレス
      endpoints:
      - address: 172.1.xx.xx
      hosts:
      - test-mysql.com
      location: MESH_EXTERNAL
      ports:
      - name: tcp
        number: 3306 // アクセスするデータベースのポート
        protocol: TCP
      resolution: STATIC
    • addresses: アクセスするデータベースの IP アドレス。

    • number: アクセスするデータベースのポート。