1. 问题描述
参考在 KubeSphere 中部署 ClickHouse 集群,部署ClickHouse,添加应用仓库时,验证仓库的URL报错404。
仓库URL:https://radondb.github.io/radondb-clickhouse-kubernetes/
2. 排查思路
1、确认仓库URL是否正确
2、确认ks的域名解析是否正常
3. 确认仓库URL
curl https://radondb.github.io/radondb-clickhouse-kubernetes/
本地和ks-apiserver宿主机都是正常可以获取到数据的,浏览器访问 https://radondb.github.io/radondb-clickhouse-kubernetes/index.yaml 也正常,说明仓库URL没有问题。
4. 确认ks域名解析
4.1. 宿主机解析
先查看一下正常的解析。
1、nslookup查看解析
1 | nslookup radondb.github.io |
1 | Server: 10.96.0.10 |
2、ping查看解析
1 | ping radondb.github.io |
1 | PING radondb.github.io (185.199.108.153) 56(84) bytes of data. |
nslookup和ping的结果一致。
4.2. ks-apiserver pod内解析
1、nslookup查看解析
1 | nslookup radondb.github.io |
1 | Server: 10.96.0.10 |
2、ping查看解析
1 | ping radondb.github.io |
1 | PING radondb.github.io (192.168.50.11): 56 data bytes |
问题来了,这里nslookup和ping的解析结果不一致。
3、查看解析配置
1 | cat /etc/resolv.conf |
1 | nameserver 10.96.0.10 |
用host命令确认下解析过程:
1 | host -v radondb.github.io |
至此问题就明确了,nslookup/dig会直接查询DNS服务器,因此查询结果没问题。
而ping、host、curl等命令实际上会查看本地hosts,再根据resolv.conf中的配置查询域名,当域名的点的数量小于5个时会依次加上后缀(search)去DNS服务器查找,如果都找不到再直接去DNS服务器查找域名。
当查找radondb.github.io.abc.com域名时,因为匹配到了*.abc.com
泛域名解析,所以找到了非预期的服务器去处理这个请求,因此报错404。
详情参考/etc/resolv.conf search和ndots配置
5. 解决办法
5.1. 临时解法
直接修改ks-apiserver pod里的resolv.conf,改为
1 | nameserver 10.96.0.10 |
5.2. 永久解法
修改ks-apiserver的deployment yaml文件,pod部分添加:
1 | spec: |
options:可选的对象列表,其中每个对象可能具有 name 属性(必需)和 value 属性(可选)。 此属性中的内容将合并到从指定的 DNS 策略生成的选项,重复的条目将被删除。
详情参考k8s网络配置DNS
5.3. 全局解法
如果集群中所有pod的resolv.conf都想要修改,该怎么操作?
暂时没有找到配置方法,未完待续。。。