使用Minikube(Docker驱动)无法从集群外部访问NodePort服务
问题:Minikube中NodePort服务外部访问超时
我正在学习Kubernetes,使用Docker驱动的Minikube环境。部署NodePort服务后,集群内部访问正常,但从集群外部访问时出现超时错误。
部署的Deployment配置
apiVersion: apps/v1 kind: Deployment metadata: name: sample-python-app labels: app: sample-python-app spec: replicas: 2 selector: matchLabels: app: sample-python-app template: metadata: labels: app: sample-python-app spec: containers: - name: python-app image: abhishekf5/python-sample-app-demo:v1 ports: - containerPort: 8000
对应的Service配置
apiVersion: v1 kind: Service metadata: name: python-django-app-service spec: type: NodePort selector: app: sample-python-app ports: - port: 80 targetPort: 8000 nodePort: 30007
访问情况
- 集群内部可正常访问:
minikube ssh curl -L http://<cluster ip>:80/demo - 集群外部执行
curl -L http://<minikube ip>:30007/demo(因应用需要重定向使用-L参数)时出现超时。
排查与解决步骤
使用Minikube内置命令暴露服务:Docker驱动的Minikube默认不会自动将NodePort映射到宿主机网络,直接访问Minikube IP的NodePort会失败。执行以下命令自动完成端口转发并获取可访问地址:
minikube service python-django-app-service命令执行后会直接打开浏览器或输出宿主机可访问的URL。
手动端口转发:如果需要自定义端口映射,可执行kubectl端口转发命令:
kubectl port-forward service/python-django-app-service 30007:80之后在宿主机访问
http://localhost:30007/demo即可。验证Minikube节点网络可达性:用
minikube ip获取节点IP,检查宿主机是否能ping通该IP。若ping不通,重启Minikube修复网络配置:minikube stop && minikube start --driver=docker检查应用绑定地址:确认Django应用启动时绑定的是
0.0.0.0而非127.0.0.1。如果应用仅绑定localhost,即使集群内部Pod间能访问,外部通过NodePort访问也会失败。启动命令需确保为python manage.py runserver 0.0.0.0:8000形式。
内容的提问来源于stack exchange,提问作者Navdeep Singh
相关产品推荐
相关产品推荐

