虚拟节点基于云解析PrivateZone的服务发现

ACK虚拟节点已支持基于云解析PrivateZone的服务发现功能,能够将Headless、ClusterIP和内网LoadBalancer类型Service的解析记录同步到PrivateZone。本文介绍如何启用PrivateZone,以及如何将ECI Pod绑定的Service的解析记录同步到PrivateZone,以便后续可以通过域名访问对应Service。

背景信息

云解析PrivateZone(内网DNS解析)是面向企业内网场景(主要为阿里云VPC内网场景)提供的完整DNS解析服务,可以为云上客户在VPC内网环境下的各种客户端(如ECS主机、容器)提供域名解析、内网域名解析加速等服务。使用PrivateZone会产生费用,具体请参见产品计费

前提条件

启用PrivateZone

  1. 修改eci-profile的配置,启用PrivateZone。

    1. 登录容器服务管理控制台,在左侧导航栏选择集群列表

    2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择配置管理 > 配置项

    3. 选择命名空间kube-system,找到eci-profile,然后单击对应的编辑

    4. enablePrivateZone的值改为true,然后单击确定

  2. 确认已启用PrivateZone。

    1. 云解析DNS控制台的左侧导航栏,单击内网域名解析

    2. 内置权威页签的用户域名页签下,确认已生成名称为svc.cluster.local.<集群ID>Zone。

同步Service的解析记录到PrivateZone

  1. 创建用于测试的DeploymentService。

    1. 将以下YAML内容,保存为test-pz.yaml。

      以下YAML将创建1Deployment3Service,其中Service的类型分别为Headless、ClusterIPLoadBalancer。

      重要

      Service的解析记录默认不会同步到PrivateZone。为Service添加service.beta.kubernetes.io/alibaba-cloud-private-zone-enable: "true"Annotation后,虚拟节点Controller才会把Service的解析记录同步到PrivateZone中。

      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/alibaba-cloud-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/v1
      kind: Deployment
      metadata:
        name: nginx-deployment
        labels:
          app: nginx
      spec:
        replicas: 3
        selector:
          matchLabels:
            app: nginx
        template:
          metadata:
            labels:
              app: nginx
              alibabacloud.com/eci: "true"          # 添加特定LablePod调度到ECI
          spec:
            containers:
            - name: nginx
              image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
              ports:
              - containerPort: 80
    2. 创建DeploymentService。

      kubectl create -f test-pz.yaml
  2. 确认Service的解析记录已同步到PrivateZone中。

    1. 云解析DNS控制台的左侧导航栏,单击内网域名解析

    2. 内置权威页签的用户域名页签下,找到名称为svc.cluster.local.<集群ID>Zone,单击对应的解析设置

    3. 解析记录页签下,可以看到已自动同步Service的解析记录。

      Zone中解析记录格式为<service-name>.<namespace>,对应相应的IP解析。解析规则如下:

      • Headless Service:对应多条解析记录,分别为后端PodIP地址。

      • ClusterIP Service:对应一条解析记录,为Cluster IP(集群为该Service分配的一个虚拟IP地址,用于集群内部通信)。

      • LoadBalancer Service:对应一条解析记录,为Cluster IP(集群为该Service分配的一个虚拟IP地址,用于集群内部通信)。

      service解析记录

      同步后,您可以在VPC环境中通过私有域名访问Service。

      • 短域名访问:在集群内通过<service-name>访问本Namespace下的Service,通过<service-name>.<namespace>访问其他Namespace中的Service。

      • 长域名访问:在集群外通过<service-name>.<namespace>.svc.cluster.local.<clusterId>访问Service,仅适用于Headless Service。