localdns 的几个作用

32 阅读1分钟

LocalDNS 绕过了 IPv6 Service 的 NAT 转发,直接与 CoreDNS Pod 建立连接,避免了 IPv6 NAT 支持差、性能低、连接不稳定的问题。

localdns 是触发式缓存,不会主动周期性去同步

图 1:未使用 LocalDNS(原方案)—— CoreDNS 经 IPv6 Service NAT 的问题






┌─────────────────────────────────────────────────────────────────┐
│                        Kubernetes Node (IPv6)                   │
│                                                                 │
│  ┌──────────────┐       ┌──────────────┐       ┌──────────────┐  │
│  │              │       │              │       │              │  │
│  │  业务 Pod     │       │  kube-proxy  │       │  CoreDNS Pod │  │
│  │  (IPv6: P1)  │       │  (IPv6 NAT)  │       │  (IPv6: C1)  │  │
│  │              │       │              │       │              │  │
│  └──────┬───────┘       └──────┬───────┘       └──────┬───────┘  │
│         │                      │                      │          │
│         │  1. DNS 查询请求     │                      │          │
│         │  → 解析 "kube-dns"   │                      │          │
│         │                      │                      │          │
│         │  2. 经 DNS 缓存      │                      │          │
│         │  → 命中 CoreDNS SVC  │                      │          │
│         │  (IPv6 ClusterIP: S1)│                      │          │
│         │─────────────────────>│                      │          │
│         │                      │                      │          │
│         │                      │  3. IPv6 Service NAT │          │
│         │                      │  → 转发到 CoreDNS Pod│          │
│         │                      │─────────────────────>│          │
│         │                      │                      │          │
│         │                      │  4. 响应:返回解析结果│          │
│         │                      │<─────────────────────│          │
│         │                      │                      │          │
│         │  5. 响应回传(经 NAT)│                      │          │
│         │<─────────────────────│                      │          │
│         │                      │                      │          │
│  └──────┴───────┘       └──────┴───────┘       └──────┴───────┘  │
│                                                                 │
│  【核心问题】:                                                  │
│  1. IPv6 场景下 kube-proxy NAT66 支持不完善(部分 CNI 不兼容)     │
│  2. NAT 转发增加延迟,高并发时易丢包                            │
│  3. 流量需经两层转发(Pod→SVC→Pod),稳定性依赖 NAT 规则有效性    │
└─────────────────────────────────────────────────────────────────┘




图 2:使用 LocalDNS(优化方案)—— 绕过 IPv6 Service NAT



┌─────────────────────────────────────────────────────────────────┐
│                        Kubernetes Node (IPv6)                   │
│                                                                 │
│  ┌──────────────┐       ┌──────────────┐       ┌──────────────┐  │
│  │              │       │              │       │              │  │
│  │  业务 Pod     │       │  LocalDNS    │       │  CoreDNS Pod │  │
│  │  (IPv6: P1)  │       │  (节点本地) │       │  (IPv6: C1)  │  │
│  │              │       │              │       │              │  │
│  └──────┬───────┘       └──────┬───────┘       └──────┬───────┘  │
│         │                      │                      │          │
│         │  1. DNS 查询请求     │                      │          │
│         │  → 直接发往 LocalDNS │                      │          │
│         │─────────────────────>│                      │          │
│         │                      │                      │          │
│         │                      │  2. 本地缓存未命中?  │          │
│         │                      │  → 直接访问 CoreDNS Pod│          │
│         │                      │  (跳过 Service NAT) │          │
│         │                      │─────────────────────>│          │
│         │                      │                      │          │
│         │                      │  3. 响应:返回解析结果│          │
│         │                      │<─────────────────────│          │
│         │                      │                      │          │
│         │  4. 响应回传(无 NAT)│                      │          │
│         │<─────────────────────│                      │          │
│         │                      │                      │          │
│  └──────┴───────┘       └──────┴───────┘       └──────┴───────┘  │
│                                                                 │
│  【核心优化】:                                                  │
│  1. 流量直连 CoreDNS Pod,完全绕过 IPv6 Service NAT 环节          │
│  2. 本地缓存减少重复查询,降低 CoreDNS 负载                      │
│  3. 仅一层转发(Pod→LocalDNS→CoreDNS Pod),延迟降低、稳定性提升  │
└─────────────────────────────────────────────────────────────────┘