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

Jaf*_*Jaf 4 portforwarding kubernetes 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}] 
Run Code Online (Sandbox Code Playgroud)

use*_*678 8

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二进制文件打开特权端口的功能。该答案深入说明了如何执行此操作。

如果您想使用第三个选项,可以通过以下简单方法:

sudo setcap CAP_NET_BIND_SERVICE=+eip /usr/bin/kubectl
Run Code Online (Sandbox Code Playgroud)

这将允许kubectl打开任何端口,同时仍以普通用户的权限运行。您可以使用以下方法检查是否可行

sudo getcap /usr/bin/kubectl 
/usr/bin/kubectl = cap_net_bind_service+eip
Run Code Online (Sandbox Code Playgroud)

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


Jos*_*das 8

正如user48678 所提到的,您可以使用绕过限制sudo

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

mjafary$ sudo -E kubectl port-forward  sa-frontend 88:80
Run Code Online (Sandbox Code Playgroud)

例如,如果不传递-EKUBECONFIG则不会设置环境变量。


小智 -3

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

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

请禁用 IPv6。

你能显示输出吗?:

cat /proc/sys/net/ipv6/conf/all/disable_ipv6
Run Code Online (Sandbox Code Playgroud)

  • 这与ipv6无关。 (2认同)