在minikube中暴露端口

Kar*_*Kid 30 kubernetes minikube

在minikube中,如何使用nodeport公开服务?

例如,我使用以下命令启动kubernetes集群,并创建并公开如下所示的端口:

$ minikube start
$ kubectl run hello-minikube --image=gcr.io/google_containers/echoserver:1.4 --port=8080
$ kubectl expose deployment hello-minikube --type=NodePort
$ curl $(minikube service hello-minikube --url)
CLIENT VALUES:
client_address=192.168.99.1
command=GET
real path=/ ....
Run Code Online (Sandbox Code Playgroud)

现在如何从主机访问公开的服务?我想minikube节点也需要配置为暴露这个端口.

aar*_*dle 68

我不确定你在问什么,因为看起来你已经知道了这个minikube service <SERVICE_NAME> --url命令会给你一个你可以访问服务的网址.要打开公开的服务,minikube service <SERVICE_NAME>可以使用以下命令:

$ kubectl run hello-minikube --image=gcr.io/google_containers/echoserver:1.4 --port=8080
deployment "hello-minikube" created
$ kubectl expose deployment hello-minikube --type=NodePort
service "hello-minikube" exposed
$ kubectl get svc
NAME             CLUSTER-IP   EXTERNAL-IP   PORT(S)    AGE
hello-minikube   10.0.0.102   <nodes>       8080/TCP   7s
kubernetes       10.0.0.1     <none>        443/TCP    13m

$ minikube service hello-minikube
Opening kubernetes service default/hello-minikube in default browser...
Run Code Online (Sandbox Code Playgroud)

此命令将在默认浏览器中打开指定的服务.这是minikube服务文档:https://github.com/kubernetes/minikube/blob/master/docs/minikube_service.md

还有一个--url选项可以打印服务的URL,这是在浏览器中打开的:

$ minikube service hello-minikube --url
http://192.168.99.100:31167
Run Code Online (Sandbox Code Playgroud)

  • @MahtabAlam 它不起作用,因为 NodePort 暴露在 minikube 运行 k8s 的虚拟机内部,而不是主机。您可以使用新的“minikubetunnel”命令,该命令应该代理端口以与本地主机交互。 (3认同)

iam*_*nat 15

minikube运行在类似的东西上192.168.99.100.因此,您应该能够在NodePort您公开服务时访问它.例如,比如你的NodePort30080,那么你的服务将是可访问的192.168.99.100:30080.

要获取minikube ip,请运行该命令minikube ip.

2017年9月14日更新:

这是一个与minikube一起使用的小例子v0.16.0.

1)运行以下命令创建一个在8080上运行的nginx并NodePort svc转发给它:

$ kubectl run hello-minikube --image=gcr.io/google_containers/echoserver:1.4 --port=8080
deployment "hello-minikube" created
$ kubectl expose deployment hello-minikube --type=NodePort
service "hello-minikube" exposed
Run Code Online (Sandbox Code Playgroud)

2)找到svc使用的nodeport:

$ kubectl get svc hello-minikube
NAME             CLUSTER-IP   EXTERNAL-IP   PORT(S)          AGE
hello-minikube   10.0.0.76    <nodes>       8080:30341/TCP   4m
Run Code Online (Sandbox Code Playgroud)

3)找到minikube ip:

$ minikube ip
192.168.99.100
Run Code Online (Sandbox Code Playgroud)

4)用卷曲说话:

$ curl 192.168.99.100:30341
CLIENT VALUES:
client_address=172.17.0.1
command=GET
real path=/
...
Run Code Online (Sandbox Code Playgroud)

  • 我一整天都在做这个。Mac 上的 Minikube 不会设置可通过浏览器访问的 IP 地址。说2个多小时没有变化。我一直在阅读一些关于 loadBalancer 对 minikube 有效但无效的消息。还有其他人让它工作吗?我有一个实例正在运行并与大使一起工作,但还不是没有它。 (5认同)
  • 这似乎不是真的. (4认同)
  • 1) kubernetes 为暴露的服务分配一个 IP 和端口 2) 该 IP 和端口在具有虚拟 IP 的 VM 上运行,您的笔记本电脑无法访问该虚拟 IP。 (2认同)
  • @macrael 这是 100% 正确的,适用于 windows、mac 和 Linux。请检查您的 VM 网络设置、您的 kubernetes 设置或将它们张贴在此处以便其他人可以提供帮助。投反对票是没有根据的! (2认同)
  • 示例中的“kubectl公开部署hello-minikube --type = NodePort”命令对我不起作用(MacOS minikube + docker驱动程序,minikube版本:v1.14.0,docker引擎版本19.03.13,k8s客户端1.18,k8s服务器1.19) (2认同)
  • @macrael - 那是因为答案不完整。上面的内容可能适用于特定类型的 Minikube 集群 - 可能是 vbox(因为在主机和来宾之间创建了网络)。默认的 Minikube 集群是 docker 的集群,这个答案不适用于它。必须添加到答案中,否则就会极具误导性,并且在某种程度上是错误的! (2认同)

Aru*_*ddy 14

由于 minikube 是通过nodeIP:nodePort而非 on公开访问localhost:nodePort,您可以通过使用kubectl的端口转发功能使其工作。例如,如果您正在运行 mongodb 服务:

kubectl port-forward svc/mongo 27017:27017
Run Code Online (Sandbox Code Playgroud)

这将在localhost:27017, FWIW上公开服务。此外,您可能想弄清楚如何在后台运行它。


gbe*_*ade 9

我在 2022 年遇到了类似的问题。以下是我运行的命令:

  1. kubectl create deployment deploymentName --image=dockerHubUsername/imageTag:imageVersion
  2. kubectl expose deployment deploymentName --type=LoadBalancer --port=8080
  3. minikube tunnel
  4. kubectl get services deploymentName这提供了访问应用程序所需的外部 IP 地址。我通过以下方式访问该应用程序127.0.0.1:8080

来源