阻止 ingress-nginx 负载均衡器上的特定路径

Tek*_*ath 4 nginx kubernetes kubernetes-ingress nginx-ingress

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

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

aci*_*uji 5

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

\n

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

\n
\n

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

\n
\n

这是我的入口对象清单:

\n
apiVersion: networking.k8s.io/v1beta1\nkind: Ingress\nmetadata:\n  name: minimal-ingress\n  annotations:\n     nginx.ingress.kubernetes.io/server-snippet: |\n          location ~* /admin-access {\n              deny all;\n              return 403;\n            }\nspec:\n  rules:\n  - host: domain.com\n    http:\n      paths:\n      - path: /\n        backend:\n          serviceName: web \n          servicePort: 80\n
Run Code Online (Sandbox Code Playgroud)\n

请注意,使用 方法:

\n
\n

每个主机只能使用此注释一次。

\n
\n
\n

2. 第二个是使用ConfigMapsServer-snippet

\n

您要做的就是找到您的configMap

\n
 kubectl get pod <nginx-ingress-controller>  -o yaml\n
Run Code Online (Sandbox Code Playgroud)\n

这是容器的位置args

\n
 kubectl get pod <nginx-ingress-controller>  -o yaml\n
Run Code Online (Sandbox Code Playgroud)\n

然后编辑它并添加该server-snippet部分:

\n
  spec:\n   containers:\n   - args:\n     -  /nginx-ingress-controller\n     - configmap=$(POD_NAMESPACE)/nginx-loadbalancer-conf\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n
\n

server-snippet请注意,您阻止的路径的使用不能在入口资源对象中定义。location-snippet然而, via还有另一种方法ConfigMap

\n
   apiVersion: v1 \n   data:  \n   server-snippet:  |\n   location /admin-access {\n   deny  all;\n    }\n
Run Code Online (Sandbox Code Playgroud)\n

这样,对于入口对象中的每个现有路径,都会有入口规则,但对于特定的 uri,它将被阻止(在上面的示例中,当admin出现在 之后时,它将被阻止web)。所有其他 uri 都将被传递。

\n
\n

3. 这是一个测试:

\n
location ~* "^/web/admin { \n        deny all; \n        }\n
Run Code Online (Sandbox Code Playgroud)\n

这是一个已被拒绝的路径的测试:

\n
\xe2\x9e\x9c  curl -H "Host: domain.com"  172.17.0.4/test             \n...\n "path": "/test",\n "headers": {\n...\n },\n "method": "GET",\n "body": "",\n "fresh": false,\n "hostname": "domain.com",\n "ip": "172.17.0.1",\n "ips": [\n   "172.17.0.1"\n ],\n "protocol": "http",\n "query": {},\n "subdomains": [],\n "xhr": false,\n "os": {\n   "hostname": "web-6b686fdc7d-4pxt9"\n...  \n
Run Code Online (Sandbox Code Playgroud)\n
\n

其他信息:1.16 中删除了已弃用的 API。这里\xe2\x80\x99是你需要知道的:

\n
\n

v1.22 版本将停止提供以下已弃用的 API\n版本,转而使用更新且更稳定的 API 版本:

\n

将不再提供 Extensions/v1beta1 API 版本中的入口\n

\n
\n