1.基础环境
1.1 AWS EKS 版本信息
云上AWS EKS 环境版本: 1.29.6 版本
操作系统: Amazon Linux
内核版本: 5.10.220-209.869.amzn2.x86_64
Nginx镜像版本: nginx stable-alpine3.19
1.2 自建机房 kubernetes 版本
机房kubernetes 版本: 1.16.10
操作系统: Centos 7 linux
内核版本: 4.18.16-1.e17.elerpo.86_64
Nginx镜像版本: nginx stable-alpine3.19
2.问题现象描述
2.1 云上AWS 问题现象描述
1.因业务上云 Aws eks 在迁移过程发现一个问题 云上aws环境发现问题现象发现nginx镜像种反向代理
proxy_pass 域名为内部域名时候出现报错,反向代理其他域名例如: www.baidu.com
或者www.goole.com 正常.
测试结论:
1.配置proxy_pass外部共有域名都正常;
2.容器内部使用dig nslookup 内部域名解析正常(无异常)
3.集群node-local-dns和coredns 解析测试都正常
2.2 nginx -t 检查 错误日志:
nginx -t 语法检查具体报错
#配置文件
location /test/{
proxy_pass http://dev-example.K8S.cloud/;
}
#语法检查报错
nginx -t
报错日志: 2024/10/02 08:25:03 67#67: host not found in upstream "dev-example.K8S.cloud" /etc/nginx/conf.d/default.conf:16
[emerg] 1#1: host not found in upstream "dev-example.K8S.cloud" in /etc/nginx/conf.d/default.conf:16
nginx: configuration file /etc/nginx/nginx.conf test failed
2.3 定位问题
2.3.1 排除法
1.检查容器镜像系统是否可正常解析配置内部域名. (pod dig 验证正常解析)
#域名解析
dig dev-example.K8S.cloud
server: 169.254.20.10 #node-local-dns dns节点cache
Adress: 169.254.20.10:53
Non-authoritative answer:
Name: dev-example.K8S.cloud
Adress: 10.10.1.1
2.检查nginx 是否代理其他外部域名也出现问题 (配置转发其他外部域名-正常)
#配置文件
location /test/{
proxy_pass http://www.baidu.com/;
}
#语法检查正常
nginx: configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is success
3.配置私有域名以后依旧出现出现域名解析找不到问题 (nginx在解析内部域名时候出现不识别问题)
#配置文件
location /test/{
proxy_pass http://dev-example.K8S.cloud/;
}
#语法检查报错
nginx -t
报错日志: 2024/10/02 08:25:03 67#67: host not found in upstream "dev-example.K8S.cloud" /etc/nginx/conf.d/default.conf:16
[emerg] 1#1: host not found in upstream "dev-example.K8S.cloud" in /etc/nginx/conf.d/default.conf:16
nginx: configuration file /etc/nginx/nginx.conf test failed
2.3 细节定位法 (抓包DNS解析请求)
1.打开一个POD终端查看
进入pod 安装 tcpdump
apk add tcpdump
2.打开一个另外POD终端运行nginx -t