當啟用額外授權原則時,啟用對 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 的請求傳送到 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"]
當由 activator 轉發時,這裡的請求將會失敗,因為目的地服務的 Istio Proxy 會將請求的來源命名空間視為 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
-
使用以下範例為您的 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>
是您在上一步驟中建立的檔案名稱。