【发布时间】:2022-01-29 05:27:15
【问题描述】:
我已经在启用防火墙的 CentOS 7 上使用 calico 作为 CNI 启动了 Kubernetes 集群。我有主节点和工作节点。我能够启动集群并能够列出节点和 Kubernetes 系统 pod,一切正常。但是我无法执行 dns 查询。
系统配置
Kubernetes:1.21.1
印花布:3.19.1
码头工人:20.10.5
CentOS 7.9
启用 IPVS
在 Calico 中使用基于 VXLAN 的网络
防火墙配置
-
我启用的端口是。
- 6443/tcp - 2379-2381/tcp - 10248-10260/tcp - 30000-32767/tcp - 8285/udp - 8472/udp - 7946/udp - 7946/tcp - 7472/tcp - 7472/udp - 9100/tcp - 443/tcp # cAdvisor Port - 4149/tcp # calico - 179/tcp - 4789/udp - 5473/tcp - 9099/tcp - 9099/udp -
启用的
masquerade -
将接口
kube-ipvs0、vxlan.calico和docker0添加到受信任区域(虽然无法将 cali* 接口添加到受信任区域,因为我无法添加基于正则表达式的接口规则)
问题是DNS 查找不起作用。尝试以下步骤来识别iptables 查找。
- 已安装 DNS 调试器 pod
apiVersion: v1
kind: Pod
metadata:
name: dnsutils
namespace: default
spec:
containers:
- name: dnsutils
image: gcr.io/kubernetes-e2e-test-images/dnsutils:1.3
command:
- sleep
- "3600"
imagePullPolicy: IfNotPresent
restartPolicy: Always
- 在调度 pod 的工作节点上启用防火墙调试
firewall-cmd --set-log-denied=all
firewall-cmd --reload
- 现在运行
nslookup
$kubectl exec -it dnsutils -- nslookup kubernetes.default
结果:
;; connection timed out; no servers could be reached
command terminated with exit code 1
- 获取拒绝数据包的规则
dmesg | grep -i reject
结果:
[ 5556.708338] FINAL_REJECT: IN=calib3c61c3cba9 OUT= MAC=ee:ee:ee:ee:ee:ee:de:c8:d5:97:58:87:08:00 SRC=10.244.212.65 DST=10.96.0.10 LEN=90 TOS=0x00 PREC=0x00 TTL=64 ID=49835 PROTO=UDP SPT=52743 DPT=53 LEN=70
[ 5561.707815] FINAL_REJECT: IN=calib3c61c3cba9 OUT= MAC=ee:ee:ee:ee:ee:ee:de:c8:d5:97:58:87:08:00 SRC=10.244.212.65 DST=10.96.0.10 LEN=90 TOS=0x00 PREC=0x00 TTL=64 ID=52640 PROTO=UDP SPT=52743 DPT=53 LEN=70
[ 5566.708055] FINAL_REJECT: IN=calib3c61c3cba9 OUT= MAC=ee:ee:ee:ee:ee:ee:de:c8:d5:97:58:87:08:00 SRC=10.244.212.65 DST=10.96.0.10 LEN=90 TOS=0x00 PREC=0x00 TTL=64 ID=54942 PROTO=UDP SPT=52743 DPT=53 LEN=70
非常感谢任何解决问题的帮助。
【问题讨论】:
-
coredns跑步健康吗? -
@whites11 是的,我没有看到任何错误。请注意,当我停止并禁用防火墙时,一切都会开始工作
标签: kubernetes calico