我们正在将现有的k8s服务转换为使用istio & knative。服务接收来自外部用户的请求以及来自集群内部的请求。我们正在尝试设置Istio AuthorizationPolicy以实现以下要求:
某些路径(如docs/健康检查)不需要任何特殊的头或任何东西,必须可以从anywhere
knative-serving/knative-ingress-gateway )才能访问度量集合路径(基本上是通过knative-serving/knative-ingress-gateway),必须包含匹配预共享密钥
。
下面是我正在尝试的一个例子。我能让前3项要求生效,但不是最后一项.
apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
name: my-svc
namespace: my-ns
spec:
selector:
matchLabels:
serving.knative.dev/service: my-svc
action: "ALLOW"
rules:
- to:
- operation:
methods:
- "GET"
paths:
- "/docs"
- "/openapi.json"
- "/redoc"
- "/rest/v1/healthz"
- to:
- operation:
methods:
- "GET"
paths:
- "/healthz*"
- "/metrics*"
when:
- key: "request.headers[User-Agent]"
values:
- "Knative-Activator-Probe"
- "Go-http-client/1.1"
- to:
- operation:
paths:
- "/rest/v1/myapp*"
when:
- key: "request.headers[my-key]"
values:
- "asjhfhjgdhjsfgjhdgsfjh"
- from:
- source:
namespaces:
- "*"我们没有对istio关联设置默认提供的mTLS配置进行任何更改,因此假设mtls模式当前为PERMISSIVE。
技术栈涉及的详细信息
发布于 2022-02-15 14:37:23
我不是Istio专家,但是您可能能够基于入口网关(有一个只监听ClusterIP地址的入口网关)或基于集群中的SourceIP来表达最后的策略。对于后者,我想测试Istio使用的是实际的SourceIP,而不是在Forwarded报头的IP地址中替换(一种不同的合理配置)。
https://stackoverflow.com/questions/71125655
复制相似问题