This commit is contained in:
80
网关/Ingress/Ingress限制IP访问.md
Normal file
80
网关/Ingress/Ingress限制IP访问.md
Normal file
@@ -0,0 +1,80 @@
|
||||
> 本文作者:丁辉
|
||||
|
||||
# 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`
|
||||
Reference in New Issue
Block a user