问题描述
我的k8集群在minikube上运行。
我熟悉kubectl port-forward命令,该命令允许将流量从本地主机路由到集群。
有没有其他方法可以做到?我可以将流量从其中一个Pod路由到在我的计算机上本地运行的Web服务器吗?
解决方法
是的,默认情况下,您可以将流量从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")
}
}
})
}
。
从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,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,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
-