无法从K8s节点(MetalLB Layer2)访问服务



我在VMware vSphere私有云上部署了裸机Kubernetes集群。

规格:

  • 操作系统:Ubuntu 20.04.3云映像(也尝试18.04和21.04(
  • Kubernetes:1.23.1(也尝试1.21.8(-使用kubeadm和kube代理(使用strictARP和ipvs模式(
  • CRI:Docker 20.10.12
  • MetalLB v0.11.0(第2层模式(
  • Cilium 1.11.1
  • 192.168.50.0/24子网中的所有节点

当我简单地添加部署时:
kubectl create deployment nginx --image k8s.gcr.io/nginx:latest

并曝光:
kubectl expose deployment nginx --type=LoadBalancer --port=80

一切似乎都很好。服务从MetalLB池获得ExternalIP:
nginx LoadBalancer 10.96.56.118 198.168.50.152 80:32325/TCP 4s

kube-ipvs0接口上发布的新ip地址:

kube-ipvs0:<广播,NOARP>mtu 1500 qdisc noop状态DOWN组默认值

inet 198.168.50.152/32 scope global kube-ipvs0
valid_lft forever preferred_lft foreverly
。。。

但我无法从ExternalIP上的所有K8s节点以及其他LAN访问服务,curl返回:
curl: (7) Failed to connect to 192.168.50.152 port 80: No route to host

ClusterIP运行良好,我可以从节点访问它。

解决方案是:您的虚拟机和服务必须位于不同的子网中。在我的情况下,我有192.168.50.0/24网络,我将其拆分为两个子网192.168.50.0/25-用于虚拟机,192.168.50.128/25用于MetalLB服务。

相关内容

  • 没有找到相关文章

最新更新