Kubernetes 端口转发 - 错误监听 tcp4 127.0.0.1 :88: bind: permission denied

标签 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}] 

最佳答案

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

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

  • 您可以坚持使用 >= 1024 的端口,例如使用端口 8888 而不是 88:kubectl port-forward sa-frontend 8888:80
  • 您可以使用 kubectl作为根: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。

    关于Kubernetes 端口转发 - 错误监听 tcp4 127.0.0.1 :88: bind: permission denied,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53775328/

    相关文章:

    mysql - 从 minikube 访问在本地主机上运行的 mysql

    kubernetes - Kubernetes服务未获取其外部IP地址

    go - 如何创建基调服务

    kubernetes - Kubernetes上的ErrImagePull

    bash - 在具有 root 访问权限的 kubernetes pod 上执行命令

    google-chrome - 远程调试——如何创建端口代理?

    python - 如何在套接字之间正确中继 TCP 流量?

    ssh - 是否可以通过一个 ssh 连接进行多个端口转发?

    ssl - Kubernetes - Kubectl - 客户端数据的格式是什么?

    docker - 无法将python代码安装到本地kubernetes pod