Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
阻止入口nginx负载平衡器上的特定路径_Nginx_Kubernetes_Kubernetes Ingress_Nginx Ingress - Fatal编程技术网

阻止入口nginx负载平衡器上的特定路径

阻止入口nginx负载平衡器上的特定路径,nginx,kubernetes,kubernetes-ingress,nginx-ingress,Nginx,Kubernetes,Kubernetes Ingress,Nginx Ingress,我有许多指向入口控制器IP的域。我想阻止所有域/站点的特定路径。有没有办法做到这一点。 我可以为每个站点使用nginx.ingres.kubernetes.io/configuration-snippet:|。但正在寻找一种方法来同时处理所有站点/域/入口资源 使用的控制器:您可以使用入口注释应用它 apiVersion: extensions/v1beta1 kind: Ingress metadata: annotations: cert-manager.io/cluster-i

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


使用的控制器:

您可以使用入口注释应用它

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    cert-manager.io/cluster-issuer: channel-dev
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/whitelist-source-range: "27.110.30.45, 68.50.85.421"
  name: dev-ingress
  namespace: development
spec:
  rules:
  - host: hooks.dev.example.com
    http:
      paths:
      - backend:
          serviceName: hello-service
          servicePort: 80
        path: /incoming/message/
  tls:
  - hosts:
    - hooks.dev.example.com
    secretName: channel-dev
路径<代码>https://hooks.dev.example.com/incoming/message/只能从上述IP访问,其他用户将收到403错误,无法访问URL

只需在ingress中添加此注释

nginx.ingress.kubernetes.io/whitelist-source-range

可以使用入口注释应用它

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    cert-manager.io/cluster-issuer: channel-dev
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/whitelist-source-range: "27.110.30.45, 68.50.85.421"
  name: dev-ingress
  namespace: development
spec:
  rules:
  - host: hooks.dev.example.com
    http:
      paths:
      - backend:
          serviceName: hello-service
          servicePort: 80
        path: /incoming/message/
  tls:
  - hosts:
    - hooks.dev.example.com
    secretName: channel-dev
路径<代码>https://hooks.dev.example.com/incoming/message/只能从上述IP访问,其他用户将收到403错误,无法访问URL

只需在ingress中添加此注释

nginx.ingress.kubernetes.io/whitelist-source-range

不能阻止特定路径。您可以做的是将入口内的主机路径指向一个默认backedn应用程序,例如404 default backedn。

您不能阻止特定路径。您可以做的是将入口内的主机路径指向一个默认backedn应用程序,例如404 default backedn。

有两种方法可以实现这一点:

1。第一个是使用
server snippet
annotation:

使用注释
nginx.ingres.kubernetes.io/server snippet
it 可以在服务器配置中添加自定义配置 街区

这是我的入口对象清单:

apiVersion:networking.k8s.io/v1beta1 种类:入口 元数据: 名称:最小入口 注释: nginx.ingres.kubernetes.io/server-snippet:| 位置~*/admin访问权限{ 否认一切; 返回403; } 规格: 规则: -主持人:domain.com http: 路径: -路径:/ 后端: 服务名称:web 服务端口:80 请注意,使用以下方法:

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


2。第二个是使用and:

您需要做的是找到您的
configMap

 kubectl get pod <nginx-ingress-controller>  -o yaml
然后只需编辑它并添加
服务器代码段
部分:

apiVersion:v1 数据: 服务器代码段:| 位置/管理员访问{ 否认一切; } 这种方法允许您为入口资源中定义的所有主机全局定义受限位置


请注意,使用
server snippet
时,无法在入口资源对象中定义要阻止的路径。但是,通过
ConfigMap
使用
位置片段还有另一种方法:

 kubectl get pod <nginx-ingress-controller>  -o yaml
location~*”^/web/admin{
否认一切;
}
对于ingress对象中的每个现有路径,都将有ingress规则,但它将被特定uri阻止(在上面的示例中,当
admin
出现在
web
之后时,它将被阻止)。所有其他uri都将被传递


3.这里有一个测试:

➜  curl-H“Host:domain.com”172.17.0.4/test
...
“路径”:“/测试”,
“标题”:{
...
},
“方法”:“获取”,
“正文”:“,
“新鲜”:假,
“主机名”:“domain.com”,
“ip”:“172.17.0.1”,
“ips”:[
"172.17.0.1"
],
“协议”:“http”,
“查询”:{},
“子域”:[],
“xhr”:错误,
“操作系统”:{
“主机名”:“web-6b686fdc7d-4pxt9”
...  
这是一个路径被拒绝的测试:

➜  curl-H“Host:domain.com”172.17.0.4/admin-access
403禁止
403禁止

nginx/1.19.0 ➜ curl-H“Host:domain.com”172.17.0.4/admin-access/test 403禁止 403禁止
nginx/1.19.0

其他信息:。以下是您需要了解的内容:

v1.22版本将停止提供以下不推荐使用的API 支持更新和更稳定API版本的版本:

extensions/v1beta1 API版本中的入口将不再是 服务


有两种方法可以实现这一点:

1.第一个是使用
server snippet
annotation:

使用注释
nginx.ingres.kubernetes.io/server snippet
it 可以在服务器配置中添加自定义配置 街区

这是我的入口对象清单:

apiVersion:networking.k8s.io/v1beta1 种类:入口 元数据: 名称:最小入口 注释: nginx.ingres.kubernetes.io/server-snippet:| 位置~*/admin访问权限{ 否认一切; 返回403; } 规格: 规则: -主持人:domain.com http: 路径: -路径:/ 后端: 服务名称:web 服务端口:80
请注意,使用以下方法:

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


2.第二个是使用and:

您需要做的是找到您的
configMap

 kubectl get pod <nginx-ingress-controller>  -o yaml
然后只需编辑它并添加
服务器代码段
部分:

apiVersion:v1 数据: 服务器代码段:| 位置/管理员访问{ 否认一切; } 这种方法允许您为入口资源中定义的所有主机全局定义受限位置


请注意,使用
server snippet
时,无法在ingress资源对象中定义要阻止的路径。但是,通过
ConfigMap
使用
位置snippet
还有另一种方法:

 kubectl get pod <nginx-ingress-controller>  -o yaml
location~*”^/web/admin{
否认一切;
}
对于ingress对象中的每个现有路径,都将有ingress规则,但它将针对特定uri被阻止(在上面的示例中,它将被阻止)