我在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服务。