【问题标题】:How to add blocking IP rules on each nginx-ingress host如何在每个 nginx-ingress 主机上添加阻止 IP 规则
【发布时间】:2020-02-12 16:09:48
【问题描述】:

我搜索了很多,但没有找到解决方案。我想阻止/允许 ip 进入 nginx-ingress 中的每个主机定义,而不是每个位置。

这是 ingress.yaml:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-nginx
  annotations:
    kubernetes.io/ingress.class: "nginx"
spec:
  rules:
  - host: test1.test.com
    #Blocking rules here, only affecting test1.test.com domain
    http:
      paths:
      - path: /
        backend:
          serviceName: wordpressA
          servicePort: 80
  - host: test2.test.com
    #Blocking rules here, only affecting test2.test.com domain
    http:
      paths:
      - path: /
        backend:
          serviceName: wordpressB
          servicePort: 80 

非常感谢您的宝贵时间

【问题讨论】:

    标签: nginx kubernetes-ingress nginx-ingress


    【解决方案1】:

    您需要将这些 host 定义拆分为单独的 ingress 规则。

    然后您可以使用以下annotationwhitelist source range 使用注释: nginx.ingress.kubernetes.io/whitelist-source-range

    类似这样的:

    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      name: app1-ingress
      annotations:
        kubernetes.io/ingress.class: "nginx"
        nginx.ingress.kubernetes.io/whitelist-source-range: "10.0.0.0/24"
    spec:
      rules:
      - host: app1.com
        http:
          paths:
          - path: /
            backend:
              serviceName: app1-service
              servicePort: http
    ---
    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      name: app2-ingress
      annotations:
        kubernetes.io/ingress.class: "nginx"
        nginx.ingress.kubernetes.io/whitelist-source-range: "10.0.0.0/24"
    spec:
      rules:
      - host: app2.com
        http:
          paths:
          - path: /
            backend:
              serviceName: app2-service
              servicePort: http
    

    您也可以使用server snipper 并将nginx 配置添加到yaml

    类似这样的:

    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      annotations:
        nginx.ingress.kubernetes.io/server-snippet: |
    location / {
      # block one workstation
      deny    192.168.1.1;
      # allow anyone in 192.168.1.0/24
      allow   192.168.1.0/24;
      # drop rest of the world 
      deny    all;
    }
    

    【讨论】:

    • 好的,我之前看过这个配置(使用不同的入口)但我们只想使用一个入口,两种解决方案都需要不同的入口定义。这是唯一的方法吗?
    • 拆分入口规则,会使用同一个LB入口吗?
    • 据我所知,这是唯一的解决方案。你用的是什么LB,是云还是MLB?
    • 嗨@Crou,谢谢,我使用云LB。是的,我尝试拆分配置,一切正常。非常感谢!
    • 仅供参考:如果您使用 HAProxy 作为入口(而不是像 OP 询问的那样使用 nginx),则有一个类似的 whitespace 注释:haproxy.org/whitelist: "192.168.1.0/24, 192.168.2.100"。见Ingress Options # whitelist | HAProxy Kubernetes Ingress Controller documentation
    猜你喜欢
    • 2022-08-09
    • 2020-04-27
    • 2019-01-15
    • 1970-01-01
    • 2018-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-06
    相关资源
    最近更新 更多