メインコンテンツまでスキップ
バージョン: User Guides (BYOC)

クラスター接続の準備

すべての BYOC クラスターは、独自の仮想ネットワーク(AWS VPC、GCP VPC、または Microsoft Azure VNet)上に完全にホストされており、パブリックエンドポイントを持ちません。このガイドでは、これらの BYOC クラスターに接続するための 2 つのアプローチについて説明します。

クラウドプロバイダーが使用する規約とその対応関係

このガイドは、クラウドプロバイダーに関係なく、すべての BYOC クラスターに適用されます。用語の違いに対処し、説明を簡潔にするため、ガイドで使用する規約と、各プロバイダーが使用する規約との対応関係を以下に示します。

規約

AWS

GCP

Azure

仮想ネットワーク

VPC

VPC

VNet

Security group

Security group

Firewall rules

ネットワーク Security Group (NSG)

Load balancer

ネットワーク Load Balancer (NLB)

Cloud Load Balancer

Load Balancer

プライベート endpoint

プライベートLink

プライベート Service Connect (PSC)

プライベート Link

仮想ネットワーク endpoint

VPC Endpoint

PSC Endpoint

プライベート Endpoint

仮想ネットワーク endpoint service

VPC Endpoint Service

PSC Publishing

プライベート Link Service

利用可能な接続モード

BYOC クラスターには、以下のいずれかのモードで接続できます。

  • Direct VPC access

    このモードでは、クライアント(通常は BYOC クラスターと連携するアプリケーション)は、BYOC クラスターと同じ仮想ネットワークに存在します。このモードはデフォルトの選択であり、追加のネットワーク設定は必要ありません。

    これを使用するには、データプレーンのデプロイ時にプライベートエンドポイントを選択しないでください。

  • プライベート endpoint access

    このモードでは、クライアントは複数の仮想ネットワークや異なるアカウントに存在する可能性があります。これには一度限りのセットアップが必要ですが、プライベートエンドポイントが整えば、新しいクラスターの追加や追加のクライアント仮想ネットワークの接続が簡単になります。

    これを使用するには、データプレーンのデプロイ時にプライベートエンドポイントを有効にしてください。

以下の表では、これら 2 つのモードをセットアップの複雑さ、可用性、クラスターごとのアクセス制御、クロスアカウント対応、およびマルチ仮想ネットワークのスケーラビリティの観点から比較しています。

Mode 1: Direct VPC Access

Mode 2: プライベートLink Access

Best for

Clients in the same VPC as the data plane

Clients in multiple VPCs or different accounts

Setup complexity

Low — works by default after deployment

One-time setup; simpler to scale as 新しいクラスターs are added, automatically accessible via wildcard DNS

Availability

Default for all BYOC deployments

Currently requires contacting Zilliz Support to enable (self-service coming soon)

Per-cluster access control

Security Group per cluster load balancer

Kubernetes Envoy Gateway SecurityPolicy

Cross-account support

No

Yes

Multi-virtual-network scalability

Low — each new client VPC requires a separate VPC Peering and routing configurations.

High — new client VPCs connect via a single Endpoint Service; 新しいクラスターs are reachable immediately.

Direct VPC access

各 BYOC クラスターは実際には Kubernetes クラスターであり、エントリーポイントとしてロードバランサーを公開しています。ロードバランサーは、ポート 19530 でクラスターへの着信トラフィックを転送します。Zilliz はパブリックホストゾーンを介してクラスターエンドポイントを管理しているため、クライアントがロードバランサーとのレイヤー 3 接続を確立していれば、任意のネットワークからトラフィックを解決できます。

WXXlwsQOfhAw5NbizaFcvEYJnBh

上図は、クライアントアプリケーションから BYOC クラスターへのトラフィックフローを示しています。ここでは、クラスター固有のロードバランサーが各クラスターの Milvus プロキシ にトラフィックを転送します。各クラスターには独自のロードバランサーがあり、クラスターレベルのアクセス制御を実装できます。

前提条件

  • クライアントアプリケーションが BYOC プロジェクトのデータプレーンと同じ仮想ネットワークで実行されているか、クライアントの仮想ネットワークとデータプレーンの仮想ネットワークが、適切なルートテーブルエントリを持つ仮想ネットワークピアリングを介して接続されていること。

  • クライアントに関連付けられたセキュリティグループが、データプレーンの仮想ネットワークセグメントへのポート 19530 でのアウトバウンドトラフィックを許可していること。

  • データプレーンのセキュリティグループが、クライアントのネットワークセグメントまたはセキュリティグループからのポート 19530 でのインバウンドトラフィックを許可していること。

