Nginx Ingress阻止所有路径(/*),只允许某些特定路径(/code refiner/和/v1/unsubsc



我想创建一个nginx入口,它只允许用户连接和休息几个路径,或者提供403错误。有什么办法做到这一点吗?

我只希望用户允许连接"/代码细化器/"/v1/unsubscribed/*和rest都应该被阻止。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: code-refiner-service-ingress-external
namespace: backend
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
kubernetes.io/ingress.class: nginx-external
spec:
rules:
- host: code-refiner.example.com
http:
paths:
- backend:
service:
name: code-refiner-service
port:
number: 80
path: /
pathType: Prefix

我需要实现这样的

location /* {
deny all;
}
location /code-refiner/ or /v1/unsubscribed/{
allow all;
}

根据这个git链接,您可以创建两个入口,并且只将注释添加到具有要保护的路径的入口

  1. 对于您的问题,默认情况下首先创建两个入口,没有任何限制
  2. 然后,如文档中所述,为auth创建一个秘密。(创建htpasswd和secret(

创建htpasswd

$ htpasswd -c auth foo 
New password: <bar> 
New password: 
Re-type new password: 
Adding password for user foo

创建秘密:

kubectl create secret generic basic-auth --from-file=auth secret

3.对需要限制的路径使用auth的第二个入口。

kind: Ingress
apiVersion: extensions/v1beta1
metadata:
annotations:
kubernetes.io/ingress.class: nginx
ingress.kubernetes.io/rewrite-target: /
kubernetes.io/tls-acme: true
# type of authentication
ingress.kubernetes.io/auth-type: basic
# name of the secret that contains the user/password definitions
ingress.kubernetes.io/auth-secret: basic-auth
# message to display with an appropiate context why the authentication is required
ingress.kubernetes.io/auth-realm: "Authentication Required - foo"
# Below configuration-snippet is to pass on the authenticated user-name to serviceB
ingress.kubernetes.io/configuration-snippet: |
proxy_set_header X-AUTH-USER $remote_user;
name: my-nginx-ingress-auth
spec:
tls:    
hosts:
myhost
secretName: mysecret
rules:
host: myhost
http:
paths:
path: /serviceB/
backend:
serviceName: serviceB-service
servicePort: 7070

添加这些堆栈链接[1][2]供您参考。

第二个是使用ConfigMaps和服务器片段:

您要做的是定位您的configMap:

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

这是位于容器args:

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

然后只需编辑它并放置添加服务器片段部分

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

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

请注意,使用服务器片段时,无法在ingress资源对象中定义您正在阻止的路径。然而,通过ConfigMap获取位置片段还有另一种方法:

location ~* "^/web/admin { 
deny all; 
}

对于ingress对象中的每个现有路径,都会有ingress规则,但对于特定的uri,它会被阻止(在上面的例子中,当admin出现在web之后时,它会受到阻止(。所有其他uri都将通过。

相关内容

  • 没有找到相关文章

最新更新