1

我创建了一个 NodePort 来转发来自端口的请求30101->80->8089

apiVersion: v1
kind: Service
metadata:
  name: gorest-service
spec:
  type: NodePort
  selector:
    app: gorest
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8089
      nodePort: 30101

当我尝试获取服务 URLhttp://192.168.49.2:30101时,我无法访问它,但是http://127.0.0.1:64741通过 using 检索到的 url ,minikube service <service>我能够访问它。

查询:无法理解如何http://192.168.49.2:30101更改为http://127.0.0.1:64741检索者minikube service <service>

 % minikube service gorest-service
|-----------|----------------|-------------|---------------------------|
| NAMESPACE |      NAME      | TARGET PORT |            URL            |
|-----------|----------------|-------------|---------------------------|
| default   | gorest-service |        8089 | http://192.168.49.2:30101 |
|-----------|----------------|-------------|---------------------------|
  Starting tunnel for service gorest-service.
|-----------|----------------|-------------|------------------------|
| NAMESPACE |      NAME      | TARGET PORT |          URL           |
|-----------|----------------|-------------|------------------------|
| default   | gorest-service |             | http://127.0.0.1:64741 |
|-----------|----------------|-------------|------------------------|
  Opening service default/gorest-service in default browser...
❗  Because you are using a Docker driver on darwin, the terminal needs to be open to run it.
4

2 回答 2

0

您的理解是正确的,使用暴露的服务NodePort应该可以在minikube_IP:NodePort. 首先,我在安装了 minikube 的 Linux VM 上检查了它,它工作正常。

然后我注意到你正在使用MacOS

因为您在 darwin 上使用 Docker 驱动程序

这导致我们在 MacOS 上使用 docker 驱动程序运行 minikube 时遇到一些限制。请参阅此 GitHub 问题

至少有两种选择(更多,但这些很容易做到):

  • 使用minikube tunnel你所做的,它对你有用。

隧道用于从运行 minikube 的 VM 内部向主机网络公开服务。请参考minikube 中的访问应用。这是如何minikube_IP:NodePort转换为localhost:different_port.

  • 使用 VirtualBox 驱动程序启动 minikube 以获得正确的 IP(如果您确实需要访问您的服务NodePort),在命令下方如何使用 VirtualBox 驱动程序启动它(这应该安装在您的机器上):

minikube start --driver=VirtualBox

于 2021-10-05T07:38:23.580 回答
0

在清单文件中,您将容器的服务端口从端口 80 重新映射到端口 8089。

如果你想Kubernetes 中访问该服务,你必须使用 8089 端口。

但是您无法从外部访问 K8s 内部的服务:您需要公开它们(您应该使用负载均衡器或出口服务)。

Minikube 旨在用于开发。您看到的 64741 端口是一个隧道服务,它启动 minikube 并允许您在不使用出口的情况下在 k8s 之外测试和调试您的服务(这可能不仅仅是将服务与外界连接,例如验证或授权请求)。

于 2021-10-04T16:21:23.740 回答