如何解决具有不同名称空间的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的相关文档:
- 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/
让我知道您是否还有其他问题。
,我的目标是运行一个防火墙,该防火墙将阻止来自不在我组织名称空间下的服务的所有请求。
例如:如果我组织的服务在名为“ 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"]
预期的行为:
不在我的命名空间中的发布请求将被阻止
当前行为:
什么都没有被阻止
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。