Alibaba Cloud DNS PrivateZone は、1 つ以上の VPC (Virtual Private Cloud) 内のプライベートドメイン名を IP アドレスにマッピングし、これらの VPC の外部からのアクセスをブロックします。ACK Serverless は PrivateZone と統合されており、クラスター内の各サービスに安定した DNS 名を提供するため、IP の追跡は不要です。
PrivateZone ベースのサービス検出は、イントラネットサービス、ヘッドレスサービス、ClusterIP サービスの 3 種類のサービスをサポートしています。
CoreDNS ベースのアプローチをご希望の場合は、「ACK Serverless クラスターでの DNS 名前解決の仕組み」をご参照ください。
前提条件
開始する前に、以下の前提条件を満たしていることを確認してください:
Alibaba Cloud DNS コンソールで Alibaba Cloud DNS PrivateZone が有効化されていること
説明PrivateZone は UAE (ドバイ) リージョンでは利用できません。
PrivateZone コンポーネントを有効にして作成された ACK Serverless クラスター。 以下のいずれかの方法を使用します:
新規クラスター: クラスターを作成する際に、[PrivateZone] を [サービス検出] パラメーターとして選択します。

既存のクラスター:
eci-profileConfigMap のenablePrivateZoneパラメーターをtrueに設定します。
クラスターに接続された kubectl クライアント
課金
PrivateZone の料金詳細については、「料金」をご参照ください。
仕組み
PrivateZone は、$svc.$ns フォーマットで DNS レコードを作成します。各サービスタイプは、異なる DNS レコード構造にマッピングされます:
| サービスタイプ | レコード数 | 解決先 |
|---|---|---|
| LoadBalancer (イントラネット) | 1 | SLB インスタンスの IP アドレス |
| ClusterIP | 1 | クラスター IP アドレス |
| ヘッドレス | 複数 | すべてのバックエンド Pod の IP アドレス |
レコードが作成されると、VPC 内の Pod はプライベートドメイン名を使用して任意のサービスにアクセスできます。
ドメイン名のフォーマット:
| フォーマット | スコープ | 例 |
|---|---|---|
$svc | 同じ名前空間 | nginx |
$svc.$ns | 異なる名前空間 | nginx.prod |
$svc.$ns.svc.cluster.local.$clusterId | 現在のクラスター (完全名);クラスター間のアクセスにも使用可能 | nginx.prod.svc.cluster.local.c1a2b3 |
PrivateZone を使用したサービス検出の有効化
ステップ 1: Deployment のデプロイとサービスの作成
以下の YAML を nginx-service.yaml として保存し、kubectl create -f nginx-service.yaml を実行します。
apiVersion: v1
kind: Service
metadata:
name: nginx-headless-service
spec:
ports:
- port: 80
protocol: TCP
selector:
app: nginx
clusterIP: None
---
apiVersion: v1
kind: Service
metadata:
name: nginx-clusterip-service
spec:
ports:
- port: 80
protocol: TCP
selector:
app: nginx
type: ClusterIP
---
apiVersion: v1
kind: Service
metadata:
name: nginx-intranet-service
annotations:
service.beta.kubernetes.io/alicloud-loadbalancer-address-type: intranet
spec:
ports:
- port: 80
protocol: TCP
selector:
app: nginx
type: LoadBalancer
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:alpine
ports:
- containerPort: 80ステップ 2: リソースの実行確認
kubectl get svc,pod,deployment次に進む前に、3 つすべてのサービスと Deployment の Pod が期待されるステータスで表示されていることを確認します。
ステップ 3: コンソールでの PrivateZone レコードの表示
Alibaba Cloud DNS コンソールにログインします。
左側のナビゲーションウィンドウで、[プライベート DNS (PrivateZone)] をクリックします。
ページ右上で、[設定モード] をクリックします。
[ビルトイン権威モジュール] タブをクリックし、次に [ユーザー定義ゾーン] をクリックします。
確認したいドメインの[操作]列で、[リソースレコード設定]をクリックします。
コンソールには、PrivateZone がサービス用に作成した DNS レコードが表示されます。「仕組み」の表に基づいて、各サービスに正しい数のエントリとターゲット IP アドレスがあることを確認します。
次のステップ
追加の例や詳細設定については、「serverless-k8s-examples」をご参照ください。