NodeLocal DNSCache

目录

Overview

NodeLocal DNSCache 是一个集群插件,通过在集群节点上运行 DNS 缓存代理来提升集群 DNS 性能。该插件通过在每个节点本地缓存 DNS 响应,减少对中央 DNS 服务的负载,从而降低 DNS 查询延迟并提升集群稳定性。

Key Features

  • 本地 DNS 缓存:在每个节点本地缓存 DNS 响应,减少查询延迟
  • 性能提升:显著缩短应用的 DNS 查询时间

Important Notes

WARNING

部署注意事项:

  1. Kube-OVN Underlay 模式:该插件不支持在 Kube-OVN Underlay 模式下部署,若部署可能导致 DNS 查询失败。

  2. Kubelet 重启:部署该插件会导致 kubelet 重启。

  3. Pod 重启要求:插件成功部署后不会影响正在运行的 Pod,仅对新创建的 Pod 生效。当 CNI 为 Kube-OVN 时,需要手动在 kube-ovn-controller 中添加参数 "--node-local-dns-ip=(本地 DNS 缓存服务器的 IP 地址)"。

  4. NetworkPolicy 配置:如果集群配置了 NetworkPolicy,需要在 networkPolicy 中额外允许 node CIDR 和 nodeLocalDNSIP 的双向通信,以确保正常通信。

Installation

Install via Marketplace

  1. 进入 管理员 > Marketplace > 集群插件

  2. 在插件列表中搜索 "Alauda Build of NodeLocal DNSCache"。

  3. 点击 安装,打开安装配置页面。

  4. 配置所需参数:

    参数描述示例值
    IP节点本地 DNS 缓存服务器的 IP 地址。IPv4 推荐使用 169.254.0.0/16 范围内的地址,优选 169.254.20.10。IPv6 推荐使用 fd00::/8 范围内的地址,优选 fd00::10。169.254.20.10
  5. 查看部署注意事项,确保环境满足要求。

  6. 点击 安装 完成安装。

  7. 等待插件状态变为 "Ready"。

How It Works

Architecture

Pod → NodeLocal DNSCache → [Cache Hit] → Pod

    [Cache Miss] → CoreDNS → Response → Cache & Pod

Configuration

Network Policy Configuration

重要:如果集群启用了 NetworkPolicy,必须配置合适的规则以允许 DNS 流量访问 NodeLocal DNSCache。否则 Pod 可能无法解析 DNS 查询。

使用 NetworkPolicy 时,确保允许以下 DNS 流量:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-dns-cache
spec:
  podSelector: {}
  policyTypes:
  - Ingress
  - Egress
  ingress:
  - from:
    - ipBlock:
        cidr: 169.254.20.10/32 # NodeLocal DNS IP address
    ports:
    - protocol: UDP
      port: 53
    - protocol: TCP
      port: 53
  egress:
  - to:
    - ipBlock:
        cidr: 169.254.20.10/32 # NodeLocal DNS IP address
    ports:
    - protocol: UDP
      port: 53
    - protocol: TCP
      port: 53