ステップ 1: クラスターエンドポイントを取得する

1
2

BYOC プロジェクトに移動し、クラスターを選択します。

3

クラスターの詳細ページで、接続カードを見つけます。

4

クラスターエンドポイントをコピーします。形式は <i>http</i>s://${cluster-id}-internal.${region}.byoc.vectordb.zillizcloud.com:19530 です。

📘Notes

Terraform を使用してデプロイされた BYOC クラスターの場合、Terraform の出力からエンドポイントを取得することもできます。

ステップ 2: クラスターに接続する

次に、コピーしたクラスターエンドポイントと認証情報を使用してクラスターに接続できます。詳細については、クラスターへの接続を参照してください。

プライベート endpoint access

BYOC プロジェクトのデータプレーンのデプロイ時にプライベートエンドポイントを有効にした場合、データプレーンの仮想ネットワークに共有ゲートウェイがデプロイされ、エントリーポイントとして単一のロードバランサーが配置されます。ゲートウェイは TLS を終端し、リクエストのホスト名に基づいて正しいクラスターにトラフィックをルーティングします。

この場合、ロードバランサーを仮想ネットワークエンドポイントとして公開する必要があり、これにより、他のクラウドプロバイダーアカウントのものも含め、任意の数のクライアント仮想ネットワークがそのエンドポイントを介して BYOC クラスターに接続できるようになります。

L0zPwoEePhJF9Bbgln3cQXFMn8e

上図に示すように、クライアントアプリケーションと BYOC クラスター間のトラフィックは、クライアントの仮想ネットワーク内の仮想ネットワークエンドポイント、仮想ネットワークエンドポイントサービス、Zilliz Gateway として機能するデータプレーンの仮想ネットワーク内の共有ロードバランサー、クラスター固有の TLS 終端ゲートウェイ、および各クラスターの Milvus プロキシ を経由します。

クラスターエンドポイント(*.${region}.byoc.vectordb.zillizcloud.com)は、Zilliz Cloud が管理するパブリックアドレスに解決されます。したがって、各クライアントの仮想ネットワークは、ワイルドカードドメインを仮想ネットワークのプライベート IP アドレスに向ける DNS レコードを追加することで、DNS 解決をオーバーライドする必要があります。

📘Notes

データプレーンのデプロイ時にプライベートエンドポイントオプションを選択解除し、プライベートエンドポイントアクセスが必要な場合は、お問い合わせいただき、データプレーンでのゲートウェイデプロイメントを有効にできるようお手伝いさせていただきます。

前提条件

  • BYOC プロジェクトがあり、Zilliz テクニカルサポートがゲートウェイのデプロイメントを確認していること。

  • 仮想ネットワークエンドポイント、仮想ネットワークエンドポイントサービス、および DNS レコードを管理する権限があること。

  • クライアントの仮想ネットワークが、BYOC プロジェクトのデータプレーンと同じリージョンにあること。

ステップ 1: 仮想ネットワークエンドポイントサービスを作成する

ロードバランサーは、データプレーン内で zilliz-gateway という名前です。このロードバランサーから仮想ネットワークエンドポイントサービスを作成し、クライアントの仮想ネットワークがそれに接続できるようにする必要があります。

3 つのオプションが利用可能です。AWS コンソール、AWS CloudShell、または Zilliz が提供する Terraform スクリプトを使用して、仮想ネットワークエンドポイントを作成できます。

AWS コンソールでの操作

1

VPC コンソールに移動し、プライベートLink and Lattice > Endpoint services を選択します。

2

Create endpoint service をクリックします。

3

Load balancer type で、ネットワーク を選択します。

4

Available load balancers で、zilliz-gateway という名前の NLB を選択します。

5

Acceptance required を、アクセス制御の設定に応じて設定します(自動承認の場合は無効化)。

6

Create endpoint service をクリックします。

7

サービス名(例: com.amazonaws.vpce.${region}.vpce-svc-xxxxxxxxxxxxxxxxx)をメモします。これをすべてのクライアント VPC オーナーと共有します。

