反向代理报错bind: operation not permit

2024-11-26  本文已影响0人  wwq2020

背景

自己编写的一个替代nginx的简单反向代理服务,以hostnetwork的daemonset运行在k8s集群中,在转发给后端时候指定了clientip,而port为0,类似如下

    localAddr, err := net.ResolveTCPAddr("tcp", "clientip:0")
    if err != nil {
        panic(err)
    }
    dialer := &net.Dialer{
        LocalAddr: localAddr,
    }
    transport := &http.Transport{
        DialContext: func(ctx context.Context, network, addr string) (net.Conn, error) {
            return dialer.DialContext(ctx, network, addr)
        },
    },


现象

此反向代理的客户端反馈偶现502,但是查看日志没看到后端返回502状态码的日志,看到了会引起502的错误日志

bind: operation not permitted

排查

查看apiserver的node-port-range配置(没有配置的话默认是30000-32767)

kubectl  get pod -n kube-system kube-apiserver-xxx -o yaml|grep service-node-port-range

查看ip_local_port_range配置

cat /proc/sys/net/ipv4/ip_local_port_range

检查node-port-range是不是全在ip_local_reserved_port_range中(在则不和ip_local_port_range冲突)

cat /proc/sys/net/ipv4/ip_local_reserved_ports

最中发现两者有交叉且且node-port-range有部分不在ip_local_reserved_ports中

解决

echo 'net.ipv4.ip_local_port_range="32768 65535"' >> /etc/sysctl.conf
sysctl -p
上一篇 下一篇

猜你喜欢

热点阅读