K3S自带的Traefik Ingress转发,后端API接口获取到的是K3S Node的IP,而不是客户端正确IP,我的Traefik没修改过配置文件,Service配置的ClusterIP
我的后端获取IP的逻辑:
public static String getClientIP(HttpServletRequest request, String... otherHeaderNames) {
String[] headers = new String[]{"X-Forwarded-For", "X-Real-IP", "Proxy-Client-IP", "WL-Proxy-Client-IP", "HTTP_CLIENT_IP", "HTTP_X_FORWARDED_FOR"};
if (ArrayUtil.isNotEmpty(otherHeaderNames)) {
headers = (String[])ArrayUtil.addAll(new String[][]{headers, otherHeaderNames});
}
return getClientIPByHeader(request, headers);
}
public static String getClientIPByHeader(HttpServletRequest request, String... headerNames) {
for(String header : headerNames) {
String ip = request.getHeader(header);
if (!NetUtil.isUnknown(ip)) {
return NetUtil.getMultistageReverseProxyIp(ip);
}
}
String ip = request.getRemoteAddr();
return NetUtil.getMultistageReverseProxyIp(ip);
}
项目直接部署的话,IP获取的是正确的,但在k8s上就有这个问题