【问题标题】:RKE2 ingress-nginx bind-address: port 80 is already in useRKE2 ingress-nginx bind-address: port 80 is already in use
【发布时间】:2023-02-07 14:01:50
【问题描述】:

我正在尝试绑定 RKE2,包括。在具有(Docker)Nginx 侦听另一个地址/接口的机器上的特定地址192.168.3.3 上的ingress-nginx。

全新安装 RKE2 后,在 /usr/local/lib/systemd/system/rke2-server.service 中我设置(首次启动前):

ExecStart=/usr/local/bin/rke2 server --bind-address 192.168.3.3 --node-ip 192.168.3.3 --node-external-ip 192.168.3.3

RKE2 启动正常,除了 rke2-ingress-nginx-controller 失败:

F0220 21:56:00.703309       8 main.go:67] port 80 is already in use. Please check the flag --http-port

貌似是绑定到0.0.0.0和其他Nginx的80端口冲突,所以我把bind-address设置在/var/lib/rancher/rke2/server/manifests/rke2-ingress-nginx-config.yaml

apiVersion: helm.cattle.io/v1
kind: HelmChartConfig
metadata:
  name: rke2-ingress-nginx
  namespace: kube-system
spec:
  valuesContent: |-
    controller:
      config:
        bind-address: "192.168.3.3"

这会按预期影响nginx.conf

listen 192.168.3.3:80 default_server reuseport backlog=511 ;
listen [::]:80 default_server reuseport backlog=511 ;
listen 192.168.3.3:443 default_server reuseport backlog=511 ssl http2 ;
listen [::]:443 default_server reuseport backlog=511 ssl http2 ;

但控制器仍然失败并显示port 80 is already in use。 我从吊舱检查:

bash-4.4$ curl -v 192.168.3.3
* Rebuilt URL to: 192.168.3.3/
*   Trying 192.168.3.3...
* TCP_NODELAY set
* connect to 192.168.3.3 port 80 failed: Connection refused
* Failed to connect to 192.168.3.3 port 80: Connection refused
* Closing connection 0
curl: (7) Failed to connect to 192.168.3.3 port 80: Connection refused

80端口好像没用。我错过了什么?

编辑:

可以肯定的是,由于 ingress-nginx 控制器启用了 IPv6 并绑定到 [::],我在 rke2-ingress-nginx-config.yaml 中设置了 disable-ipv6: "true" 但这也没有帮助。

有趣的是,如果我停止其他 Nginx 监听另一个地址,控制器启动就好了。然后我可以再次启动另一个 Nginx,一切都很好。 所以也许有某种“未配置的”初始化容器监听所有地址,使控制器 pod 的整个启动失败?

【问题讨论】:

    标签: port nginx-ingress rke2


    【解决方案1】:

    对我来说,它在主机上用 sysctl -w net.ipv4.ip_unprivileged_port_start=1 修复了 要永久修复,请运行下面的脚本

    echo 'net.ipv4.ip_unprivileged_port_start = 1' > /etc/sysctl.d/ip_unprivileged_port_start.conf

    报错信息有误导性,其实是权限问题,不是端口绑定问题

    【讨论】: