当启用额外的授权策略时,允许对 Knative 服务的请求¶
Knative Serving 系统 Pod,例如 activator 和 autoscaler 组件,需要访问您部署的 Knative 服务。如果您配置了额外的安全功能,例如 Istio 的授权策略,则必须允许这些系统 Pod 访问您的 Knative 服务。
准备工作¶
您必须满足以下先决条件才能使用 Istio AuthorizationPolicy
Knative 中的双向 TLS¶
由于 Knative 请求经常通过 activator 路由,在使用双向 TLS 时需要考虑一些事项。

通常,双向 TLS 可以按照 Istio 文档 中的方式正常配置。但是,由于 activator 可能在 Knative 服务的请求路径中,因此必须注入 sidecar。最简单的方法是标记 knative-serving 命名空间
kubectl label namespace knative-serving istio-injection=enabled
如果 activator 未注入
-
在 PERMISSIVE 模式下,当请求由 activator 转发时,您会发现请求缺少预期的
X-Forwarded-Client-Cert标头。$ kubectl exec deployment/httpbin -c httpbin -it -- curl -s http://httpbin.knative.svc.cluster.local/headers { "headers": { "Accept": "*/*", "Accept-Encoding": "gzip", "Forwarded": "for=10.72.0.30;proto=http", "Host": "httpbin.knative.svc.cluster.local", "K-Proxy-Request": "activator", "User-Agent": "curl/7.58.0", "X-B3-Parentspanid": "b240bdb1c29ae638", "X-B3-Sampled": "0", "X-B3-Spanid": "416960c27be6d484", "X-B3-Traceid": "750362ce9d878281b240bdb1c29ae638", "X-Envoy-Attempt-Count": "1", "X-Envoy-Internal": "true" } } -
在 STRICT 模式下,请求将被拒绝。
要了解请求何时通过 activator 转发,请参阅 目标突发容量 文档。
这也意味着许多 Istio AuthorizationPolicies 将无法按预期工作。例如,如果您设置了一个规则,允许来自特定源的请求进入 Knative 服务,当请求由 activator 转发时,您会看到请求被拒绝。
例如,以下策略允许来自 serving-tests 命名空间中 Pod 的请求访问同一命名空间中的其他 Pod。
apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
name: allow-serving-tests
namespace: serving-tests
spec:
action: ALLOW
rules:
- from:
- source:
namespaces: ["serving-tests"]
当请求由 activator 转发时,这里的请求将失败,因为目标服务的 Istio 代理会看到请求的源命名空间是 knative-serving,这是 activator 的命名空间。
目前,最简单的解决方法是显式允许来自 knative-serving 命名空间的请求,例如通过将其添加到前面提到的策略的列表中。
apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
name: allow-serving-tests
namespace: serving-tests
spec:
action: ALLOW
rules:
- from:
- source:
namespaces: ["serving-tests", "knative-serving"]
健康检查和指标收集¶
除了允许您的应用程序路径外,您还需要配置 Istio AuthorizationPolicy 以允许系统 Pod 对您的应用程序进行健康检查和指标收集。您可以通过路径允许来自系统 Pod 的访问。
允许来自系统 Pod 的通过路径访问¶
Knative 系统 Pod 使用以下路径访问您的应用程序
/metrics/healthz
/metrics 路径允许 autoscaler Pod 收集指标。/healthz 路径允许系统 Pod 探测服务。
要将 /metrics 和 /healthz 路径添加到 AuthorizationPolicy
-
使用以下示例创建一个 YAML 文件作为您的 AuthorizationPolicy
apiVersion: security.istio.io/v1beta1 kind: AuthorizationPolicy metadata: name: allowlist-by-paths namespace: serving-tests spec: action: ALLOW rules: - to: - operation: paths: - /metrics # The path to collect metrics by system pod. - /healthz # The path to probe by system pod. -
通过运行命令应用 YAML 文件
其中kubectl apply -f <filename>.yaml<filename>是您在上一步中创建的文件的名称。