> 本文作者:丁辉 # Ingress限制IP访问 我们有时会遇到服务器请求过高疑似被攻击的情况,这时候我们就需要限制不知名IP的请求访问,本文记录如何配置全局 Ingress 配置限制某个IP访问的配置和验证过程。 ## 修改 Ingress 配置 我们需要找到 Ingress 的配置文件并修改它 ```bash kubectl get configmap -n ingress-nginx ``` 修改 ```bash kubectl edit configmap ingress-nginx-controller -n ingress-nginx ``` 添加如下内容 > 我们需要在 Nginx-Ingress 内使用 `http-snippet` 来配置限制。 > > NGINX 控制器只识别官方支持的配置项,比如: > > - `http-snippet` > - `server-snippet` > - `location-snippet` > - `use-forwarded-headers` > - `allow-snippet-annotations` > - 等等。 ```yaml data: http-snippet: | deny #需要限制的IP; deny 192.168.100.100; allow all; ``` **参数解释** | 指令 | 含义 | | :-----------------------: | :-----------------------------------------------: | | `deny 192.168.100.100;` | 拒绝来自该 IP 的访问 | | `allow 192.168.100.0/16;` | 允许来自该网段的访问 | | `allow all;` | 允许所有其他请求(即没有被前面的 deny 拦住的 IP) | ## 重启 NGINX Ingress Controller > 资源类型是 `daemonset` 或 `deployment` 这就需要看安装时选择的参数来确定了,因为许多环境都不同。 ```bash kubectl rollout restart daemonset ingress-nginx-controller -n ingress-nginx ``` ## 检查是否生效 ## 验证方案 ### 从被禁止的 IP 测试 假设你在某台机器(或 Pod)上模拟访问 ``` curl -I http://your-domain.com ``` 如果 IP 在 `deny` 列表中,应该返回 `HTTP/1.1 403 Forbidden` ### 从其他 IP 测试 使用不同 IP 的机器再访问一次 ``` curl -I http://your-domain.com ``` 应能正常访问 `HTTP/1.1 200 OK`