WSL2环境Minikube自定义LoadBalancer服务异常,如何对齐kubectl expose效果?
解决Minikube中自定义LoadBalancer Service ExternalIP Pending的问题
问题原因
Minikube本身没有真正的外部负载均衡器,LoadBalancer类型的Service默认依赖minikube tunnel来分配可访问的ExternalIP(即127.0.0.1)。你用kubectl expose成功获取到ExternalIP,大概率是因为执行该命令时minikube tunnel已经在后台运行;而创建自定义Service时没有启动隧道,导致ExternalIP处于pending状态。
修改自定义Service清单的两种方法
方法1:手动指定ExternalIP
直接在Service清单中添加externalIPs字段,将127.0.0.1设置为外部IP,无需依赖minikube tunnel即可访问:
apiVersion: v1 kind: Service metadata: name: esg-lb spec: type: LoadBalancer selector: app: rss ports: - protocol: TCP port: 8080 targetPort: 5000 externalIPs: - 127.0.0.1
应用修改后的清单:
kubectl apply -f rss_lb.yaml
之后查看Service状态,ExternalIP会直接显示为127.0.0.1,即可通过http://127.0.0.1:8080访问服务。
方法2:保持原有清单,启动Minikube隧道
如果不想修改Service清单,只需在终端启动minikube tunnel:
minikube tunnel
启动后,Minikube会自动为所有LoadBalancer类型的Service分配127.0.0.1作为ExternalIP,此时你的自定义Service的ExternalIP会从pending变为127.0.0.1。
验证效果
无论用哪种方法,执行以下命令确认Service状态:
kubectl get svc esg-lb
当输出中EXTERNAL-IP显示为127.0.0.1时,即可正常访问服务。
内容的提问来源于stack exchange,提问作者JaeWoo So
相关产品推荐
相关产品推荐

