我是部署本地 Kubernetes 集群的新手。我设法使用 CNI 部署了一个kubeadm
集群weave
。
Pod 内的互联网连接有点慢/不工作。我正在尝试部署自托管 GitHub Actions Runner,它正在访问 GitHub API。例如,*.github.com
从 Pod 访问 FQDN 将导致此问题错误(coredns Pod 日志):
[ERROR] plugin/errors: 2 api.github.com. A: dns: buffer size too small
我还观察到 Pod 无法连接到 Ubuntu 或 Debian 服务器,但nslookup
Pod 内部可以工作(使用dnsutils
K8s 中的 pod)。
主机可以访问每个站点,所以我认为防火墙没有问题。
ufw
并且iptables
已经残疾。
我设置bufsize
为512
,1024
但4096
仍然出现相同的错误。默认情况下,bufsize
ConfigMap 中未定义,但它给了我同样的错误。
CoreDNS配置映射($ kubectl describe configmap coredns -n kube-system
):
Name: coredns
Namespace: kube-system
Labels: <none>
Annotations: <none>
Data
====
Corefile:
----
.:53 {
bufsize 4096
errors
health {
lameduck 5s
}
ready
kubernetes cluster.local in-addr.arpa ip6.arpa {
pods insecure
fallthrough in-addr.arpa ip6.arpa
ttl 30
}
prometheus :9153
forward . /etc/resolv.conf {
max_concurrent 1000
}
cache 30
loop
reload
loadbalance
}
BinaryData
====
Events: <none>
我如何部署集群:
kubeadm init --pod-network-cidr=172.30.0.0/16 --service-cidr=172.16.0.0/16 --cri-socket=unix:/run/cri-dockerd.sock
kubectl taint nodes --all node-role.kubernetes.io/control-plane-
# Install weave
sudo curl -L git.io/weave -o /usr/local/bin/weave
sudo chmod a+x /usr/local/bin/weave
# Download weave DaemonSet from Github
wget https://github.com/weaveworks/weave/releases/download/v2.8.1/weave-daemonset-k8s.yaml
編輯至:
...
containers:
- name: weave
env:
- name: IPALLOC_RANGE
value: 172.30.0.0/16
...
最后:kubectl apply -f ./weave-daemonset-k8s.yaml
版本:
$ kubectl version
Client Version: v1.28.2
Kustomize Version: v5.0.4-0.20230601165947-6ce0bf390ce3
Server Version: v1.28.2
$ kubectl describe configmap coredns -n kube-system
image: registry.k8s.io/coredns/coredns:v1.10.1
这可能是什么原因?
尝试过:
kubeadm
重置- 节点和服务使用不同的 CIDR
- 默认
weave
配置 - 编辑
weave
配置-IPALLOC_RANGE
匹配节点 CIDR dnsutils
Podgithub.com
nslookup
&dig
- 成功ping
- 失败 - 未知主机 - 缓冲区太小 错误
api.github.com
nslookup
- 缓冲区太小错误dig
- 成功
kubernetes.io
nslookup
&dig
- 成功
期望:
- Pod 中的工作网络连接
- DNS 解析成功
编辑
我更新了核心DNS至版本1.11.0现在没有了缓冲区太小错误,但它显示请求超时。至少我可以看到它正确地尝试从我的主 DNS 进行查询,我对此进行了多次测试并且按预期工作。
答案1
似乎最新的 CoreDNS 不支持 DNS 压缩,并且响应超过了 512 字节的限制(UDP 限制)。
首先 ping/wget...不起作用的地址。
追踪行李运送路线:
kubectl get pods -n kube-system -l k8s-app=kube-dns
kubectl logs coredns-xxxxxxx -n kube-system
您将在结果中看到以下内容
[ERROR] plugin/errors: 2 checkip.amazonaws.com. A: dns: buffer size too small.
修改配置中的“转发”
kubectl edit configmap coredns -n kube-system
forward . /etc/resolv.conf {
force_tcp
max_concurrent 1000
}
保存并重新启动 Docker Desktop 有关 forward 属性的更多信息https://coredns.io/plugins/forward/