阿里云 Kubernetes 集群的虚拟节点已经支持服务发现功能,目前支持 Intranet service、Headless service、ClusterIP
service。

前提条件

  • 需要先开通云解析 PrivateZone,在云解析 DNS 控制台中开通。
  • 您在 Kubernetes 集群创建一个虚拟节点,请参见虚拟节点。
  • 您已成功连接到 Kubernetes 集群,参见通过 kubectl 连接 Kubernetes 集群。

环境准备

通过 Chart 部署虚拟节点后,需要确认已正确配置相关环境变量。

  1. 登录容器服务管理控制台。
  2. 在 Kubernetes 菜单下,单击左侧导航栏中的市场 > 应用目录, 在右侧选中ack-virtual-node
  3. 应用目录 – ack-virtual-node中,单击参数,可以通过修改参数配置进行定制化,如下所示。
    应用目录

    • ECI_VPC:Kubernetes 集群使用的 VPC ID,需要替换成您当前集群使用的 VPC ID。
    • ALIYUN_CLUSTERID:Kubernetes 集群ID,需要替换成您当前使用集群的 ID。不允许为空或者设置为default。

操作步骤

  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 集群中的 Service 默认是不会同步到 PrivateZone,需要给 Service 加上以下信息:

      annotations:
         service.beta.kubernetes.io/alibaba-cloud-private-zone-enable: "true"

    此时,虚拟节点 Controller 才会把 Service 的解析记录同步到 PrivateZone 中。

  2. 登录云解析DNS控制台。
  3. 在左侧导航栏中单击PrivateZone > Zone 列表,可看到在 Zone 中自动生成 IP 解析记录。
    Zone列表

  4. 单击解析设置,弹出解析设置详情页面。
    解析设置

    说明 Zone 里面的 Record 格式为$svc.$ns,对应相应的 IP 解析。解析规则如下:

    • LoadBalancer service:PrivateZone 中只对应一条解析 Record,为 SLB IP。
    • ClusterIP service:PrivateZone 中对应多条解析 Record,分别为后端 Pod 的 IP。
    • Headless service:PrivateZone 中对应多条解析 Record,分别为后端 Pod 的 IP。

    您可在该 VPC 网络环境中通过私有域名访问 Service。

    • 长域名访问:$svc.$ns.svc.cluster.local.$clusterId,通过这种方式也可以访问其他集群中同步到 PrivateZone 的service。
    • 短域名访问:您可以通过$svc访问本 Namespace下的 Service,通过$svc.$ns访问其他 Namespace 中的 Service。