【问题标题】:k8s istio-system firewall with different namespace具有不同命名空间的 k8s istio-system 防火墙
【发布时间】:2020-12-07 19:44:52
【问题描述】:

我尝试使用“istio-system”ns 在 k8s istio 中创建防火墙规则,
我在不同的 ns 中有服务。
我需要使用 istio 入口创建防火墙规则,以阻止除“POST”请求之外的所有请求。 我试图像这样在防火墙中创建新规则:

apiVersion: security.istio.io/v1beta1 
kind: AuthorizationPolicy 
metadata: 
   name: deny-all
   namespace: istio-system  
spec: 
  {}

这确实阻止了所有请求,之后我尝试应用此规则:

apiVersion: security.istio.io/v1beta1 
kind: AuthorizationPolicy 
metadata:  
  name: httpbin   
  namespace: test 
spec:  
  action: ALLOW  
  selector:    
    matchLabels: 
      app: test  
 rules:    
   to:
    - operation:
        hosts: ["https://ABCD.xxx.ddd"]
        methods: ["POST"]
        paths: ["/*"]

那没有成功
据我目前的理解,我不能阻止一个命名空间上的服务,
使用防火墙规则作为 istio 的一部分(在不同的 ns 中),它位于另一个命名空间上。
我的问题是有可能做到这一点,如果可以,怎么做?

【问题讨论】:

    标签: kubernetes google-cloud-platform firewall istio


    【解决方案1】:

    我需要使用 istio 入口创建防火墙规则,以阻止除“POST”请求之外的所有请求

    也许只创建一个授权策略,拒绝除 POST 之外的每一个?


    我做了一个例子,它只允许 GET 请求并拒绝休息。看看吧。

    apiVersion: security.istio.io/v1beta1
    kind: AuthorizationPolicy
    metadata:
      name: httpbin
      namespace: istio-system
    spec:
      action: DENY
      selector:
        matchLabels:
          istio: ingressgateway
      rules:
      - to:
        - operation:
            methods: ["POST", "HEAD", "PUT", "DELETE", "CONNECT", "OPTIONS", "TRACE", "PATCH"]
    

    还有一些测试

    root@httpbin-779c54bf49-s6g6r:/# curl http://xx.xx.xxx.xxx/productpage -X GET -s -o /dev/null -w "%{http_code}\n"
    200
    root@httpbin-779c54bf49-s6g6r:/# curl http://xx.xx.xxx.xxx/productpage -X POST -s -o /dev/null -w "%{http_code}\n"
    403
    root@httpbin-779c54bf49-s6g6r:/# curl http://xx.xx.xxx.xxx/productpage -X PUT -s -o /dev/null -w "%{http_code}\n"
    403
    

    AuthorizationPolicy相关文档:


    如果您还有其他问题,请告诉我。

    【讨论】:

    • Istio 的最佳实践是拒绝所有,允许你想允许的。但是工作,当然。
    【解决方案2】:

    我的目标是运行防火墙来阻止来自不在我组织命名空间下的服务的所有请求。
    例如:如果我的组织的服务位于名为“test”的命名空间下,我希望阻止来自不属于该命名空间的地址的任何 http 请求。
    重点是: 包含我的防火墙的 istio 位于不同的命名空间下,这意味着它不在我组织的命名空间下。
    例如:istio 位于名为“istio-system”的命名空间下,而我的服务位于名为“test”的命名空间下。
    如何使用另一个命名空间下的防火墙阻止对我的服务的访问?
    注意:只是为了测试,我尝试将我的防火墙和我的服务放在同一个命名空间中,但仍然无法阻止对我的服务的访问。
    我在这里缺少什么,锻炼这种积木的最佳方法是什么?
    这个阻止了所有的http请求:

    apiVersion: security.istio.io/v1beta1 
    kind: AuthorizationPolicy 
    metadata: 
       name: deny-all
       namespace: istio-system  
    spec: 
      {}
    

    例如(在底部代码中) - 我将 istio-system 命名空间和服务放在同一个命名空间下的示例 - 仍然无法阻止不是来自我命名空间中的服务的 POST 请求:

    apiVersion: security.istio.io/v1beta1
    kind: AuthorizationPolicy
    metadata:
     name: http
     namespace: test
    spec:
     action: ALLOW
     selector:
       matchLabels:
         app: test
     rules:
     - from:
       - source:
           namespaces: ["test"]
       to:
       - operation:
           hosts: ["http://xxx.xxx.xxx"]
           methods: ["POST"]
    

    预期行为:
    不在我的命名空间中的发布请求将被阻止
    当前行为:
    没有任何内容被阻止

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-27
      • 1970-01-01
      • 1970-01-01
      • 2020-05-07
      相关资源
      最近更新 更多