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

时间:2017-02-16 08:42:41

标签: kubernetes minikube

在运行Minikube时,我想连接到一个服务器,这个服务器有一个烦人的习惯,就是从其pod内部向服务注册表宣告其内部IP地址。

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

2 个答案:

答案 0 :(得分:7)

您可以从localhost

添加到k8内部网络的路由

使用minikube ip address

添加到内部网络的路由
security:
    providers:
        my_ldap:
            ldap:
                service: ldap
                base_dn: 'OU=Users,OU=Office,OU=xxx,DC=xxx,DC=xxx'
                search_dn: 'username@domain.local'
                search_password: 'password'
                default_roles: 'ROLE_ADMIN'

    firewalls:
        main:
            pattern: ^/
            anonymous: ~
            http_basic_ldap:
                service: ldap
                dn_string: '{username}'
                #dn_string: 'domain\{username}' # or try including your domain prefix

您的子网掩码可以使用$ 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 命令

找到

通过部署测试容器并从localhost

连接到测试容器来测试路由
kubectl get service

您还可以添加到K8主人的路线

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

这仅适用于本地开发,您应该使用sudo route -n add 10.0.0.0/24 $(minikube ip) NodePort来曝光制作中的广告。

答案 1 :(得分:6)

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

首先是为您的服务器/ pod创建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>

然后,这将使代理端口在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的VM