6

在运行 Minikube 时,我想连接到一个服务器,该服务器有一个恼人的习惯,即从其 pod 内部使用其内部 IP 地址向服务注册表宣布自己。

但是,由于遗留原因,我必须先连接到此注册表并从中检索该服务器的 IP 地址。在我看来,从我的开发机器访问该服务器的唯一方法是桥接到内部网络,这样我就可以访问 Minikube 的网络。是否有捷径可寻?

4

2 回答 2

8

您可以从 localhost 添加到 k8 内部网络的路由

使用 minikube ip 地址添加到内部网络的路由

$ sudo ip route add 172.17.0.0/16 via $(minikube ip)  # linux
$ sudo route -n add 172.17.0.0/16 $(minikube ip) # OSX

可以使用kubectl get service命令找到您的子网掩码

通过部署测试容器来测试路由并从 localhost 连接到它

$ kubectl run monolith --image=kelseyhightower/monolith:1.0.0 --port=80
$ IP=$(kubectl get pod  -l run=monolith -o jsonpath='{.items[0].status.podIP }')
$ curl http://$IP
{"message":"Hello"}

您还可以添加路由到 K8 master

sudo route -n add 10.0.0.0/24 $(minikube ip)

这仅对本地开发有用,您应该在生产中使用NodePortLoadBalancer公开 pod。

于 2017-04-10T15:10:14.977 回答
6

如果我理解正确:您正试图将 minikube 中的服务器暴露给您的主机网络。这可以通过以下几种方式完成:

第一个是为您的服务器/pod创建一个NodePort 服务。然后,您可以运行minikube service list以获取服务的 url:

$ minikube service list
|-------------|----------------------|-----------------------------|
|  NAMESPACE  |         NAME         |             URL             |
|-------------|----------------------|-----------------------------|
| default     | kubernetes           | No node port                |
| default     | <your-service>       | http://192.168.99.100:<port>|
| kube-system | kube-dns             | No node port                |
| kube-system | kubernetes-dashboard | http://192.168.99.100:30000 |
|-------------|----------------------|-----------------------------|

第二种是使用kubectl proxy并将您想要的端口代理到本地机器。此方法不需要您创建服务,它应该适用于您当前的配置。

 kubectl proxy --port=<port-you-want-access-on-server>

这将使代理端口在 localhost:port 可用

如果你只是想获取一个 pod 的 IP 地址,这个命令应该可以工作(来自How to know a Pod's own IP address from a container in the Pod?):

kubectl get pod $POD_NAME --template={{.status.podIP}}

此外,如果您只需要访问 minikube 的内部网络,您可以使用:

minikube ssh

这会让你进入 minikube 的虚拟机

于 2017-02-16T17:09:35.120 回答