AWS CloudShell での操作

以下のコマンドを実行して、仮想ネットワークエンドポイントを作成します。

# Get the ARN of the zilliz-gateway NLB
NLB_ARN=$(aws elbv2 describe-load-balancers \
--query "LoadBalancers[?LoadBalancerName=='zilliz-gateway'].LoadBalancerArn" \
--output text)

# Create the endpoint service
aws ec2 create-vpc-endpoint-service-configuration \
--network-load-balancer-arns "$NLB_ARN" \
--no-acceptance-required \
--query "ServiceConfiguration.ServiceName" \
--output text

Terraform の使用

仮想ネットワークエンドポイントを作成するには、以下のコマンドを実行します。

data "aws_lb" "zilliz_gateway" {
name = "zilliz-gateway"
}

resource "aws_vpc_endpoint_service" "zilliz_gateway" {
network_load_balancer_arns = [data.aws_lb.zilliz_gateway.arn]
acceptance_required = false
}

output "endpoint_service_name" {
value = aws_vpc_endpoint_service.zilliz_gateway.service_name
}

ステップ 2: 各クライアント仮想ネットワークに Virtual ネットワーク Endpoint を作成する

AWS コンソール上で

BYOC クラスターに接続する必要のあるすべてのクライアント VPC について、以下の手順を繰り返してください。

1

VPC コンソールに移動し、プライベートLink and Lattice > Endpoints を選択します。

2

Create endpoint をクリックします。

3

Service category で、Other endpoint services を選択します。

4

ステップ 1 のサービス名を貼り付け、Verify serviceをクリックします。

5

クライアントアプリケーションが実行されているVPCを選択します。

6

使用する各アベイラビリティーゾーン内のサブネットを選択します。

7

ポート 19530 でのインバウンドトラフィックを許可するセキュリティグループを割り当てます。

8

Create endpoint をクリックします。

9

エンドポイントのステータスがAvailableになるまで待ちます。

上記で作成した各 VPC エンドポイントについて、各サブネットに割り当てられたプライベート IP アドレスを次のように取得します。

1

VPC コンソールに移動し、Endpointsをクリックします。

2

エンドポイントを選択し、サブネットタブに移動します。

3

各サブネットに記載されているIPアドレスを控えます。これらを A レコードのターゲットとして使用します。

AWS CloudShell 内で

プレースホルダーを実際の値に置き換えてコマンドを実行します。

# Replace with your values
SERVICE_NAME="com.amazonaws.vpce.${region}.vpce-svc-xxxxxxxxxxxxxxxxx"
VPC_ID="vpc-xxxxxxxxxxxxxxxxx"
SUBNET_IDS="subnet-aaa subnet-bbb subnet-ccc"
SECURITY_GROUP_ID="sg-xxxxxxxxxxxxxxxxx"

aws ec2 create-vpc-endpoint \
--vpc-endpoint-type Interface \
--service-name "$SERVICE_NAME" \
--vpc-id "$VPC_ID" \
--subnet-ids $SUBNET_IDS \
--security-group-ids "$SECURITY_GROUP_ID"

Terraform の使用

プレースホルダーを実際の値に置き換えて、コマンドを実行してください。

resource "aws_vpc_endpoint" "zilliz_byoc" {
vpc_id = var.client_vpc_id
service_name = aws_vpc_endpoint_service.zilliz_gateway.service_name
vpc_endpoint_type = "Interface"
subnet_ids = var.client_subnet_ids
security_group_ids = [var.client_security_group_id]
}

ステップ 3: DNS レコードの設定

クラスターエンドポイントドメイン(*.aws-${region}.byoc.vectordb.zillizcloud.com)は、 publicly reachable な Zilliz 管理の IP アドレスに解決されます。これを VPC エンドポイントにリダイレクトするには、VPC 内での DNS 解決を上書きするプライベート Route 53 ホストゾーンを作成する必要があります。

BYOC クラスターに接続する必要のあるすべてのクライアント VPC について、以下の手順を繰り返してください。

1

Route 53 コンソールを開き、Hosted zones に移動します。

2

Create hosted zone をクリックします。

3

Domain nameaws-${region}.byoc.vectordb.zillizcloud.com に設定します(${region} をお使いの AWS リージョンに置き換えてください。例:aws-us-west-2.byoc.vectordb.zillizcloud.com)。

