我正在尝试在 Windows 计算机中使用 minikube 设置本地集群。按照 kubernetes.io
中的一些教程,我得到了以下集群 list :
apiVersion: apps/v1
kind: Deployment
metadata:
name: external-nginx-deployment
labels:
app: external-nginx
spec:
selector:
matchLabels:
app: external-nginx
replicas: 2
template:
metadata:
labels:
app: external-nginx
spec:
containers:
- name: external-nginx
image: nginx
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: expose-nginx
labels:
service: expose-nginx
spec:
type: NodePort
selector:
app: external-nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
nodePort: 32000
如果我做对了,这应该创建一个带有 nginx 实例的 pod,并将其暴露给端口 32000 的主机。
但是,当我运行 curl http://$(minikube ip):32000
时,出现连接被拒绝错误。
我通过 kubectl exec svc/expose-nginx -it bash 在服务 expose-nginx 中运行 bash,从那里我能够访问外部-nginx pods 正常,这让我相信这不是集群内的问题。
我还尝试将服务类型更改为 LoadBalancer 并启用 minikube 隧道
,但得到了相同的结果。
我有什么遗漏吗?
最佳答案
默认情况下,minikube
几乎总是使用 docker
驱动程序来创建 minikube
VM。在主机系统中,它看起来像一个用于虚拟机的大型 docker 容器,其中其他 kubernetes 组件也作为容器运行。根据测试,服务的 NodePort
通常不起作用,因为它应该像访问通过 NodePort
公开的服务一样,应该在 minikube_IP:NodePort
地址上工作.
解决方案是:
供本地测试使用
kubectl port-forward
将服务公开给本地计算机(OP 这样做了)使用
minikube service
命令会将服务公开给主机。工作方式与kubectl port-forward
非常相似。使用正确的虚拟机代替
docker
驱动程序,该虚拟机将获得自己的 IP 地址(VirtualBox
或hyperv
驱动程序 - 取决于系统)。 Reference .(与
minikube
无关)使用 Docker Desktop for Windows 中的内置功能kubernetes
。我已经tested it服务类型应为LoadBalancer
- 它将暴露给localhost
上的主机。
关于kubernetes - NodePort 类型服务在集群外部不可访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70276205/