如何使用 Skaffold 转发特权端口

How to forward privileged ports with Skaffold

如何让 Skaffold 转发 privileged/protected/special 编号低于 1024 的端口?在我的 skaffold.yaml 中,我添加了:

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

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

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

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

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

这应该有效。我们更改了 Skaffold 的行为以防止它分配系统端口(≤ 1024),但用户定义的具有显式 localPorts 的端口转发仍将受到尊重。

你没有说你看到分配了哪些端口,但我怀疑它们是端口 4503–4533,你在其中遇到了一个错误(#6312). This bug is now fixed and will be in the next release. You can also use the "bleeding-edge" build which is built from HEAD: the installation instructions 有从哪里获取这些预分配器的详细信息-内置二进制文件。

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

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