将内部Kubernetes IP地址路由到主机系统

问题描述:

在运行Minikube时,我想连接到一个服务器,该服务器有恼人的习惯,使用其内部IP地址向服务注册表宣告自己。将内部Kubernetes IP地址路由到主机系统

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

如果我理解正确:您正试图将minikube内的服务器公开到您的主机网络。这可以通过几种方法完成:

首先是为您的服务器/吊舱创建一个NodePort Service。然后,您可以运行minikube service list获得网址为您服务:

$ 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> 

这一操作将使得可在本地主机的代理端口:端口

如果你只是想获得一个吊舱的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的VM

您可以从本地主机

使用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 

子网掩码添加路由到内部网络的路由添加到K8内部网络可以使用kubectl get service命令发现

通过部署测试容器并从本地主机连接到它来测试路由

$ 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主

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

这是唯一有用的地方发展,你应该使用NodePortLoadBalancer在生产中暴露出的豆荚。

+0

由于kubernetes覆盖网络的子网掩码已经改变,所以我不想再用minikube 0.24工作 - 我估计是'10.0.0.0/8'。 – Peter

+0

它是'10.96.0.0/12'参见[constant.go](https://github.com/kubernetes/minikube/blob/master/pkg/util/constants.go) – Peter