メインコンテンツまでスキップ
バージョン: 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 クラスターと同じ仮想ネットワーク内に存在します。このモードはデフォルトの選択肢であり、追加のネットワーク設定は不要です。

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

  • プライベート endpoint access

    このモードでは、クライアントが複数の仮想ネットワークにまたがって存在したり、異なるアカウントに存在したりする可能性があります。これには一度の設定が必要ですが、private endpoint を構築 once すれば、新しいクラスターの追加や追加のクライアント仮想ネットワークへの接続が容易になります。

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

以下の表は、これらの 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

Zilliz Cloud console を開きます。

2

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

3

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

4

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

📘Notes

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

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

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

プライベート endpoint access

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

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

L0zPwoEePhJF9Bbgln3cQXFMn8e

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

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

📘Notes

データプレーンのデプロイ中に private endpoint オプションの選択を外したが、private endpoint アクセスが必要な場合は、データプレーン内でのゲートウェイデプロイを有効にするためにお問い合わせください

前提条件

  • 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 に関連付けられているか確認し、エンドポイントのステータスが「Available」であることを確認します

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

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

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

TLS エラー

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

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