メインコンテンツまでスキップ

クラスター接続の準備

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

クラウドプロバイダーで使用される用語とその対応関係

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

用語AWSGCPAzure
仮想ネットワークVPCVPCVNet
セキュリティグループSecurity groupFirewall rulesNetwork Security Group (NSG)
ロードバランサーNetwork Load Balancer (NLB)Cloud Load BalancerLoad Balancer
プライベートエンドポイントPrivateLinkPrivate Service Connect (PSC)Private Link
仮想ネットワークエンドポイントVPC EndpointPSC EndpointPrivate Endpoint
仮想ネットワークエンドポイントサービスVPC Endpoint ServicePSC PublishingPrivate Link Service

利用可能な接続モード

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

  • Direct VPC アクセス

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

    これを使用するには、データプレーンのデプロイ時に private endpoint を選択しないでください。

  • Private endpoint アクセス

    このモードでは、クライアントは複数の仮想ネットワークまたは異なるアカウントにまたがって存在できます。これには一度だけセットアップが必要ですが、private endpoint を配置すれば、新しいクラスターの追加や追加のクライアント仮想ネットワークの接続は簡単になります。

    これを使用するには、データプレーンのデプロイ時に private endpoint を有効にしてください。

次の表では、これら 2 つのモードを、セットアップの複雑さ、可用性、クラスター単位のアクセス制御、クロスアカウントサポート、および複数仮想ネットワークへのスケーラビリティの観点から比較しています。

モード 1: Direct VPC アクセスモード 2: PrivateLink アクセス
最適な用途データプレーンと同じ VPC 内のクライアント複数の VPC または異なるアカウント内のクライアント
セットアップの複雑さ低 — デプロイ後はデフォルトで動作一度だけセットアップが必要。新しいクラスターが追加されるとスケールしやすく、wildcard DNS により自動的にアクセス可能
可用性すべての BYOC デプロイメントのデフォルト現在は有効化のために Zilliz Support への問い合わせが必要(セルフサービスは近日対応予定)
クラスター単位のアクセス制御クラスターの load balancer ごとの Security GroupKubernetes Envoy Gateway SecurityPolicy
クロスアカウントサポートいいえはい
複数仮想ネットワークへのスケーラビリティ低 — 新しいクライアント VPC ごとに個別の VPC Peering とルーティング設定が必要です。高 — 新しいクライアント VPC は単一の Endpoint Service 経由で接続し、新しいクラスターにも即座に到達できます。

Direct VPC access

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

WXXlwsQOfhAw5NbizaFcvEYJnBh

上の図は、クライアントアプリケーションから BYOC クラスターへのトラフィックフローを示しています。ここでは、クラスターごとの load balancer が各クラスター内の Milvus Proxy にトラフィックを転送します。各クラスターは独自の load balancer を持つため、クラスター単位のアクセス制御を実装できます。

前提条件

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

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

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

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

1
2

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

3

Cluster Details ページで、Connect カードを見つけます。

4

Cluster Endpoint をコピーします。形式は https://${cluster-id}-internal.${region}.byoc.vectordb.zillizcloud.com:19530 です。

📘Notes

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

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

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

Private endpoint access

BYOC プロジェクトのデータプレーンのデプロイ中に private endpoint を有効にしている場合、データプレーン仮想ネットワーク内に共有 gateway がデプロイされ、そのエントリポイントとして単一の load balancer が使用されます。gateway は TLS を終端し、リクエストのホスト名に基づいて正しいクラスターにトラフィックをルーティングします。

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

L0zPwoEePhJF9Bbgln3cQXFMn8e

上の図に示すように、クライアントアプリケーションと BYOC クラスター間のトラフィックは、クライアント仮想ネットワーク内の virtual network endpoint、virtual network endpoint service、Zilliz Gateway として機能するデータプレーン仮想ネットワーク内の共有 load balancer、クラスター固有の TLS termination gateway、そして各クラスター内の Milvus Proxy を通過します。

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

📘Notes

