【问题标题】:How to forward privileged ports with Skaffold如何使用 Skaffold 转发特权端口
【发布时间】:2021-10-10 14:17:21
【问题描述】:

如何使Skaffold 转发编号低于1024 的特权/受保护/特殊端口?在我的skaffold.yaml 中我添加了:

portForward:
- resourceType: service
  resourceName: foo
  port: 80
  localPort: 80

它适用于所有未受保护的端口,但在端口 80 的情况下,Skaffold 会自动选择另一个未受保护的端口而不是 80

根据文档Skaffold 在每个用户定义的端口上运行kubectl port-forward,因此我授予kubectl 二进制文件使用此命令sudo setcap CAP_NET_BIND_SERVICE=+eip /path/to/kubectl 打开特权端口的能力。

直接运行kubectl port-forward services/foo 80:80 时一切正常,但当我运行skaffold dev --port-forward 时,它仍然选择另一个未受保护的端口。

我一直在 Ubuntu 20.04 上使用 Skaffold v1.28.1Minikube v1.22.0

【问题讨论】:

    标签: kubernetes portforwarding skaffold


    【解决方案1】:

    我通过授予为 skaffoldkubectl 二进制文件打开特权端口的能力解决了这个问题:

    sudo setcap CAP_NET_BIND_SERVICE=+eip /usr/local/bin/kubectl;
    sudo setcap CAP_NET_BIND_SERVICE=+eip /usr/local/bin/skaffold;
    

    【讨论】:

      【解决方案2】:

      这应该可行。我们更改了 Skaffold 的行为,以防止它分配系统端口 (≤ 1024),但仍会使用显式 localPorts 的用户定义端口转发。

      您没有说您看到分配了哪些端口,但我怀疑它们是端口 4503–4533,您在其中遇到了错误 (#6312)。此错误现已修复,并将在下一个版本中发布。您还可以使用从 HEAD 构建的“前沿”构建:installation instructions 提供了获取这些预构建二进制文件的详细信息。

      【讨论】:

      • 是的,这些端口以 4503 开头。谢谢你的回答,我快疯了。
      • 我刚刚尝试使用Skaffold v1.33.0,但我仍然遇到同样的问题。还有其他建议吗?
      • 检查lsof -P +c0 -iTCP -sTCP:LISTEN的输出,它会显示当前打开监听端口的进程,看看是否有任何东西在监听80端口。如果没有,请在github.com/GoogleContainerTools/skaffold/issues/new上打开一个问题并包括使用-vtrace运行的日志,将输出有关分配本地端口的附加信息。
      • 请注意:由于您在 Ubuntu 上运行,因此访问端口
      • 是的,它是关于 root 权限的。我通过授予为skaffoldkubectl 二进制文件打开特权端口的能力解决了这个问题,而不仅仅是kubectl。感谢您的帮助。
      猜你喜欢
      • 1970-01-01
      • 2018-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多