CoreDNS解析域失败以及内网转发出现5秒卡顿

问题描述

  1. 测试环境中服务在内网调用其他服务时偶尔出现5秒卡顿,但是在外部网络调用不会出现卡顿;
  2. 测试环境中访问外网,偶现解析域名失败;

调查过程

内网访问出现卡顿

  1. 对服务自身以及调用目标进行打点计时,发送方接收响应式出现卡顿,目标服务正常;
  2. 对网关以及Nginx进行打点计时,均未出现超时;
  3. 由于外网访问正常而内网不正常,排除网络传输问题;
  4. 外网访问与内网的区别是URL不同以及DNS解析所获取的ip不同,但是实际上接受最终接受请求的都是Nginx,所以尝试跳过DNS解析直接访问ip,成功解决卡顿现象.

访问外网域名解析失败

  1. 对请求域名进行抓包分析;
  2. 根据抓包返回结果定位到问题出现在CoreDns获取外部服务ip失败.

解决方案

内网访问出现卡顿

CoreDns在解析域名的时候回去尝试获取ipv6的地址,在默认情概况下获取ipv6有可能会出现卡顿现象,设置为快速模式之后相当于对获取ipv6地址过程增加了一个超时限制,ipv6解析不存在的时候会快速的返回并尝试ipv4的解析

修改coredns 的配置增加ipv6解析快速解析

template ANY AAAA {
        rcode NXDOMAIN
}

访问外网域名解析失败

在k8s集群内部想要访问外网需要从CoreDns统一获取DNS解析,默认情况下会使用forward模式,两种模式的区别:

forward:转发域名查询到上游DNS服务器;

proxy:转发特定的域名查询到多个其他DNS服务器,同时提供多个DNS服务器的负载均衡功能.

修改coredns 的配置,将forward 换成proxy

proxy . /etc/resolv.conf

你可能感兴趣的:(从零开始搭建私有云,kubernetes)