通过服务 clusterIP 从 pod 到 pod 的连接被拒绝
Connection refused from pod to pod via service clusterIP
我基于 k3sup 的树莓派 4 集群出现问题。
一切都按预期进行,直到昨天我不得不重新安装主节点操作系统。例如,我在主节点上安装了一个 redis,然后在工作节点上安装了一些 pods。我的 pods 无法通过 DNS 连接到 redis:redis-master.database.svc.cluster.local
(但他们在前一天连接)。
当我使用 busybox 进行测试时抛出无法解析域的错误,例如:
kubectl run -it --rm --restart=Never busybox --image=busybox:1.28 -- nslookup redis-master.database.svc.cluster.local
当我想用 IP ping 我的服务时(也在 busybox 上):
kubectl run -it --rm --restart=Never busybox --image=busybox:1.28 -- ping 10.43.115.159
表示100%丢包
我可以通过简单地替换 coredns 配置(将 forward . /etc/resolv.conf
替换为 forward . 192.168.1.101
行)来解决 DNS 问题,但我认为这不是好的解决方案,因为之前我没有不必那样做。
此外,它解决了将域映射到 IP 的问题,但仍然无法通过 IP 连接。
我的节点:
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
node-4 Ready <none> 10h v1.19.15+k3s2 192.168.1.105 <none> Debian GNU/Linux 10 (buster) 5.10.60-v8+ containerd://1.4.11-k3s1
node-3 Ready <none> 10h v1.19.15+k3s2 192.168.1.104 <none> Debian GNU/Linux 10 (buster) 5.10.60-v8+ containerd://1.4.11-k3s1
node-1 Ready <none> 10h v1.19.15+k3s2 192.168.1.102 <none> Debian GNU/Linux 10 (buster) 5.10.60-v8+ containerd://1.4.11-k3s1
node-0 Ready master 10h v1.19.15+k3s2 192.168.1.101 <none> Debian GNU/Linux 10 (buster) 5.10.63-v8+ containerd://1.4.11-k3s1
node-2 Ready <none> 10h v1.19.15+k3s2 192.168.1.103 <none> Debian GNU/Linux 10 (buster) 5.10.60-v8+ containerd://1.4.11-k3s1
主节点有污点:role=master:NoSchedule
。
有什么想法吗?
更新 1
我可以连接到 redis pod。 /etc/resolv.conf 来自 redis-master-0
search database.svc.cluster.local svc.cluster.local cluster.local
nameserver 10.43.0.10
options ndots:5
kubernetes 上的所有服务:
NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
default kubernetes ClusterIP 10.43.0.1 <none> 443/TCP 6d9h
kube-system traefik-prometheus ClusterIP 10.43.94.137 <none> 9100/TCP 6d8h
registry proxy-docker-registry ClusterIP 10.43.16.139 <none> 5000/TCP 6d8h
kube-system kube-dns ClusterIP 10.43.0.10 <none> 53/UDP,53/TCP,9153/TCP 6d9h
kube-system metrics-server ClusterIP 10.43.101.30 <none> 443/TCP 6d9h
database redis-headless ClusterIP None <none> 6379/TCP 5d19h
database redis-master ClusterIP 10.43.115.159 <none> 6379/TCP 5d19h
kube-system traefik LoadBalancer 10.43.221.89 192.168.1.102,192.168.1.103,192.168.1.104,192.168.1.105 80:30446/TCP,443:32443/TCP 6d8h
还有一件事没有提到。我在主节点上使用 OpenVPN 和 NordVPN 服务器列表,并为工作节点使用 privoxy。
当您在 运行ning kubernetes master 之前安装和 运行 OpenVPN 时,OpenVPN 添加阻止 kubernetes 网络的规则。因此,coredns 不起作用,您也无法通过 IP 访问任何 pod。
我正在使用 RPi 4 集群,所以对我来说,重新安装主节点就足够了,首先安装 kubernetes,然后配置 openvpn。现在一切正常。
通过在服务定义中添加 After
或 Before
来订购您的系统单位就足够了。我有如下所示的 VPN systemd 服务:
[Unit]
Description=Enable VPN for System
After=network.target
After=k3s.service
[Service]
Type=simple
ExecStart=/etc/openvpn/start-nordvpn-server.sh
[Install]
WantedBy=multi-user.target
保证VPN在kubernetes之后运行。
我基于 k3sup 的树莓派 4 集群出现问题。
一切都按预期进行,直到昨天我不得不重新安装主节点操作系统。例如,我在主节点上安装了一个 redis,然后在工作节点上安装了一些 pods。我的 pods 无法通过 DNS 连接到 redis:redis-master.database.svc.cluster.local
(但他们在前一天连接)。
当我使用 busybox 进行测试时抛出无法解析域的错误,例如:
kubectl run -it --rm --restart=Never busybox --image=busybox:1.28 -- nslookup redis-master.database.svc.cluster.local
当我想用 IP ping 我的服务时(也在 busybox 上):
kubectl run -it --rm --restart=Never busybox --image=busybox:1.28 -- ping 10.43.115.159
表示100%丢包
我可以通过简单地替换 coredns 配置(将 forward . /etc/resolv.conf
替换为 forward . 192.168.1.101
行)来解决 DNS 问题,但我认为这不是好的解决方案,因为之前我没有不必那样做。
此外,它解决了将域映射到 IP 的问题,但仍然无法通过 IP 连接。
我的节点:
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
node-4 Ready <none> 10h v1.19.15+k3s2 192.168.1.105 <none> Debian GNU/Linux 10 (buster) 5.10.60-v8+ containerd://1.4.11-k3s1
node-3 Ready <none> 10h v1.19.15+k3s2 192.168.1.104 <none> Debian GNU/Linux 10 (buster) 5.10.60-v8+ containerd://1.4.11-k3s1
node-1 Ready <none> 10h v1.19.15+k3s2 192.168.1.102 <none> Debian GNU/Linux 10 (buster) 5.10.60-v8+ containerd://1.4.11-k3s1
node-0 Ready master 10h v1.19.15+k3s2 192.168.1.101 <none> Debian GNU/Linux 10 (buster) 5.10.63-v8+ containerd://1.4.11-k3s1
node-2 Ready <none> 10h v1.19.15+k3s2 192.168.1.103 <none> Debian GNU/Linux 10 (buster) 5.10.60-v8+ containerd://1.4.11-k3s1
主节点有污点:role=master:NoSchedule
。
有什么想法吗?
更新 1
我可以连接到 redis pod。 /etc/resolv.conf 来自 redis-master-0
search database.svc.cluster.local svc.cluster.local cluster.local
nameserver 10.43.0.10
options ndots:5
kubernetes 上的所有服务:
NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
default kubernetes ClusterIP 10.43.0.1 <none> 443/TCP 6d9h
kube-system traefik-prometheus ClusterIP 10.43.94.137 <none> 9100/TCP 6d8h
registry proxy-docker-registry ClusterIP 10.43.16.139 <none> 5000/TCP 6d8h
kube-system kube-dns ClusterIP 10.43.0.10 <none> 53/UDP,53/TCP,9153/TCP 6d9h
kube-system metrics-server ClusterIP 10.43.101.30 <none> 443/TCP 6d9h
database redis-headless ClusterIP None <none> 6379/TCP 5d19h
database redis-master ClusterIP 10.43.115.159 <none> 6379/TCP 5d19h
kube-system traefik LoadBalancer 10.43.221.89 192.168.1.102,192.168.1.103,192.168.1.104,192.168.1.105 80:30446/TCP,443:32443/TCP 6d8h
还有一件事没有提到。我在主节点上使用 OpenVPN 和 NordVPN 服务器列表,并为工作节点使用 privoxy。
当您在 运行ning kubernetes master 之前安装和 运行 OpenVPN 时,OpenVPN 添加阻止 kubernetes 网络的规则。因此,coredns 不起作用,您也无法通过 IP 访问任何 pod。
我正在使用 RPi 4 集群,所以对我来说,重新安装主节点就足够了,首先安装 kubernetes,然后配置 openvpn。现在一切正常。
通过在服务定义中添加 After
或 Before
来订购您的系统单位就足够了。我有如下所示的 VPN systemd 服务:
[Unit]
Description=Enable VPN for System
After=network.target
After=k3s.service
[Service]
Type=simple
ExecStart=/etc/openvpn/start-nordvpn-server.sh
[Install]
WantedBy=multi-user.target
保证VPN在kubernetes之后运行。