集群内无法访问 Kubernetes POD

2023-12-06

我尝试安装Kubernetes with kubeadm在 3 个虚拟机上Debian我的笔记本电脑上的操作系统,一个作为主节点,另外两个作为工作节点。我完全按照教程做的kubernetes.io建议。我用命令初始化了集群kubeadm init --pod-network-cidr=10.244.0.0/16并与相应的工人一起加入kube join命令。我安装了Flannel作为带有命令的网络覆盖kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml.

命令的响应kubectl get nodes看起来不错:

NAME        STATUS   ROLES    AGE   VERSION   INTERNAL-IP     EXTERNAL-IP   OS-IMAGE
k8smaster   Ready    master   20h   v1.18.3   192.168.1.100   <none>        Debian GNU/Linux 10 (buster)   4.19.0-9-amd64   docker://19.3.9
k8snode1    Ready    <none>   20h   v1.18.3   192.168.1.101   <none>        Debian GNU/Linux 10 (buster)   4.19.0-9-amd64   docker://19.3.9
k8snode2    Ready    <none>   20h   v1.18.3   192.168.1.102   <none>        Debian GNU/Linux 10 (buster)   4.19.0-9-amd64   docker://19.3.9

命令的响应kubectl get pods --all-namespaces没有显示任何错误:

NAMESPACE     NAME                                READY   STATUS    RESTARTS   AGE    IP              NODE        NOMINATED NODE   READINESS GATES
kube-system   coredns-66bff467f8-7hlnp             1/1     Running   9          20h    10.244.0.22     k8smaster   <none>           <none>
kube-system   coredns-66bff467f8-wmvx4             1/1     Running   11         20h    10.244.0.23     k8smaster   <none>           <none>
kube-system   etcd-k8smaster                      1/1     Running   11         20h    192.168.1.100   k8smaster   <none>           <none>
kube-system   kube-apiserver-k8smaster            1/1     Running   9          20h    192.168.1.100   k8smaster   <none>           <none>
kube-system   kube-controller-manager-k8smaster   1/1     Running   11         20h    192.168.1.100   k8smaster   <none>           <none>
kube-system   kube-flannel-ds-amd64-9c5rr          1/1     Running   17         20h    192.168.1.102   k8snode2    <none>           <none>
kube-system   kube-flannel-ds-amd64-klw2p          1/1     Running   21         20h    192.168.1.101   k8snode1    <none>           <none>
kube-system   kube-flannel-ds-amd64-x7vm7          1/1     Running   11         20h    192.168.1.100   k8smaster   <none>           <none>
kube-system   kube-proxy-jdfzg                    1/1     Running   11         19h    192.168.1.101   k8snode1    <none>           <none>
kube-system   kube-proxy-lcdvb                    1/1     Running   6          19h    192.168.1.102   k8snode2    <none>           <none>
kube-system   kube-proxy-w6jmf                    1/1     Running   11         20h    192.168.1.100   k8smaster   <none>           <none>
kube-system   kube-scheduler-k8smaster            1/1     Running   10         20h    192.168.1.100   k8smaster   <none>           <none>

然后我尝试创建一个POD用命令kubectl apply -f podexample.yml包含以下内容:

apiVersion: v1
kind: Pod
metadata:
  name: example 
spec:
  containers:
  - name: nginx 
    image: nginx

Command kubectl get pods -o wide表明POD在工作节点1上创建并且位于Running state.

NAME      READY   STATUS    RESTARTS   AGE    IP            NODE       NOMINATED NODE   READINESS GATES
example   1/1     Running   0          135m   10.244.1.14   k8snode1   <none>           <none>

问题是,当我尝试连接到 pod 时curl -I 10.244.1.14命令我在主节点中得到以下响应:

curl: (7) Failed to connect to 10.244.1.14 port 80: Connection timed out

但工作节点 1 上的相同命令成功响应:

HTTP/1.1 200 OK
Server: nginx/1.17.10
Date: Sat, 23 May 2020 19:45:05 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Tue, 14 Apr 2020 14:19:26 GMT
Connection: keep-alive
ETag: "5e95c66e-264"
Accept-Ranges: bytes

我想也许那是因为不知何故kube-proxy不是在主节点上运行,而是在命令上运行ps aux | grep kube-proxy显示它正在运行。

root     16747  0.0  1.6 140412 33024 ?        Ssl  13:18   0:04 /usr/local/bin/kube-proxy --config=/var/lib/kube-proxy/config.conf --hostname-override=k8smaster

然后我用命令检查内核路由表ip route它显示数据包的目的地是10.244.1.0/244被路由到法兰绒。

default via 192.168.1.1 dev enp0s3 onlink 
10.244.0.0/24 dev cni0 proto kernel scope link src 10.244.0.1 
10.244.1.0/24 via 10.244.1.0 dev flannel.1 onlink 
10.244.2.0/24 via 10.244.2.0 dev flannel.1 onlink 
169.254.0.0/16 dev enp0s3 scope link metric 1000 
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown 
192.168.1.0/24 dev enp0s3 proto kernel scope link src 192.168.1.100 

