通过 kubeadm 管理 Kubernetes 集群 - CoreDNS 缓冲区大小太小 / Pods 网络问题

通过 kubeadm 管理 Kubernetes 集群 - CoreDNS 缓冲区大小太小 / Pods 网络问题

我是部署本地 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 服务器,但nslookupPod 内部可以工作(使用dnsutilsK8s 中的 pod)。

主机可以访问每个站点,所以我认为防火墙没有问题。

ufw并且iptables已经残疾。

我设置bufsize51210244096仍然出现相同的错误。默认情况下,bufsizeConfigMap 中未定义,但它给了我同样的错误。

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
  • dnsutilsPod
    • github.com
      • nslookupdig- 成功
      • ping- 失败 - 未知主机 - 缓冲区太小 错误
    • api.github.com
      • nslookup- 缓冲区太小错误
      • dig- 成功
    • kubernetes.io
      • nslookupdig- 成功

期望:

  • 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/

相关内容