将流量从Pod转发到在localhost上运行的服务

时间:2020-09-11 18:18:09

标签: kubernetes minikube

我的k8集群在minikube上运行。

我熟悉kubectl port-forward命令,该命令允许将流量从本地主机路由到集群。

有没有其他方法可以做到?我可以将流量从其中一个Pod路由到在我的计算机上本地运行的Web服务器吗?

2 个答案:

答案 0 :(得分:1)

是的,默认情况下,您可以将流量从Pod路由到本地计算机。 确保连接到本地运行的Web服务器时使用本地计算机IP而非 func fetchPhotos(){ // Specify the place data types to return (in this case, just photos). let fields: GMSPlaceField = GMSPlaceField(rawValue: UInt(GMSPlaceField.photos.rawValue))! self.placesClient?.fetchPlace(fromPlaceID: "\(globalPlaceList[placeIndex].place_id)", placeFields: fields, sessionToken: nil, callback: { (place: GMSPlace?, error: Error?) in if let error = error { print("an error occurred: \(error.localizedDescription)") return } if let place = place { // Get the metadata for the first photo in the place photo metadata list. if place.photos?.count != nil && place.photos!.count > 0 { let photoCount = place.photos!.count for index in 0..<photoCount { let photoMetadata: GMSPlacePhotoMetadata = place.photos![index] self.placesClient?.loadPlacePhoto(photoMetadata, callback: { (photo, error) -> Void in if let error = error { // TODO: Handle the error. print("Error loading photo metadata: \(error.localizedDescription)") return } else { print("Place Photo \(index + 1) Loaded Successfully") } }) } } else { print("No Photos Found") } } }) }

答案 1 :(得分:1)

minikube吊舱到主机的连接方式在很大程度上取决于您使用的--driver的类型。

每个--driver都可以改变从Pod到主机的连接方式。我的意思是每个--driver都可以有多个选项来连接到主机。

用户@Srikrishna B H指出

在连接到本地运行的Web服务器时,请确保使用本地计算机IP而非localhost

我创建了3个示例:

  • Ubuntu与minikube start --driver=docker
  • 具有minikube start --driver=hyperkit的Mac OS
  • 带有minikube start --driver=virtualbox的Windows

下面使用的IP地址仅用于示例目的!


Ubuntu与Docker

假设您有一台安装了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的{​​{1}}图像
    • curl
    • 172.17.0.1

带有Hyperkit的Mac OS

假设您有一台Mac OS计算机,并且已在端口10.0.0.2上配置了nginx

  • 8080
  • $ minikube start --driver=hyperkit
    • $ ifconfig
    • bridge100-“物理”界面

免责声明!

您需要允许连接到防火墙中enX之外的nginx或完全禁用它(不推荐!)

localhost
bridge100: flags=8a63<UP,BROADCAST,SMART,RUNNING,ALLMULTI,SIMPLEX,MULTICAST> mtu 1500
    <---->
    inet 192.168.64.1 netmask 0xffffff00 broadcast 192.168.64.255
    <---->

然后,您可以生成一个Pod,以检查是否可以连接到Nginx:

  • enX: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500 <----> inet 192.168.1.101 netmask 0xffffff00 broadcast 192.168.0.255 <---->
  • $ kubectl run -i --tty busybox --image=busybox --restart=Never -- sh-未安装$ wget -q0 - IP_ADDRESS的{​​{1}}图像
    • busybox
    • curl

带有Virtualbox的Windows

在Windows中使用192.168.64.1:8080创建一个192.168.1.101:8080实例时,它将创建一个具有两个网络接口的minikube

  • --driver=virtualbox-用于与外部(互联网)进行通信
  • VM-用于在NAT和您的主机之间进行通信

假设您有一台装有Virtualbox的Windows计算机,那么您已经在端口Virtualbox Host-Only Ethernet Adapter上配置了minikube,并且还具有一个正在运行的nginx实例。

您将需要获取(80)的IP地址:

  • 您的“物理”界面(例如minikube
  • 您的$ ipconfig
Ethernet X
Virtualbox Host-Only Ethernet Adapter

免责声明!

您需要检查防火墙是否会接受发往Ngin的流量(如果未阻止)。

然后,您可以生成一个Pod,以检查是否可以连接到Nginx:

  • 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 . . . . . . . . . : -未安装$ kubectl run -i --tty busybox --image=busybox --restart=Never -- sh的{​​{1}}图像
    • $ wget -q0 - IP_ADDRESS
    • busybox