local cjson = require "cjson"
local status=""
local headers=ngx.req.get_headers()
local source_ips=headers["x-forwarded-for"]
if source_ips ~= "111.222.333.444, 555.666.777.888" then
status="NOT_ALLOWED"
end
if status ~= "" then
ngx.status = ngx.HTTP_UNAUTHORIZED
ngx.header.content_type = "application/json; charset=utf-8"
ngx.say(cjson.encode({ status = "ERROR",message=status.."YOUR_MESSAGE" }))
return ngx.exit(ngx.HTTP_UNAUTHORIZED)
end
5条答案
按热度按时间yacmzcpb1#
在nginx-ingress中将源IP列入白名单的方法是使用下面的注解。
ingress.kubernetes.io/whitelist-source-range
但不幸的是,Google Cloud Load Balancer不支持AFAIK。
如果你正在使用nginx ingress控制器,你可以使用它。
注解的值可以是逗号分隔的CIDR范围。
关于白名单注解的更多信息。
Issue tracker,了解Google Cloud Load Balancer支持将源IP列入白名单的进展。
dly7yett2#
现在你可以使用
nginx.ingress.kubernetes.io/whitelist-source-range
,如下所示:https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/annotations/#whitelist-source-range您需要确保将外部IP转发到您的服务-https://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/#preserving-the-client-source-ip
如果您使用的是NGINX Ingress,请确保在您的ingress controllers服务上设置
externalTrafficPolicy: Local
。gojuced73#
您可以使用Cloud Armor,添加策略,创建允许/拒绝规则,然后只需在目标中附加k8s LB。
q9yhzks04#
GCP的防火墙规则不能应用于它与在GKE上创建的Ingress连接的全局负载均衡器。如果要将访问限制为仅访问特定的IP地址(例如:用户通过VPN连接,在这种情况下是VPN网关的IP地址),那么在GCP上就没有现成的解决方案,特别是GKE。
Nginx和Http header“x-forwarded-for”来救急
如果你使用的是GKE,那么很可能你有一个微服务架构,并且你使用的是API网关,很可能Nginx就是API网关。所有需要做的就是配置nginx只允许具有以下IP的请求
user.ext.static.ip→客户端公网IP
app.global.static.ip→ Ingress全局静态IP
nginx配置
validate_ip.lua
更多详情read here
ut6juiuv5#
你可以使用CORS,只允许来自前端的IP访问你的微服务。