我试图用“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: ["/*"]
那没有成功
就我目前的理解而言,我无法阻止一个 namespace 上的服务,
使用防火墙规则作为另一个命名空间上的istio(在不同ns中)的一部分。
我的问题是有可能这样做吗?

最佳答案


也许只是创建一个拒绝除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的相关文档:
  • https://istio.io/latest/docs/reference/config/security/authorization-policy/
  • https://istio.io/latest/docs/tasks/security/authorization/authz-http/
  • https://istio.io/latest/docs/tasks/security/authorization/authz-deny/

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

    07-24 09:32