4

Typeプライベート hosted zone に設定します。

5

クライアント VPC に関連付けます。

6

Create hosted zone をクリックします。

7

ホストゾーン内で、Create record をクリックします。

8

Record name*(ワイルドカード)に設定します。

9

Record typeA に設定します。

10

上記のエンドポイント IP アドレスを入力します(マルチ値を使用する場合は 1 行に 1 つずつ入力します)。

11

Create records をクリックします。

AWS CloudShell 内で

プレースホルダーを実際の値に置き換えて、コマンドを実行してください。

REGION="us-west-2"
VPC_ID="vpc-xxxxxxxxxxxxxxxxx"
HOSTED_ZONE_NAME="aws-${REGION}.byoc.vectordb.zillizcloud.com"
ENDPOINT_IPS='["10.0.1.x", "10.0.2.x", "10.0.3.x"]' # Replace with your endpoint IPs

# Create the private hosted zone
HOSTED_ZONE_ID=$(aws route53 create-hosted-zone \
--name "$HOSTED_ZONE_NAME" \
--caller-reference "$(date +%s)" \
--hosted-zone-config "PrivateZone=true" \
--vpc "VPCRegion=${REGION},VPCId=${VPC_ID}" \
--query "HostedZone.Id" \
--output text)

# Add the wildcard A record
aws route53 change-resource-record-sets \
--hosted-zone-id "$HOSTED_ZONE_ID" \
--change-batch "{
\"Changes\": [{
\"Action\": \"CREATE\",
\"ResourceRecordSet\": {
\"Name\": \"*.${HOSTED_ZONE_NAME}\",
\"Type\": \"A\",
\"TTL\": 60,
\"ResourceRecords\": $(echo $ENDPOINT_IPS | jq '[.[] | {\"Value\": .}]')
}
}]
}"

同じホストゾーンに追加の VPC を関連付けるには:

aws route53 associate-vpc-with-hosted-zone \
--hosted-zone-id "$HOSTED_ZONE_ID" \
--vpc "VPCRegion=${REGION},VPCId=${ADDTIONAL_VPC_ID}"

Terraform の使用

プレースホルダーを実際の値に置き換えて、コマンドを実行してください。

locals {
region = "us-west-2"
endpoint_ips = ["10.0.1.x", "10.0.2.x", "10.0.3.x"] # Replace with your endpoint IPs
}

resource "aws_route53_zone" "zilliz_byoc" {
name = "aws-${local.region}.byoc.vectordb.zillizcloud.com"

vpc {
vpc_id = var.client_vpc_id
}
}

resource "aws_route53_record" "zilliz_byoc_wildcard" {
zone_id = aws_route53_zone.zilliz_byoc.zone_id
name = "*.aws-${local.region}.byoc.vectordb.zillizcloud.com"
type = "A"
ttl = 60
records = local.endpoint_ips
}

# Associate additional VPCs if needed
resource "aws_route53_zone_association" "additional_vpc" {
for_each = toset(var.additional_vpc_ids)

zone_id = aws_route53_zone.zilliz_byoc.zone_id
vpc_id = each.value
}

ステップ 4: クラスターへの接続

その後、コピーしたクラスターエンドポイントと認証情報を使用してクラスターに接続できます。詳細については、クラスターへの接続 を参照してください。

トラブルシューティング

次の表に、準備中に発生する可能性のある一般的な問題を示します。

症状

考えられる原因

解決方法

接続タイムアウト(モード 1)

セキュリティグループがポート 19530 をブロックしている

データプレーンのセキュリティグループでポート 19530 のインバウンドルールを追加するか、クライアントのセキュリティグループでアウトバウンドルールを追加してください。

接続タイムアウト(モード 2)

DNS が上書きされていない、または VPC エンドポイントが準備できていない

ホストゾーンが正しい VPC に関連付けられていることを確認してください;エンドポイントのステータスが「利用可能」であることを確認してください

DNS が誤った IP アドレス に解決される(モード 2)

プライベート ホストゾーンがクライアントの VPC に関連付けられていない

Route 53 ホストゾーンをすべてのクライアント VPC に関連付けてください

TLS エラー

SDK で secure=True / HTTPS が指定されていない

エンドポイント URI が https:// で始まっていることを確認してください