配置混合云节点池DNS解析

混合云节点池如通过云上CoreDNS解析域名,频繁的访问会加重专线负载,还可能出现因专线不稳定导致的域名解析失败,配置NodeLocal DNSCache可减少这些问题的影响。

工作原理

NodeLocal DNSCache在每个节点上运行DNS缓存代理。节点上PodDNS请求会优先由本地缓存处理,仅在缓存未命中时,才会通过专线回源到云端的CoreDNS服务。这种架构带来了两个优势:

  • 绝大多数DNS查询在本地完成,减少了专线的流量负载。

  • 专线网络异常时,已缓存的域名解析不受影响。

重要
  • NodeLocal DNSCache首次解析某个域名需要回源到CoreDNS Server,如果此时遇到专线网络异常,会导致域名解析失败。

  • 专线网络异常时,缓存数据无法实时更新。

image

适用范围

  • 已创建ACK托管集群Pro,且满足以下条件:

    • ACK托管集群Pro所在的VPC,已打通跨云网络

    • ACK托管集群Pro版本为1.33及以上。

  • 使用混合云节点池时,同时保有ECS节点,用于部署部分ACK管控组件(建议使用3个及以上ECS节点以保证高可用)。

  • 已安装Terway Hybrid网络插件

操作步骤

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

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,单击组件管理

  3. 网络页签中找到ACK NodeLocal DNSCache卡片,单击安装,在弹出的对话框中单击确认

  4. 在左侧导航栏选择配置管理 > 配置项,然后在上方命名空间中选择kube-system

  5. 编辑名为node-local-dnsConfigMap,在其中添加prefetch 10serve_stale配置,为组件开启预热、取和服务保持的能力:

    升级NodeLocal DNSCache组件后,这些配置项将被覆盖,请重新配置。
    apiVersion: v1
    data:
      Corefile: |
        .:53 {
            errors
            cache {
              ...
              prefetch 1 30s 10% # 预取
              serve_stale 1h immediate # 服务保持
            }
    
            ...
        }
    kind: ConfigMap
    metadata:
    ...
    • prefetch 1 30s 10%:缓存的预取配置。当一个域名在30秒内被请求超过1次时,在其条目缓存到期前的最后10%时间内,自动在后台更新该条目。

    • serve_stale 1h immediate:配置缓存过期后的服务保持策略。缓存过期1小时内仍可以使用过期的缓存提供域名解析;过期缓存刷新策略为immediate,表示命中过期缓存时,会立即向客户端返回过期条目,然后再向上游DNS服务器请求最新的条目。