gpt4 book ai didi

Kubernetes CoreDNS pod 不断重启

转载 作者:行者123 更新时间:2023-12-04 01:55:00 51 4
gpt4 key购买 nike

一段时间以来,我一直在使用 flannel 在 CentOS 7 上安装三节点 kubernetes 集群,但是 CoreDNS pod 无法连接到 API 服务器并不断重启。

我遵循的引用 HowTo 文档是 here .

到目前为止我做了什么?

  • 禁用 SELinux,
  • 禁用防火墙
  • 启用br_netfilter, bridge-nf-call-iptables,
  • 在三个节点上安装 kubernetes,使用 flannel 默认网络(10.244.0.0/16)设置 master 的 pod 网络,
  • 安装了另外两个节点,并加入了master。
  • 部署法兰绒,
  • 配置 Docker 的 BIP 以使用 flannel 默认的每节点子网和网络。

当前状态

  • kubelet 工作并且集群报告节点准备就绪。
  • Cluster 可以调度和迁移 pod,因此 CoreDNS 在节点上生成。
  • 法兰绒网络已连接。容器中没有日志,我可以从一个节点到另一个节点 ping 10.244.0.0/24 网络。
  • Kubernetes 可以部署和运行任意 pod(已尝试 shell demo),并且可以通过 kubectl 访问其 shell,即使容器位于不同的节点上。
    • 但是,由于 DNS 不工作,他们无法解析任何 IP 地址。

问题是什么?

  • CoreDNS pod 报告它们无法连接到 API 服务器并出现错误:

    Failed to list *v1.Namespace: Get https://10.96.0.1:443/api/v1/namespaces?limit=500&resourceVersion=0: dial tcp 10.96.0.1:443: connect: no route to host
  • 我在路由表中看不到 10.96.0.0 路由:

    default via 172.16.0.1 dev eth0 proto static metric 100 
    10.1.0.0/24 dev eth1 proto kernel scope link src 10.1.0.202 metric 101
    10.244.0.0/24 via 10.244.0.0 dev flannel.1 onlink
    10.244.1.0/24 dev docker0 proto kernel scope link src 10.244.1.1
    10.244.1.0/24 dev cni0 proto kernel scope link src 10.244.1.1
    10.244.2.0/24 via 10.244.2.0 dev flannel.1 onlink
    172.16.0.0/16 dev eth0 proto kernel scope link src 172.16.0.202 metric 100

附加信息

  • 集群初始化通过命令 kubeadm init --apiserver-advertise-address=172.16.0.201 --pod-network-cidr=10.244.0.0/16 完成。
  • 我已经拆除了集群并用 1.12.0 重建了问题仍然存在。
  • Kubernetes 中的解决方法 documentation不起作用。
  • 1.11-31.12-0 CentOS7 软件包都存在问题并且相同。

