【发布时间】:2020-09-11 18:18:09
【问题描述】:
我的 k8 集群在 minikube 上运行。
我熟悉 kubectl port-forward 命令,它允许将流量从 localhost 路由到集群。
有没有办法反其道而行之?我可以将流量从其中一个 pod 路由到在我的机器上本地运行的 Web 服务器吗?
【问题讨论】:
标签: kubernetes minikube
我的 k8 集群在 minikube 上运行。
我熟悉 kubectl port-forward 命令,它允许将流量从 localhost 路由到集群。
有没有办法反其道而行之?我可以将流量从其中一个 pod 路由到在我的机器上本地运行的 Web 服务器吗?
【问题讨论】:
标签: kubernetes minikube
从您的minikube pod 连接到您的主机的方式在很大程度上取决于您使用的--driver 的类型。
每个--driver 都可以改变从您的 pod 连接到您的主机的方式。我的意思是每个--driver 可以有多个选项来连接到您的主机。
正如用户@Srikrishna B H 指出的那样
确保在连接到在您的机器上本地运行的 Web 服务器时使用本地机器 IP 而不是
localhost。
我创建了 3 个示例:
minikube start --driver=docker的Ubuntu
minikube start --driver=hyperkit 的 Mac OS
minikube start --driver=virtualbox 的窗口
下面使用的 IP 地址仅用于示例目的!
假设您有一台安装了 Docker 的 Ubuntu 机器,并且 nginx 作为您的 pod 将连接到的服务器:
$ minikube start --driver=docker$ ip addr show:
docker0 - 码头工人界面ensX - “物理”接口上面的命令会告诉你从你的 pod 连接的 IP 地址(在主机上)
2: ensX: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1460 qdisc mq state UP group default qlen 1000
<---->
inet 10.0.0.2/32 scope global dynamic ensX
<---->
3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
<---->
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
<---->
然后你可以生成一个 pod 来检查你是否可以连接到你的 nginx:
$ kubectl run -i --tty busybox --image=busybox --restart=Never -- sh$ wget -q0 - IP_ADDRESS - busybox 图像没有安装 curl
172.17.0.110.0.0.2假设你有一台 Mac OS 机器并且你已经在端口 8080 上配置了 nginx:
$ minikube start --driver=hyperkit$ ifconfig:
bridge100enX - “物理”接口免责声明!
您需要在防火墙中允许与
localhost之外的 nginx 的连接或完全禁用它(不推荐!)
bridge100: flags=8a63<UP,BROADCAST,SMART,RUNNING,ALLMULTI,SIMPLEX,MULTICAST> mtu 1500
<---->
inet 192.168.64.1 netmask 0xffffff00 broadcast 192.168.64.255
<---->
enX: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
<---->
inet 192.168.1.101 netmask 0xffffff00 broadcast 192.168.0.255
<---->
然后你可以生成一个 pod 来检查你是否可以连接到你的 nginx:
$ kubectl run -i --tty busybox --image=busybox --restart=Never -- sh$ wget -q0 - IP_ADDRESS - busybox 图像没有安装 curl
192.168.64.1:8080192.168.1.101:8080当您在 Windows 中使用 --driver=virtualbox 创建 minikube 实例时,它会创建带有 2 个网络接口的 VM:
NAT - 用于与外部(互联网)通信Virtualbox Host-Only Ethernet Adapter - 用于在 minikube 和您的主机之间进行通信假设您有一台装有 Virtualbox 的 Windows 机器,您已经在端口 80 上配置了 nginx,并且您还有一个正在运行的 minikube 实例。
您需要获取 ($ ipconfig) 的 IP 地址:
Ethernet X)Virtualbox Host-Only Ethernet Adapter
Ethernet adapter Ethernet X:
<---->
IPv4 Address. . . . . . . . . . . : 192.168.1.3
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . : 192.168.0.1
Ethernet adapter VirtualBox Host-Only Network #X:
<--->
IPv4 Address. . . . . . . . . . . : 192.168.99.1
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . :
免责声明!
您需要检查您的防火墙是否会接受发往 ngin 的流量(如果没有被阻止)。
然后你可以生成一个 pod 来检查你是否可以连接到你的 nginx:
$ kubectl run -i --tty busybox --image=busybox --restart=Never -- sh$ wget -q0 - IP_ADDRESS - busybox 图像没有安装 curl
192.168.99.1192.168.1.3【讨论】:
是的,默认情况下,您可以将流量从您的 pod 路由到本地机器。
确保在连接到在您的计算机上本地运行的 Web 服务器时使用本地计算机 IP 而不是 localhost。
【讨论】: