集群内无法访问Kubernetes POD

丘伯克

我试图安装Kuberneteskubeadm与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>

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

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

命令kubectl get pods -o wide显示POD在工作节点1上创建了,并且处于Running状态。

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

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

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在工作程序node1上启动一个容器并将其80端口映射到工作程序node1主机的端口80,那么我可以通过curl -I 192.168.1.101主节点上的命令连接到它另外,我没有添加任何iptable规则,并且没有UFW在计算机上安装任何防火墙守护程序因此,我认为这不是防火墙问题。

UPDATE2:

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

UPDATE3:

我通过以下命令查看了运河和法兰绒原木,一切似乎都很好:

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

并且还在/lib/systemd/system/docker.service所有节点上的docker systemd文件中添加了以下环境

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内部没有Internet连接。所以,我创建的另一盒从NGINX有类似的命令图像curlwgetpingtraceroute并试图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仍会curl https://www.google.com -I导致curl: (6) Could not resolve host: www.google.com尝试执行ping操作8.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中没有Internet连接这一事实与以下问题有关:我无法从除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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Kubernetes无法访问Pod

Kubernetes:无法访问 flannel pod

无法访问kubernetes pod的代理

由于无法访问 kubernetes api 服务器集群 IP,大使 pod 在 kubernetes 中失败 - [Errno 113] 主机无法访问',)

使用hostNetwork True的Kubernetes Pod无法访问同一集群中的服务的外部IP

Kubernetes Pod无法访问外部IP地址

Pod无法访问本地机器Kubernetes服务

Kubernetes pod 无法访问互联网,而主机可以

安装pod后无法访问pod swift文件

kubernetes pod成功获取dns配置,但无法访问网络

docker-for-desktop 窗口中的 pod 无法访问 kubernetes 外部名称服务

无法访问Google Cloud上公开的外部IP的Kubernetes Pod

Kubernetes ACS 引擎:容器(pod)无法访问互联网

从主节点在 AWS ec2 中创建的 3 节点集群上的 Pod 无法访问(超时)

Kubernetes的“ Windows pod”无法相互通信 “无法解析主机” | “无法连接网络无法访问”

Calico:Kubernetes Pod无法使用集群IP相互ping通

无法在 kubernetes 集群 (Digital Ocean) ErrImagePull 上运行 Pod

无法访问存在于 Pod 中的 ViewController

Zookeeper Pod无法访问已安装的持久卷声明

Kubernetes Pod 上的 CockroachDB 集群崩溃

在 kubernetes 集群中部署 pod 时出错

无法获取 pod 指标 - Kubernetes

无法删除Kubernetes中的Pod

Jenkins无法创建kubernetes POD

Kubernetes无法挂载Pod的卷

无法更改kubernetes pod的时区

无法在Kubernetes中创建Pod

如何从 kubernetes 中的集群外部访问 pod?我将其公开为节点端口服务,但无法使用该节点端口访问它

自省 Docker/Kubernetes Runtime 以检查它是 Docker 容器还是 Kubernetes 集群中 POD 内的容器