AKS中自定义dnsPolicy的Locust Slave Pod无法连接Master Pod
问题根因
你配置自定义DNS后slave连不上master是两个配置错误共同导致的,master不需要修改自定义DNS策略,保持默认配置即可:
- 当Pod的
dnsPolicy设为None时,Kubernetes不会给Pod自动注入集群内部的DNS配置,你当前dnsConfig.nameservers里只配置了外部DNS地址,没有添加AKS集群内部CoreDNS(即kube-dns服务)的集群IP,Pod根本无法向集群DNS发起内部域名解析请求,自然找不到master服务。 - 你将
dnsConfig.options里的ndots值设为了0,这个配置会让Pod直接把所有域名当作绝对根域名查询,不会拼接你配置的searches搜索域后缀。你slave启动参数里填的master地址是短域名master,正常默认ndots为5时,系统会依次拼接locust-xxxx.svc.cluster.local等搜索域查找内部服务,ndots设为0时会直接查询公网根域的master记录,外部DNS不可能返回你集群内部服务的解析结果。
修复步骤
- 先查询当前AKS集群的内部CoreDNS服务IP,执行以下命令获取:
kubectl get svc kube-dns -n kube-system -o jsonpath='{.spec.clusterIP}'
AKS默认的CoreDNS集群IP一般为10.0.0.10,以实际查询结果为准。
- 修改slave Deployment的DNS配置段,调整为如下内容(其余配置保持不变):
dnsPolicy: "None" dnsConfig: nameservers: # 第一步查到的CoreDNS集群IP放在最前面,优先解析内部域名 - <替换为实际查询到的CoreDNS IP> - xx.xx.xx.xx # 原有外部DNS1 - xx.xx.xx.xx # 原有外部DNS2 searches: - xxxxxx # 原有自定义搜索域 - locust-xxxx.svc.cluster.local - svc.cluster.local - cluster.local - xxxxxxxxxxxxxx.jx.internal.cloudapp.net options: - name: ndots value: "5" # 改回K8s默认值,保证短域名会拼接搜索域查询
- 重新应用slave Deployment配置,等待Pod重建完成后验证:
进入任意slave Pod执行nslookup master,如果能返回master Service对应的集群IP,就说明内部解析正常,Locust worker会自动连接master,同时外部服务的解析会走你配置的外部DNS,不影响压测业务访问集群外服务。
不需要给master Pod配置相同的自定义dnsPolicy,master保持默认的
ClusterFirstdnsPolicy即可正常工作,之前给master配置自定义DNS后仍然连通失败,也是因为上述两个配置错误没有修复。
内容的提问来源于stack exchange,提问作者Sar
相关产品推荐
相关产品推荐