对我来说一切看起来都很好,我不知道我还应该检查什么来看看有什么问题。我错过了什么吗?

UPDATE1:

如果我开始一个NGINX工作节点1上的容器并将其80端口映射到工作节点1主机的80端口,然后我可以通过命令连接到它curl -I 192.168.1.101来自主节点。另外,我没有添加任何 iptable 规则,也没有像这样的防火墙守护进程UFW安装在机器上。所以,我认为这不是防火墙问题。

UPDATE2:

我重新创建了集群并使用canal代替flannel,仍然没有运气。

UPDATE3:

我使用以下命令查看了 canal 和 flannel 日志,一切似乎都很好:

kubectl logs -n kube-system canal-c4wtk calico-node
kubectl logs -n kube-system canal-c4wtk kube-flannel
kubectl logs -n kube-system canal-b2fkh calico-node
kubectl logs -n kube-system canal-b2fkh kube-flannel 

UPDATE4:

为了完整起见,这是提到的容器的日志.

UPDATE5:

我尝试安装特定版本的 kubernetes 组件和 docker,以使用以下命令检查是否存在与版本控制不匹配相关的问题:

sudo apt-get install docker-ce=18.06.1~ce~3-0~debian
sudo apt-get install -y kubelet=1.12.2-00 kubeadm=1.12.2-00 kubectl=1.12.2-00 kubernetes-cni=0.6.0-00
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/bc79dd1505b0c8681ece4de4c0d86c5cd2643275/Documentation/kube-flannel.yml

但一切都没有改变。

我什至更新了文件/etc/bash.bashrc在所有节点上清除任何代理设置只是为了确保它与代理无关:

export HTTP_PROXY=
export http_proxy=
export NO_PROXY=127.0.0.0/8,192.168.0.0/16,172.0.0.0/8,10.0.0.0/8

并向 docker systemd 文件添加了以下环境/lib/systemd/system/docker.service在所有节点上:

Environment="HTTP_PROXY="
Environment="NO_PROXY="

然后重新启动所有节点,当我登录时,仍然得到curl: (7) Failed to connect to 10.244.1.12 port 80: Connection timed out

UPDATE6:

我的事件尝试在中设置集群CentOS机器。认为也许有一些相关的东西Debian。我也停下来并禁用firewalld为了确保防火墙不会引起问题,但我再次得到了完全相同的结果:Failed to connect to 10.244.1.2 port 80: Connection timed out.

现在我唯一怀疑的是,也许这一切都是因为VirtualBox和虚拟机网络配置?虚拟机连接到Bridge Adapter连接到我的无线网络接口。

UPDATE7:

我进入创建的 POD 内部,发现 POD 内部没有互联网连接。因此,我创建了另一个 PODNGINX具有类似命令的图像curl, wget, ping and traceroute并尝试过curl https://www.google.com -I并得到结果:curl: (6) Could not resolve host: www.google.com。我检查了/etc/resolv.conf文件发现POD内部的DNS服务器地址为10.96.0.10。将 DNS 更改为8.8.8.8 still curl https://www.google.com -I结果是curl: (6) Could not resolve host: www.google.com。尝试 ping8.8.8.8结果是56 packets transmitted, 0 received, 100% packet loss, time 365ms。对于我尝试的最后一步traceroute 8.8.8.8并得到以下结果:

 1  10.244.1.1 (10.244.1.1)  0.116 ms  0.056 ms  0.052 ms
 2  * * *
 3  * * *
 4  * * *
 5  * * *
 6  * * *
 7  * * *
 8  * * *
 9  * * *
10  * * *
11  * * *
12  * * *
13  * * *
14  * * *
15  * * *
16  * * *
17  * * *
18  * * *
19  * * *
20  * * *
21  * * *
22  * * *
23  * * *
24  * * *
25  * * *
26  * * *
27  * * *
28  * * *
29  * * *
30  * * *

我不知道 POD 中没有互联网连接这一事实与我无法从部署 POD 的节点以外的节点连接到集群内的 POD 的问题有什么关系。


Debian系统使用nftables为了iptables后端与 Kubernetes 网络设置不兼容。因此,您必须使用以下命令将其设置为使用 iptables-legacy 而不是 nftables:

sudo update-alternatives --set iptables /usr/sbin/iptables-legacy 
sudo update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

集群内无法访问 Kubernetes POD 的相关文章

