我正在minikube上学习kubernetes。我研究了kubernetes官方文档,并在沙盒环境中学习了他们的交互式教程。在沙箱中一切正常,但我在我的系统上尝试了同样的事情,它失败了。
My Setup:
- 我在Apple M1上使用macOS Big Sur 11.6.2(20G314)。 我使用docker代替minikube的虚拟机环境。
复制步骤:
首先创建了一个部署,然后创建了一个NodePort
类型的服务,将其公开给外部流量。
pod运行正常,服务描述中没有问题。
为了测试应用程序是否暴露在集群外部,我使用curl
向节点发送请求:
curl $(minikube ip):$NODE_PORT
但是我没有得到服务器的响应:
curl:(7)连接192.168.XX失败。X端口32048:Operation timed out.
我已经复制了教程中所做的一切。相同的部署名称,相同的映像,相同的服务名称,实际上是一切。
我尝试了LoadBalancer
类型,但发现minikube不支持它。为了访问LoadBalancer
部署,我使用命令minikube tunnel
,但这没有帮助。
可能的原因是什么?是我的系统吗?
我在我的m1 mac上也有这个问题。我能够通过使用这个命令访问服务:
kubectl port-forward svc/kubernetes-bootcamp 8080:8080
您可以查看这篇文章和这个答案,以获得更多信息和方法。
这实际上取决于您使用的minikube驱动程序"docker", "qemu"等。
如果你正在使用Docker驱动程序(这是minikube macOS的默认驱动程序),那么你应该使用minikube tunnel
和minikube service xxxx
来访问NodePort。
使用qemu2+socket_vmnet,您可以直接连接到minikube ip
和端口(不需要minikube tunnel
/minikube service xxx
:
brew install socket_vmnet
sudo brew services start socket_vmnet
minikube delete --all
minikube start --vm --addons=ingress,dashboard
😄 minikube v1.30.1 on Darwin 13.3.1 (arm64)
✨ Automatically selected the qemu2 driver
🌐 Automatically selected the socket_vmnet network
kubectl create deployment hello-minikube1 --image=kicbase/echo-server:1.0
kubectl expose deployment hello-minikube1 --type=NodePort --port=8080
kubectl get service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
hello-minikube1 NodePort 10.109.118.67 <none> 8080:30521/TCP 0s
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 2m10s
kubectl get service hello-minikube1 --output='jsonpath={.spec.ports[0].nodePort}'
30521
curl -m 2 "http://$(minikube ip):30521"
Request served by hello-minikube1-8587cd9b85-zrpz6