Alibaba Cloud Serverless Kubernetes の仮想ノードは、イントラネットサービス、ヘッドレスサービス、および ClusterIP サービスのサービスディスカバリをサポートしています。

始める前に

準備

Chart を使用して仮想ノードをデプロイした後、関連する環境変数が正しく設定されていることを確認する必要があります。

  1. Container Service - Kubernetes の左側のナビゲーションペインから [ストア] > [アプリのカタログ] を選択します。 左側のページで、[ack-virtual-node] を選択します。
  2. [アプリカタログ - ack-virtual-node]ページで、[パラメーター] タブををクリックし、次のようにパラメータ設定をカスタマイズします。
    • ECI_VPC:Kubernetes クラスターで使用される VPC ID。 現在のクラスターの VPC ID に置き換える必要があります。
    • ALIYUN_CLUSTERID:Kubernetes クラスターの ID。 現在のクラスターの ID に置き換える必要があります。 必須。 値をデフォルトに設定することはできません。

手順

  1. Deployment をデプロイし、Service を作成します。

    サンプルテンプレートは次のとおりです。下記の yaml コードを yaml ファイルにコピーします。 次に、kubectl create -f nginx-service-ack.yaml を実行して作成します。

    apiVersion: v1
    kind: Service
    metadata:
      name: nginx-headless-service
      annotations:
         service.beta.kubernetes.io/alibaba-cloud-private-zone-enable: "true"
    spec:
      ports:
      - port: 80
        protocol: TCP
      selector:
        app: nginx
      clusterIP: None
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: nginx-clusterip-service
      annotations:
         service.beta.kubernetes.io/alibaba-cloud-private-zone-enable: "true"
    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
        service.beta.kubernetes.io/alibaba-cloud-private-zone-enable: "true"
    spec:
      ports:
      - port: 80
        protocol: TCP
      selector:
        app: nginx
      type: LoadBalancer
    ---
    apiVersion: apps/v1beta2
    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
    Kubernetes クラスターのサービスは、デフォルトでは PrivateZone に同期されません。 次の情報をサービスに追加して、解決レコードを PrivateZone に同期する必要があります。
      annotations:
         service.beta.kubernetes.io/alibaba-cloud-private-zone-enable: "true"
    仮想ノード Controller は、サービスの解決レコードを PrivateZone に同期します。
  2. Alibaba Cloud DNS コンソールにログインします。
  3. 左側のナビゲーションペインで、[PrivateZone] > [すべてのゾーン] をクリックします。 レコードがゾーンリストに自動的に生成されます。
    すべてのゾーン
  4. [設定] をクリックします。 [名前解決の設定] ページが表示されます。
    ホストマシンレコードの形式は $svc.$ns で、このレコードは 1 つの IP 解決に対応します。 名前解決ルールは次のとおりです:
    • LoadBalancer サービス:PrivateZone の 1 つの解決レコード (SLB IP) のみに対応します。
    • ClusterIP サービス:PrivateZone の複数の解決レコードに対応します。これは、バックエンドポッドの IP です。
    • ヘッドレスサービス:PrivateZone の複数の解決レコードに対応します。これは、バックエンドポッドの IP です。
    VPC でプライベートドメイン名を使用して、サービスにアクセスできます。 プライベートドメイン名には、長いドメイン名または短いドメイン名を指定できます。
    • 長いドメイン名:$svc.$ns.svc.cluster.local.$clusterId を使用して、PrivateZone に同期されている他のクラスターのサービスに接続します。
    • 短いドメイン名:$svc を使用して現在の名前空間内のサービスに接続し、$svc.$ns を使用して他の名前空間のサービスに接続します。