随机推荐

  • 有没有办法忽略单个 FindBugs 警告?

    使用 PMD 如果您想忽略特定警告 可以使用 NOPMD忽略该行 FindBugs 有类似的东西吗 FindBugs 最初的方法涉及 XML 配置文件 又名filters 这确实不如 PMD 解决方案方便 但 FindBugs 适用于字节码
  • 如何使用快速排序在列表列表中按索引排序

    我正在尝试使用快速排序对索引 1 处的列表列表进行排序 例如 list 2 5 3 2 4 9 0 9 1 1 1 1 4 7 5 我希望能够做到这一点 按索引 1 排序 quickSort list output list 1 1 1 2
  • PHP邮件/PEAR邮件

    在我的目录网站上 我有 发送电子邮件 功能 这允许用户向公司提交查询 此查询的副本也会发送到我的收件箱 几个月前 我注意到我的收件箱不再收到电子邮件副本 所以我对此进行了调查 结果发现我的网络主机不再允许使用 PHP 邮件功能发送外部电子邮
  • 创建新索引时统计信息是否会自动更新?

    创建索引后运行更新统计信息有什么好处吗 或者它会自动为您完成吗 如果新索引需要新的统计信息 它们会自动创建 除非您通过以下方式明确禁用新索引的统计信息计算CREATE INDEX WITH STATISTICS NORECOMPUTE ON
  • 下一个兄弟组合器不应该与复杂的选择器一起使用

    TL DR 根据规范 以下内容不应该起作用 但它确实起作用 a b b margin top 20px Details 根据规格 下一个同级组合器 或 相邻同级组合器 应该仅适用于 简单选择器序列 其本身已定义 as 不被组合器分隔的一系列
  • Objective-C 委托类型

    在 Objective C 中创建委托时 假设委托 id
  • 如何从 Google Apps 脚本发出 Gmail API 批量请求?

    例如 我需要在以下场景中进行批量请求 使用后Gmail Users Threads list 我想做几个Gmail Users Threads get threadId 批量操作 我正在谈论类似的事情gapi client newBatch
  • Xcode:Interface Builder XIB 编译器错误

    Xcode 5 1 1 和 OS X 10 9 3 我打开 Xcode 并启动一个新的 Cocoa 项目 然后我点击运行 构建失败 我收到以下错误消息 Interface Builder XIB Compiler Error Interfa
  • if else 语句反转

    我想要的结果是第二个 if else 语句 如果代码不在列表中 则发出警报 我不明白为什么第一个 if else 语句失败 我认为只需反转第二个 if else 语句 我误解了什么吗 https jsfiddle net e6qohvhc
  • 如果值比闭包寿命更长,那么在闭包之间共享引用的正确方法是什么?

    我想分享两个闭包之间的引用 在一个闭包中可变地 这是一种人为的情况 但我发现在学习 Rust 的背景下它很有趣 为了使它工作 我必须利用Rc Weak and RefCell 有没有更简单的方法来实现这一目标 use std cell Re
  • 多个 和 标签

    我正在尝试创建一个非常简单的 Web 应用程序 基本上是为了了解 HTML5 CSS 和 JavaScript 编码的最佳实践 我的应用程序有 3 4 页 每一页都使用相同的菜单标题 所以我想通过将其写入单独的文件 PHP 或 HTML 来
  • get_headers 不一致[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 运行以下代码 var dump get headers
  • 在 Makefile 中链接 cURL

    通过源代码安装 cURL 后 我需要在 Ubuntu 11 04 中链接 cURL 问题的修正 首先我发现 l必须先于 L然后发现我没有在 makefile 中输入变量 获取 cURL 配置 在我的终端上 curl config libs
  • UIBezierPath + CAShapeLayer - 动画填充一个圆圈[重复]

    这个问题在这里已经有答案了 我正在尝试对 CAShapeLayer 的路径进行动画处理 以便获得圆形 填充 到特定数量的效果 问题 它 有效 但不是AS尽管我认为它可能很顺利 但我想对其进行一些缓和 但因为我正在单独为每个 设置动画 所以我
  • JSONEncoder 不允许将类型编码为原始值

    我正在致力于实施Codable for an enum类型与可能的关联值 由于这些对于每种情况都是独特的 所以我认为我可以在编码期间不带密钥地输出它们 然后简单地看看在解码时可以得到什么 以恢复正确的情况 这是一个非常精简的 人为的示例 演
  • pip install 生成“找不到满足要求的版本”[重复]

    这个问题在这里已经有答案了 我有一个包已上传到 test pypi 我可以在我的计算机上的虚拟环境中安装这个软件包 没有任何问题 pip install index url https test pypi org simple packag
  • 对于某些在线编译器,扫描器 next() 会抛出 NoSuchElementException

    这似乎是一个常见问题 多次询问 但我无法找到这种行为的解释 以下代码可以在一个编译器中运行 但会抛出异常Exception in thread main java util NoSuchElementException在另一个编译器中 Sc
  • Spacy -- ImportError:preshed.maps 未导出预期的 C 函数 map_clear

    我正在尝试导入spacy徒然 gt gt gt import spacy Traceback most recent call last File
  • 如何将Flash(.swf)放入页面中?

    我计划使用 swf 文件作为标题 这是行不通的 img src exactheader swf width 650 height 140 你能告诉我怎么做吗 试试这个
  • 集群内无法访问 Kubernetes POD

    我尝试安装Kubernetes with kubeadm在 3 个虚拟机上Debian我的笔记本电脑上的操作系统 一个作为主节点 另外两个作为工作节点 我完全按照教程做的kubernetes io建议 我用命令初始化了集群kubeadm i