更新时间:2024-05-10 GMT+08:00

优化域名解析请求

DNS解析是Kubernetes集群中最高频的网络行为之一,针对Kubernetes中的DNS解析的特点,您可以通过以下的方式优化域名解析请求。

客户端使用连接池

当一个容器应用需要频繁请求另一服务时,推荐使用连接池配置,连接池可以缓存上游服务的链接信息,避免每次访问都经过DNS解析和TCP重新建链的开销。

优化容器内的resolve.conf文件

由于resolve.conf文件中的ndots和search两个参数的作用,容器内resolve.conf文件的不同写法决定了域名解析的效率,关于ndots和search两个参数机制的详情请参考工作负载DNS配置说明

优化域名的配置

当容器需要访问某域名时,请按照以下原则进行配置,可最大程度减少域名解析次数,减少域名解析耗时。
  1. Pod访问同命名空间的Service,优先使用<service-name>访问,其中service-name代指Service名称。
  2. Pod跨命名空间访问Service,优先使用<service-name>.<namespace-name>访问,其中namespace-name代指Service所处的命名空间。
  3. Pod访问集群外部域名时,优先使用FQDN类型域名访问,这类域名通过常见域名最后加半角句号(.)的方式来指定地址,可以避免search搜索域拼接带来的多次无效搜索,例如需要访问www.huaweicoud.com,则优先使用FQDN类型域名www.huaweicoud.com.来访问。

使用本地域名缓存

集群规格较大,DNS解析请求量大的情况下可以考虑在节点上缓存DNS解析的结果,推荐使用节点DNS缓存NodeLocal DNSCache,具体使用请参考使用NodeLocal DNSCache提升DNS性能