一个计算机技术爱好者与学习者

0%

ks部署clickhouse验证仓库问题

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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Server:     10.96.0.10
Address: 10.96.0.10#53

Non-authoritative answer:
Name: radondb.github.io
Address: 185.199.111.153
Name: radondb.github.io
Address: 185.199.108.153
Name: radondb.github.io
Address: 185.199.110.153
Name: radondb.github.io
Address: 185.199.109.153
Name: radondb.github.io
Address: 2606:50c0:8002::153
Name: radondb.github.io
Address: 2606:50c0:8003::153
Name: radondb.github.io
Address: 2606:50c0:8000::153
Name: radondb.github.io
Address: 2606:50c0:8001::153

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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Server:     10.96.0.10
Address: 10.96.0.10:53

Non-authoritative answer:
Name: radondb.github.io
Address: 2606:50c0:8001::153
Name: radondb.github.io
Address: 2606:50c0:8002::153
Name: radondb.github.io
Address: 2606:50c0:8003::153
Name: radondb.github.io
Address: 2606:50c0:8000::153

Non-authoritative answer:
Name: radondb.github.io
Address: 185.199.109.153
Name: radondb.github.io
Address: 185.199.111.153
Name: radondb.github.io
Address: 185.199.108.153
Name: radondb.github.io
Address: 185.199.110.153

2、ping查看解析

1
ping radondb.github.io
1
2
3
PING radondb.github.io (192.168.50.11): 56 data bytes
64 bytes from 192.168.50.11: seq=0 ttl=63 time=2.151 ms
64 bytes from 192.168.50.11: seq=1 ttl=63 time=3.443 ms

问题来了,这里nslookup和ping的解析结果不一致。

3、查看解析配置

1
cat /etc/resolv.conf
1
2
3
nameserver 10.96.0.10
search kubesphere-system.svc.cluster.local svc.cluster.local cluster.local abc.com
options ndots:5

用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
2
3
nameserver 10.96.0.10
search kubesphere-system.svc.cluster.local svc.cluster.local cluster.local abc.com
options ndots:2

5.2. 永久解法

修改ks-apiserver的deployment yaml文件,pod部分添加:

1
2
3
4
5
spec:
dnsConfig:
options:
- name: ndots
value: "2"

options:可选的对象列表,其中每个对象可能具有 name 属性(必需)和 value 属性(可选)。 此属性中的内容将合并到从指定的 DNS 策略生成的选项,重复的条目将被删除。
详情参考k8s网络配置DNS

5.3. 全局解法

如果集群中所有pod的resolv.conf都想要修改,该怎么操作?
暂时没有找到配置方法,未完待续。。。