无法访问 Minikube 中的 Kubernetes NodePort 服务

问题描述 投票:0回答:1

我要在浏览器中访问 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

kubernetes minikube
1个回答
1
投票

看,您没有将本地主机暴露给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
© www.soinside.com 2019 - 2024. All rights reserved.