我的k8集群在minikube上运行。
我熟悉kubectl port-forward命令,该命令允许将流量从本地主机路由到集群。
有没有其他方法可以做到?我可以将流量从其中一个Pod路由到在我的计算机上本地运行的Web服务器吗?
答案 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个示例:
minikube start --driver=docker
minikube start --driver=hyperkit
的Mac OS minikube start --driver=virtualbox
的Windows 下面使用的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
的{{1}}图像
curl
172.17.0.1
假设您有一台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
在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