在启用其他授权策略时启用对 Knative 服务的请求¶
Knative Serving 系统 Pod(如激活器和自动缩放器组件)需要访问您部署的 Knative 服务。如果您已配置其他安全功能(如 Istio 的授权策略),则必须为这些系统 Pod 启用对 Knative 服务的访问。
开始之前¶
您必须满足以下先决条件才能使用 Istio AuthorizationPolicy
Knative 中的双向 TLS¶
由于 Knative 请求经常通过激活器路由,因此在使用双向 TLS 时需要考虑一些因素。
通常,双向 TLS 可以像Istio 文档中那样正常配置。但是,由于激活器可能位于 Knative 服务的请求路径中,因此它必须注入侧车。最简单的方法是标记 knative-serving
命名空间
kubectl label namespace knative-serving istio-injection=enabled
如果激活器未注入
-
在 PERMISSIVE 模式下,您将看到请求出现,但没有预期的
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 模式下,请求将被直接拒绝。
要了解何时通过激活器转发请求,请参见目标突发容量 文档。
这也意味着许多 Istio AuthorizationPolicies 不会按预期工作。例如,如果您设置了一条规则,允许来自特定来源的请求进入 Knative 服务,那么如果您通过激活器转发这些请求,您将看到请求被拒绝。
例如,以下策略允许来自 serving-tests
命名空间中的 Pod 内部的请求到 serving-tests
命名空间中的其他 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"]
当通过激活器转发时,此处的请求将失败,因为目标服务的 Istio 代理会将请求的源命名空间视为 knative-serving
,这是激活器的命名空间。
目前,最简单的解决方法是明确允许来自 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
路径允许自动缩放器 Pod 收集指标。/healthz
路径允许系统 Pod 探测服务。
要将 /metrics
和 /healthz
路径添加到 AuthorizationPolicy
-
使用以下示例为您的 AuthorizationPolicy 创建一个 YAML 文件
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>
是您在上一步中创建的文件的名称。