具有不同名称空间的k8s istio系统防火墙

问题描述

我试图用“ istio-system” ns在k8s istio中创建防火墙规则,
我在不同的ns内都有服务。
我需要使用istio ingress创建防火墙规则,该规则会阻止除“ 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内)的一部分。
我的问题是可以这样做吗?如果可以,怎么办?

解决方法

我需要使用istio ingress创建防火墙规则,以阻止除“ 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的相关文档:


让我知道您是否还有其他问题。

,

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

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

例如(在底部代码中)-我将istio-系统名称空间和服务放在同一命名空间下的示例-仍然无法阻止不是来自我的命名空间中服务的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"]

预期的行为:
不在我的命名空间中的发布请求将被阻止
当前行为:
什么都没有被阻止

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...