Kubernetes端口转发-错误监听tcp4 127.0.0.1:88:绑定:权限被拒绝

时间:2018-12-14 07:36:46

标签: kubernetes portforwarding minikube

我在本地计算机上使用minikube。使用kubernetes端口转发时出现此错误。有人可以帮忙吗?

mjafary$ kubectl port-forward  sa-frontend 88:80

Unable to listen on port 88: All listeners failed to create with the following errors: 
Unable to create listener: Error listen tcp4 127.0.0.1:88: bind: permission denied, Unable to create listener: Error listen tcp6 [::1]:88: bind: permission denied
error: Unable to listen on any of the requested ports: [{88 80}] 

5 个答案:

答案 0 :(得分:3)

kubectl无法打开端口88,因为它是特权端口。所有<1024端口都需要特殊权限。

有很多方法可以解决您的问题。

  • 您可以坚持使用端口> = 1024,并使用端口8888代替88:kubectl port-forward sa-frontend 8888:80
  • 您可以将kubectl用作root:sudo kubectl port-forward sa-frontend 88:80(不建议,然后kubectl会以root身份查找其配置)
  • 您可以授予kubectl二进制文件打开特权端口的功能。 This answer深入说明了操作方法。

如果您想使用第三个选项,这是一种简单的方法:

sudo setcap CAP_NET_BIND_SERVICE=+eip /usr/bin/kubectl

这将使kubectl打开任何端口,同时仍以普通用户的权限运行。您可以使用

检查此方法是否有效
sudo getcap /usr/bin/kubectl 
/usr/bin/kubectl = cap_net_bind_service+eip

请注意,这会将权限授予使用二进制文件的任何人。如果您希望获得更细粒度的权限,请使用authbind。

答案 1 :(得分:0)

可能是您的本地主机-当需要ipv4时,本地计算机正在使用ipv6。

  

错误监听 tcp4 127.0.0.1:88:绑定:权限被拒绝,无法执行   创建监听器:错误监听 tcp6 [:: 1]:88:绑定:权限   拒绝

请禁用IPv6。

您可以显示输出吗?:

cat /proc/sys/net/ipv6/conf/all/disable_ipv6

答案 2 :(得分:0)

我按如下方式尝试了sudo,这使我摆脱了权限拒绝问题。 sudo kubectl port-forward sa-frontend 88:80

我现在遇到了一个不同的问题,但是将为此创建一个新的跟踪器,以保持一切正常

答案 3 :(得分:0)

如果本地主机上的目标端口已在使用kubectl进行端口转发,则会收到权限拒绝错误。

确保您没有在端口88上运行的Docker容器或其他应用程序。

答案 4 :(得分:0)

As mentioned由user48678提供,您可以使用sudo绕过限制。

添加-E标志以通过环境。

mjafary$ sudo -E kubectl port-forward  sa-frontend 88:80

如果您不传递-E,则不会设置KUBECONFIG环境变量。