使用Alibaba DNS Cache提升DNS性能

容器计算服务 ACS(Container Compute Service)提供了Alibaba DNS Cache组件,基于内核可编程技术提供DNS缓存加速能力,可以显著提升DNS服务发现的稳定性和性能。本文介绍如何在ACS集群中安装、升级和卸载Alibaba DNS Cache组件。

Alibaba DNS Cache简介

Alibaba DNS Cache是一款DNS缓存组件,基于内核可编程技术实现,具有无侵入、低开销、高性能等特点。安装组件后,业务应用Pod可以即刻获得DNS加速效果,且无需修改DNSConfigDNS服务器指向。

image

如上图:

  • 应用向Alibaba DNS Cache发送请求,查询域名解析结果。

  • Alibaba DNS Cache未命中,可以基于zone配置选择:

    • 直接向上游DNS服务查询:上游DNS服务查询的记录返回给Alibaba DNS Cache进行缓存,再返回给应用。

    • CoreDNS查询:CoreDNS也未命中时向上游DNS服务查询。上游DNS服务查询的记录返回给CoreDNS进行缓存,再由CoreDNS返回给Alibaba DNS Cache,最后返回给应用。

使用限制

  • 目前仅支持安装到ACS集群中,提升您运行在ACS Pod上业务的DNS解析性能。

  • 目前Alibaba DNS Cache功能上存在以下限制:

    • 仅支持常见的A/AAAA/CNAME记录类型的DNS查询。

    • 仅支持基于UDP协议的DNS查询。

    • 仅支持响应报文小于等于256字节的DNS查询。

安装Alibaba DNS Cache组件

  1. 登录容器计算服务控制台,在左侧导航栏选择集群

  2. 集群页面,单击目标集群ID,然后在左侧导航栏,选择运维管理组件管理

  3. 组件管理页面,单击网络页签,找到Alibaba DNS Cache组件卡片。

  4. 单击Alibaba DNS Cache卡片上的安装,在弹出的对话框中单击确定

    重要
    • 安装Alibaba DNS Cache时会在kube-system命名空间中创建名为blazing-dns的配置项,请勿对其进行修改或删除。

    • 加速效果只会对安装组件后新增的Pod有效,集群中的存量Pod不会自动开启DNS缓存加速。您可以通过检查Pod Annotations中的network.alibabacloud.com/enable-dns-cache是否为true来确认Pod是否成功开启缓存加速。

    安装Alibaba DNS Cache后,从ACS Pod中发起的DNS查询请求将被缓存加速,您无需进行额外操作。

卸载Alibaba DNS Cache

卸载Alibaba DNS Cache组件前,您必须确保所有运行中的Pod没有开启DNS加速。

  1. 执行以下命令,查看所有已开启DNS加速的Pod名称。

    未安装jq

    kubectl get pod -o=jsonpath='{.items[?(@.metadata.annotations.network\.alibabacloud\.com/enable-dns-cache=="true")].metadata.name}' -A

    已安装jq

    kubectl get pod -o=jsonpath='{.items[?(@.metadata.annotations.network\.alibabacloud\.com/enable-dns-cache=="true")]}' -A | jq -rc ".metadata.namespace,.metadata.name"
  2. 若上述命令返回非空,表明集群内仍存在已经开启了DNS加速的Pod。请参考以下步骤进行清理。

    1. 集群页面,单击目标集群ID,然后在左侧导航栏,选择配置管理 > 配置项

    2. 配置项页面选择kube-system命名空间,单击blazing-dns行右侧操作列中的编辑,在弹出的对话框中修改config字段的值为enabled: false

    3. 删除重建上述命令中输出的所有Pod,直到再次运行步骤1中的命令后没有Pod输出。依赖的Pod清理完毕后,执行步骤3继续卸载组件。

  3. 在组件管理页面卸载组件。

    1. 集群页面,单击目标集群ID,然后在左侧导航栏,选择运维管理组件管理

    2. 组件管理页面,单击网络页签,在Alibaba DNS Cache组件卡片上单击卸载。在弹出的对话框中单击确定