【问题标题】:Kubernetes Port Forwarding - Error listen tcp4 127.0.0.1:88: bind: permission deniedKubernetes 端口转发 - 侦听 tcp4 127.0.0.1:88 时出错:绑定:权限被拒绝
【发布时间】:2019-05-15 11:09:41
【问题描述】:

我在本地机器上使用 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}] 

【问题讨论】:

  • 这可能是由于本地运行的端口与该端口转发冲突
  • 在使用 netstat 找到进程并使用 kill -9 命令杀死进程后工作!

标签: kubernetes portforwarding minikube


【解决方案1】:

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

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

请禁用 IPv6。

你能显示输出吗?:

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

【讨论】:

  • 这与ipv6无关。
【解决方案2】:

我按如下方式尝试了 sudo,它让我通过了权限被拒绝的问题。 sudo kubectl port-forward sa-frontend 88:80

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

【讨论】:

    【解决方案3】:

    kubectl 无法打开端口 88,因为它是一个特权端口。所有端口

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

    • 您可以坚持使用端口 >= 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 深入解释了如何做到这一点。

    如果您想选择第 3 个选项,这里有一个简短的方法:

    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。

    注意:作为ng-sek-longcommented,kubectl不一定安装为/usr/bin/kubectl。您应该将其替换为您机器上的 kubectl 二进制文件的路径。

    【讨论】:

    • 只是添加一个注释 /usr/bin/kubectl 可能并不总是正确的路径(例如我的安装在 /usr/local/bin/kubectl 上),使用快速 whereis kubectl 将能够识别您的 kubectl 二进制位置,干杯
    【解决方案4】:

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

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

    【讨论】:

      【解决方案5】:

      As mentioned by user48678 你可以使用sudo绕过限制。

      添加-E 标志以传递环境。

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-06-10
        • 1970-01-01
        • 2022-05-04
        • 2019-05-16
        • 2022-01-09
        • 2019-07-08
        相关资源
        最近更新 更多