kubernetes - 通过服务 clusterIP 从 pod 到 pod 的连接被拒绝
问题描述
我的基于 k3sup 的 RPi 4 集群出了点问题。
直到昨天我不得不重新安装主节点操作系统时,一切都按预期工作。例如,我在主节点上安装了一个 redis,然后在工作节点上安装了一些 pod。我的 pod 无法通过 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
to替换行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。
在运行 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之后运行。
推荐阅读
- javascript - 使用目标方法单击时如何更改所选按钮的颜色?
- asp.net - Web 主机 (Apache) 不会显示来自 IIS 服务器的网页
- javascript - 在 Capacitor 上运行的 Axios 仅在 IOS 中在 Catch Block 中收到正确的响应
- javascript - 如何保存html body php的当前状态
- prolog - Prolog谓词返回真假
- derby - 是否有 Apache Derby SAMP 模式的示例数据?
- jenkins - 被简单的 groovy 变量比较难住了
- python - 用列表替换字典 CSV 值
- javascript - APNG 在第二个页面刷新后不同步
- java - 如何在同一行读取 int 和 string?Java 扫描器类