到目前为止的进展

  • 将 Kubernetes 降级到 1.11.3-0
  • 使用 kubeadm init --apiserver-advertise-address=172.16.0.201 --pod-network-cidr=10.244.0.0/16 重新初始化 Kubernetes,因为服务器有另一个外部 IP,无法通过其他主机访问,Kubernetes 倾向于选择该 IP 作为 API Server IP。 --pod-network-cidrflannel 强制执行.
  • iptables -L 初始化后输出没有加入节点

    Chain INPUT (policy ACCEPT)
    target prot opt source destination
    KUBE-EXTERNAL-SERVICES all -- anywhere anywhere ctstate NEW /* kubernetes externally-visible service portals */
    KUBE-FIREWALL all -- anywhere anywhere

    Chain FORWARD (policy ACCEPT)
    target prot opt source destination
    KUBE-FORWARD all -- anywhere anywhere /* kubernetes forwarding rules */
    DOCKER-USER all -- anywhere anywhere

    Chain OUTPUT (policy ACCEPT)
    target prot opt source destination
    KUBE-SERVICES all -- anywhere anywhere ctstate NEW /* kubernetes service portals */
    KUBE-FIREWALL all -- anywhere anywhere

    Chain DOCKER-USER (1 references)
    target prot opt source destination
    RETURN all -- anywhere anywhere

    Chain KUBE-EXTERNAL-SERVICES (1 references)
    target prot opt source destination

    Chain KUBE-FIREWALL (2 references)
    target prot opt source destination
    DROP all -- anywhere anywhere /* kubernetes firewall for dropping marked packets */ mark match 0x8000/0x8000

    Chain KUBE-FORWARD (1 references)
    target prot opt source destination
    ACCEPT all -- anywhere anywhere /* kubernetes forwarding rules */ mark match 0x4000/0x4000

    Chain KUBE-SERVICES (1 references)
    target prot opt source destination
    REJECT udp -- anywhere 10.96.0.10 /* kube-system/kube-dns:dns has no endpoints */ udp dpt:domain reject-with icmp-port-unreachable
    REJECT tcp -- anywhere 10.96.0.10 /* kube-system/kube-dns:dns-tcp has no endpoints */ tcp dpt:domain reject-with icmp-port-unreachable
  • 看起来 API 服务器已按预期部署

    $ kubectl get svc kubernetes -o=yaml
    apiVersion: v1
    kind: Service
    metadata:
    creationTimestamp: 2018-10-25T06:58:46Z
    labels:
    component: apiserver
    provider: kubernetes
    name: kubernetes
    namespace: default
    resourceVersion: "6"
    selfLink: /api/v1/namespaces/default/services/kubernetes
    uid: 6b3e4099-d823-11e8-8264-a6f3f1f622f3
    spec:
    clusterIP: 10.96.0.1
    ports:
    - name: https
    port: 443
    protocol: TCP
    targetPort: 6443
    sessionAffinity: None
    type: ClusterIP
    status:
    loadBalancer: {}
  • 然后我用

    应用了 flannel 网络 pod
    kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
  • 一旦我应用了 flannel 网络,CoreDNS pod 就会启动并开始出现相同的错误:

    Failed to list *v1.Endpoints: Get https://10.96.0.1:443/api/v1/endpoints?limit=500\u0026resourceVersion=0: dial tcp 10.96.0.1:443: connect: no route to host
  • 我发现 flanneld 使用了错误的网络接口(interface),并在部署前在 kube-flannel.yml 文件中进行了更改。然而结果还是一样。

非常感谢任何帮助。

最佳答案

这基本上是说您的 coredns pod 无法与 kube-apiserver 通信。 kube-apiserver 通过以下环境变量在 pod 中公开:KUBERNETES_SERVICE_HOST=10.96.0.1KUBERNETES_SERVICE_PORT_HTTPS=443

我相信您发布的路由是主机上的路由,因为这是您在 pod 容器中运行 ip routes 时得到的:

root@xxxx-xxxxxxxxxx-xxxxx:/# ip route
default via 169.254.1.1 dev eth0
169.254.1.1 dev eth0 scope link
root@xxxx-xxxxxxxxxx-xxxxx:/#

在任何情况下,您都不会看到 10.96.0.1,因为它是使用 iptables 在集群中公开的。那么那个地址是什么?碰巧这是默认命名空间中的一个 service,名为 kubernetes。该服务的 ClusterIP10.96.0.1 并且它正在监听端口 443,它还映射到 targetPort 6443 这是你的 kube-apiserver 运行的地方。

因为您可以部署 pod 等。看起来 kube-apiserver 没有关闭,这不是您的问题。所以很可能你错过了那个服务(或者有一些 iptable 规则不允许你连接到它)。你可以在这里看到它,例如:

$ kubectl get svc kubernetes
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 92d

完整的输出是这样的:

$ kubectl get svc kubernetes -o=yaml
apiVersion: v1
kind: Service
metadata:
creationTimestamp: 2018-07-23T21:10:22Z
labels:
component: apiserver
provider: kubernetes
name: kubernetes
namespace: default
resourceVersion: "24"
selfLink: /api/v1/namespaces/default/services/kubernetes
uid: xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx
spec:
clusterIP: 10.96.0.1
ports:
- name: https
port: 443
protocol: TCP
targetPort: 6443
sessionAffinity: None
type: ClusterIP
status:
loadBalancer: {}

所以如果你错过了它,你可以像这样创建它:

cat <<EOF
apiVersion: v1
kind: Service
metadata:
labels:
component: apiserver
provider: kubernetes
name: kubernetes
namespace: default
spec:
clusterIP: 10.96.0.1
ports:
- name: https
port: 443
protocol: TCP
targetPort: 6443
sessionAffinity: None
type: ClusterIP
EOF | kubectl apply -f -

关于Kubernetes CoreDNS pod 不断重启,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52966498/

51 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com