【问题标题】:Routing an internal Kubernetes IP address to the host system将内部 Kubernetes IP 地址路由到主机系统
【发布时间】:2017-07-05 06:15:59
【问题描述】:

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

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

【问题讨论】:

    标签: kubernetes minikube


    【解决方案1】:

    你可以从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。

    【讨论】:

    • 这不再适用于 minikube 0.24,因为 kubernetes 覆盖网络的子网掩码已更改 - 10.0.0.0/8 我猜。
    • 它是10.96.0.0/12constant.go
    【解决方案2】:

    如果我理解正确:您正试图将 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 的虚拟机

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-02
      • 1970-01-01
      • 1970-01-01
      • 2018-09-24
      • 2018-07-18
      • 2019-03-08
      相关资源
      最近更新 更多