如何在EKS上启用节点本地DNS缓存?

问题描述 投票:0回答:1

我正在尝试在我的 eks 集群上实现 nodeLocalDns。 我已经部署了https://kubernetes.io/docs/tasks/administer-cluster/nodelocaldns/

的主分支

我需要一些事情的帮助

  1. kubernetes 官方文档说 - 如果在 IPVS 模式下使用 kube-proxy,则需要修改 kubelet 的 --cluster-dns 标志以使用 NodeLocal DNSCache 正在侦听。否则,无需修改 --cluster-dns 标志的值,因为 NodeLocal DNSCache 会同时监听 kube-dns 服务 IP 和 .

如何在 EKS 中找到我的 kube-proxy 正在运行哪种模式?

  1. 如何验证 DNS 请求是否发送至 nodeLocalDns?
kubernetes caching amazon-eks kube-dns
1个回答
0
投票

要在 EKS 上启用 node-local-dns-cache,只需运行以下 2 个命令:

  1. helm repo add deliveryhero https://charts.deliveryhero.io/
  2. helm upgrade --install node-local-dns-cache deliveryhero/node-local-dns


以上自动完成安装和配置:

  1. 它安装了以缓存模式运行的 coredns 守护进程集。
    (缓存模式:有效的 DNS 查找将缓存 30 秒,最多 容量为 9984 个条目。无效的 DNS 名称将被缓存 5 秒。)(永久链接源)
  2. 它有效地重新配置流量以利用新安装的 DNS 缓存。

它是如何运作的? (简答)
JFM(Just F'n Magic)、Clever Hacks 和可靠的安装 UX(用户体验),感谢 Delivery Hero 的工程师。

它如何以及为什么起作用? (长答案)
好吧,你好,疲惫的旅行者!您说您不信任由自动工作的计算机向导源提供支持的解决方案?好吧,没关系,我们可以详细介绍一下它的工作原理,这样您就可以相信它。

  • 正常情况下:
    • pod 的 /etc/resolv.conf 将在 kube-system 命名空间中拥有 kube-dns 服务的 ClusterIP。
    • 可以通过将标志传递给 kubelet 来配置该文件。
    • 通常你需要更新 kubelet 的配置来更新 /etc/resolv.conf 以指向新配置的 DNS 缓存,这会出现问题/相对困难,因为通常你无法使用 kubectl 轻松调整它。
  • 官方 Kubernetes 文档中确实存在对其工作原理的解释。不幸的是,它有点难以理解,所以我将其解释一下,以便更容易理解:
      使用 iptables 的 Kubernetes 发行版可以利用一种巧妙的黑客攻击,这隐约让我想起了 MITM(中间人)攻击,其中使用免费 ARP 来拦截流量。在这种情况下,automagic 解决方案有效地将节点本地 DNS 缓存安装为友好的 MITM 实用程序服务。
    • config.dnsServer的默认helm值=172.20.0.10,与EKS的kube-dns服务的默认集群IP匹配。
    • daemonset 具有主机网络 true 和 NET_ADMIN 的 securityContext,这允许它在 EC2 工作节点上绑定 IP 地址。
    • 巧妙的破解方式是 EKS 节点本地 DNS 缓存绑定 172.20.0.10,该 IP 与 kube-dns 服务相同。因为它正在对同一 IP 进行本地主机特权绑定,所以它能够执行 3 件奇特的事情:
      1. 拦截发往 kube-dns 服务的流量,并将其路由到其 node-local-dns-cache
      2. 仍然允许自己路由到 kube-dns 服务,并将其用作上游 DNS 服务器。
      3. 因为 IP 没有改变,所以你不需要重新配置 kubelet 来使用它,并且卸载有效地删除了 MITM 拦截,这又回到了像以前一样使用 kube-dns 服务。
  • 通常不需要在上述 helm install 命令中传递标志/helm 值覆盖,因为 helm 图表的默认值假定使用 EKS 的通用配置默认值。 (EKS 需要旧版 iptables,默认为 iptables,172.20.0.10 是 EKS 集群上 kube-dns 的默认集群 IP。)(理论上,如果调整 helm 值并且先决条件假设为有效或已说明。)
  • 注意:daemonset 将在 EC2 支持的工作节点上运行 node-local-dns-cache。 Fargate 节点不支持守护进程集,因此它们的 DNS 流量仍将直接进入原始 kube-dns 服务。
  • 现在您知道 EKS 的节点本地 DNS 缓存实现基本上是一个友好的 MITM 实用服务,官方文档链接到的下图将更有意义。 (注意:我认为 169.254.20.10 要么是允许 kube-dns 用作上游 DNS 服务器的解决方法实现细节的一部分,要么是支持 IPVS 等非基于 iptables 的实现。)

© www.soinside.com 2019 - 2024. All rights reserved.