阻止入口-nginx负载均衡器上的特定路径 [英] Block particular path on ingress-nginx Loadbalancer

查看:23
本文介绍了阻止入口-nginx负载均衡器上的特定路径的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有很多指向入口控制器IP的域。我想阻止所有域/站点的/特定路径。有没有办法做到这一点。 我可以为每个站点使用nginx.ingress.kubernetes.io/configuration-snippet: | 。但正在寻找一次处理所有站点/域/入口资源的方法。

使用的控制器:https://kubernetes.github.io/ingress-nginx/

推荐答案

有两种方法可以实现此目的:

1.第一个是使用server-snippet注释:

使用批注nginx.ingress.kubernetes.io/server-snippet它 可以在服务器配置中添加自定义配置 阻止。

这是我的入口对象清单:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: minimal-ingress
  annotations:
     nginx.ingress.kubernetes.io/server-snippet: |
          location ~* /admin-access {
              deny all;
              return 403;
            }
spec:
  rules:
  - host: domain.com
    http:
      paths:
      - path: /
        backend:
          serviceName: web 
          servicePort: 80

请注意,使用this方法:

此批注在每个主机上只能使用一次。


2.使用ConfigMapsServer-snippet

您要做的是找到您的configMap

 kubectl get pod <nginx-ingress-controller>  -o yaml

这位于容器args

  spec:
   containers:
   - args:
     -  /nginx-ingress-controller
     - configmap=$(POD_NAMESPACE)/nginx-loadbalancer-conf

然后只需编辑并添加server-snippet部分:

   apiVersion: v1 
   data:  
   server-snippet:  |
   location /admin-access {
   deny  all;
    }

此方法允许您为入口资源中定义的所有主机全局定义受限位置。


请注意,使用server-snippet时,无法在入口资源对象中定义要阻止的路径。但是,使用location-snippetVIAConfigMap还有另一种方法:

location ~* "^/web/admin { 
        deny all; 
        }
对于入口对象中的每个现有路径,都将有入口规则,但对于特定的URI,它将被阻止(在上面的示例中,当admin将出现在web之后时,它将被阻止)。将传递所有其他URI。


3.这是一个测试:

➜  curl -H "Host: domain.com"  172.17.0.4/test             
...
 "path": "/test",
 "headers": {
...
 },
 "method": "GET",
 "body": "",
 "fresh": false,
 "hostname": "domain.com",
 "ip": "172.17.0.1",
 "ips": [
   "172.17.0.1"
 ],
 "protocol": "http",
 "query": {},
 "subdomains": [],
 "xhr": false,
 "os": {
   "hostname": "web-6b686fdc7d-4pxt9"
...  

下面是一个测试,其路径已被拒绝:

➜  curl -H "Host: domain.com"  172.17.0.4/admin-access

<html>
<head><title>403 Forbidden</title></head>
<body>
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx/1.19.0</center>
</body>
</html>

➜  curl -H "Host: domain.com"  172.17.0.4/admin-access/test
<html>
<head><title>403 Forbidden</title></head>
<body>
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx/1.19.0</center>
</body>
</html>

其他信息:Deprecated APIs Removed In 1.16。以下是您需要知道的内容:

V1.22版本将停止为以下不推荐使用的API提供服务 支持更新且更稳定的API版本的版本:

扩展/v1beta1API版本中的入口将不再是 上菜

这篇关于阻止入口-nginx负载均衡器上的特定路径的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