混合云节点池如通过云上CoreDNS解析域名,频繁的访问会加重专线负载,还可能出现因专线不稳定导致的域名解析失败,配置NodeLocal DNSCache可减少这些问题的影响。
工作原理
NodeLocal DNSCache在每个节点上运行DNS缓存代理。节点上Pod的DNS请求会优先由本地缓存处理,仅在缓存未命中时,才会通过专线回源到云端的CoreDNS服务。这种架构带来了两个优势:
绝大多数DNS查询在本地完成,减少了专线的流量负载。
专线网络异常时,已缓存的域名解析不受影响。
NodeLocal DNSCache首次解析某个域名需要回源到CoreDNS Server,如果此时遇到专线网络异常,会导致域名解析失败。
专线网络异常时,缓存数据无法实时更新。
适用范围
已创建ACK托管集群Pro版,且满足以下条件:
ACK托管集群Pro版所在的VPC,已打通跨云网络。
ACK托管集群Pro版版本为1.33及以上。
使用混合云节点池时,同时保有ECS节点,用于部署部分ACK管控组件(建议使用3个及以上ECS节点以保证高可用)。
操作步骤
登录容器服务管理控制台,在左侧导航栏选择集群列表。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,单击组件管理。
在网络页签中找到ACK NodeLocal DNSCache卡片,单击安装,在弹出的对话框中单击确认。
在左侧导航栏选择
,然后在上方命名空间中选择kube-system。编辑名为
node-local-dns
的ConfigMap,在其中添加prefetch 10
和serve_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服务器请求最新的条目。