我正在使用安装了流浪盒的Windows笔记本电脑,我有一个管理一些外部kubernetes集群的kubectl客户端。
出于调试目的,我想通过kubectl进行端口转发,并从主机访问此端口。这从流浪者内部到kubernetes集群完美地运行,但显然某些东西不能与从宿主转移到流浪者的流浪者端口一起工作。
这是我的设置:
Vagrant中的端口转发:
config.vm.network "forwarded_port", guest: 8080, host: 8080, auto_correct:false
在kubernetes中启动nginx容器:
kubectl run -i -t --image nginx test
将端口转发到localhost(在vagrant中):
kubectl port-forward test-64585bfbd4-zxpsd 8080:80
测试在vagrant-box内运行的nginx:
vagrant@csbox:~$ curl http://localhost:8080
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
作品。
现在升级 - 在Windows主机上:
PS U:\> Invoke-WebRequest http://localhost:8080
Invoke-WebRequest : The underlying connection was closed: An unexpected error occurred on a receive.
At line:1 char:1
+ Invoke-WebRequest http://localhost:8080
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-WebRequest], WebException
+ FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand
不工作。
根据我的理解 - 只要查看端口转发,一切都应该没问题。你有什么想法,为什么这不能像预期的那样工作?
答案 0 :(得分:1)
默认情况下,kubectl port-forward
绑定到地址127.0.0.1
。这就是为什么您无法在无业游民的情况下访问它。解决方案是使用参数kubectl port-forward
0.0.0.0
绑定到--address 0.0.0.0
运行命令:
kubectl port-forward test-64585bfbd4-zxpsd --address 0.0.0.0 8080:80
将解决您的问题。
答案 1 :(得分:0)
kubectl port-forward
绑定到127.0.0.1,并且不允许您定义绑定地址。 Windows主机的流量访问了Vagrant VM的主网络接口,因此这是行不通的。您可以使用iptables
通过将流量从Vagrant VM的主网络接口路由到回送接口来解决此问题:
`
$PORT
替换为您要转发的端口):$ $ iptables -t nat -I PREROUTING -p tcp --dport $PORT -j DNAT --to-destination 127.0.0.1:$PORT
$ ifconfig
enp0s3 Link encap:Ethernet HWaddr 02:38:b8:f5:60:7e
inet addr:10.0.2.15 Bcast:10.0.2.255 Mask:255.255.255.0
inet6 addr: fe80::38:b8ff:fef5:607e/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1106 errors:0 dropped:0 overruns:0 frame:0
TX packets:736 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:423190 (423.1 KB) TX bytes:80704 (80.7 KB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
$MAIN_NETWORK_INTERFACE_NAME
中用接口名称替换enp0s3
):sysctl -w net.ipv4.conf.$MAIN_NETWORK_INTERFACE_NAME.route_localnet=1