当有大量外部虚拟机只能通过防火墙访问,并且集群中有多个命名空间,每个命名空间都有自己的一组外部虚拟机时,最终会得到大量的 ServiceEntry,这反过来又会导致大量的 DNS 查询
$host.$ns.svc.cluster.local
$host.svc.cluster.local
$host.cluster.local
例如,其中 $host 为:vm-1.vm-cluster.example.com,假设有 10 个命名空间,每个命名空间中有 100 个 pod,则 DNS 查询数量相当多,所有查询都使用 NXDOMAIN 进行回答,因此本地 istio DNS 代理缓存不起作用。这可能导致 coreDNS Pod 过载(内存大小(包括缓冲区)增加并导致 DNS Pod OOM)。
我的问题是:如何防止这些查询?我想到的解决方案是:
将 $host 替换为包含尾随点的 FQDN 不起作用,因为 X.509 证书包含不带尾随点的主机名。更改每个 Pod 的 DNS 配置并将 ndots 设置为 3 之类的值。但这听起来像是一场维护噩梦。我想通过巧妙地结合 ServiceEntry、VirtualService 和 Gateway 定义来解决这个问题。
K8s 版本 1.19(vmware 版本) Istio 版本 1.9(也是 vmware 版本)
答案1
对于任何正在寻找解决方案的人 - 在 ServiceEntry 定义中将 STRICT_DNS 解析类型切换到“无”。有关更多详细信息,请参阅以下问题: https://github.com/istio/istio/issues/13710