データプレーンのデプロイ時に private endpoint オプションを選択解除していて、private endpoint access が必要な場合は、データプレーンで gateway デプロイメントを有効にできるよう お問い合わせください

前提条件

  • BYOC プロジェクトを所有しており、gateway がデプロイされていることを Zilliz Technical Support が確認していること。

  • virtual network endpoint、virtual network endpoint service、および DNS レコードを管理する権限を持っていること。

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

ステップ 1: Virtual Network Endpoint Service を作成する

データプレーン内の load balancer の名前は zilliz-gateway です。クライアント仮想ネットワークが接続できるように、この load balancer から virtual network endpoint service を作成する必要があります。

利用可能な方法は 3 つあります。AWS コンソール、AWS CloudShell、または Zilliz が提供する Terraform スクリプトを使用して virtual network endpoint を作成できます。

AWS コンソールで

1

VPC コンソールに移動し、PrivateLink and Lattice > Endpoint services を選択します。

2

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

3

Load balancer type で、Network を選択します。

4

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

5

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

6

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

7

Service name(例: com.amazonaws.vpce.${region}.vpce-svc-xxxxxxxxxxxxxxxxx)を控えます。これはすべてのクライアント VPC オーナーと共有します。

AWS CloudShell で

次のコマンドを実行して virtual network endpoint を作成します。

bash
# 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 を使用する

次のコマンドを実行して virtual network endpoint を作成します。

bash
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 Network Endpoint を作成する

AWS コンソールで

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

1

VPC コンソールに移動し、PrivateLink and Lattice > Endpoints を選択します。

2

Create endpoint をクリックします。

3

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

4

ステップ 1 の Service name を貼り付け、Verify service をクリックします。

5

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

6

使用したい各アベイラビリティゾーンの subnets を選択します。

7

ポート 19530 のインバウンドトラフィックを許可する security group を割り当てます。

8

Create endpoint をクリックします。

9

endpoint のステータスが Available になるまで待ちます。

上で作成した各 VPC Endpoint について、各 subnet に割り当てられたプライベート IP アドレスを次のように取得します。

1

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

2

endpoint を選択し、Subnets タブに移動します。

3

各 subnet に表示されている IP address を控えます。これらは A レコードのターゲットとして使用します。

AWS CloudShell で

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

bash
# 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 を使用する

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

bash
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) は、パブリックに到達可能な Zilliz 管理の IP アドレスに名前解決されます。これを VPC Endpoint にリダイレクトするには、VPC 内で DNS 解決をオーバーライドする private Route 53 hosted zone を作成する必要があります。

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

TypePrivate hosted zone に設定します。

5

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

6

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

7

hosted zone 内で、Create record をクリックします。

8

Record name*(wildcard)に設定します。

9

Record typeA に設定します。

10

上で取得した endpoint IP アドレスを入力します(multivalue を使用する場合は 1 行に 1 つ)。

11

Create records をクリックします。

AWS CloudShell で

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

bash
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\": .}]')
}
}]
}"

同じ hosted zone に追加の VPC を関連付けるには、次を実行します。

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

Terraform を使用する

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

bash
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: クラスターに接続する

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

トラブルシューティング

次の表は、準備中によく発生する問題を示しています。

症状考えられる原因解決方法
接続タイムアウト(モード 1)Security group がポート 19530 をブロックしているデータプレーンの security group にポート 19530 のインバウンドルールを追加するか、クライアントの security group にアウトバウンドルールを追加します。
接続タイムアウト(モード 2)DNS がオーバーライドされていない、または VPC Endpoint の準備ができていないhosted zone が正しい VPC に関連付けられていることを確認し、endpoint のステータスが Available であることを確認します
DNS が誤った IP アドレスに名前解決される(モード 2)Private hosted zone がクライアント VPC に関連付けられていないRoute 53 hosted zone をすべてのクライアント VPC に関連付けます
TLS エラーSDK で secure=True / HTTPS が指定されていないendpoint URI が https:// で始まっていることを確認します