我要在浏览器中访问 MacOS 中运行在 minikube 上的 Kubernetes NodePort 服务,但我不能。
这是服务定义文件:
apiVersion: v1
kind: Service
metadata:
name: myapp-service
spec:
type: NodePort
ports:
- port: 80
targetPort: 80
nodePort: 30004
selector:
app: myapp
这是 Pod 定义文件:
apiVersion: v1
kind: Pod
metadata:
name: nginx-2
labels:
env: production
app: myapp
spec:
containers:
- name: nginx
image: nginx
这是部署定义文件:
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp-deployment
labels:
tier: frontend
app: myapp
spec:
selector:
matchLabels:
env: production
replicas: 6
template:
metadata:
name: nginx-2
labels:
env: production
spec:
containers:
- name: nginx
image: nginx
我无法在浏览器上使用此 URL 访问 NodePort 服务: http://localhost:30004
此外,通过在 top 命令中输入 minikube ip 而不是 localhost,也会发生超时。
最后,运行以下命令:
minikube service myapp-service --url
生成这样的示例输出:
http://127.0.0.1:53751 ❗ 因为您在 darwin 上使用 Docker 驱动程序,所以需要打开终端才能运行它。
但是向用户显示以下错误:
连接已重置
更新:问题是因为部署定义文件 -> 模板部分中未提及标签 app:myapp
看,您没有将本地主机暴露给nodePort。您正在 Kupernetes 集群上公开 NodePort。
所以你必须访问它http://nodeip:nodePort。
想想什么是 localhost。
您的电脑上有本地主机。 您在虚拟机(minkube 节点)上有 localhost。 您的集群内运行的每个容器都有本地主机。
如果您想使用 PC 本地主机访问 Pod 中容器内的端口,您可以执行以下操作:
kubectl port-forward svc/serviceName reachablePortFromyourPc:containerPort
例如:
kubectl port-forward svc/serviceName 80:80
这将启动端口转发。只要它正在运行,您就可以从浏览器访问它。
这仅适用于测试。
要访问 NodePort,请使用。
minikubeIp:NodePort