0

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

规格:

  • 操作系统:Ubuntu 20.04.3 Cloud Image(也在尝试 18.04 和 21.04)
  • Kubernetes:1.23.1(也在尝试 1.21.8)- 使用 kubeadm 和 kube-proxy 解聚(使用 strictARP 和 ipvs 模式)
  • CRI:码头工人 20.10.12
  • MetalLB v0.11.0(第 2 层模式)
  • 纤毛 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: <BROADCAST,NOARP> mtu 1500 qdisc noop state DOWN group default
...
inet 198.168.50.152/32 scope global kube-ipvs0
valid_lft forever preferred_lft forever
...

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

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

4

1 回答 1

0

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

于 2022-01-22T09:04:56.110 回答