設定傳輸安全性
您可以強制執行嚴格的相互傳輸層安全標準 (mTLS),透過 Istio API 保護 Cloud Service Mesh 中的服務間流量。在 Kubernetes 工作負載中,系統預設會啟用自動 mTLS:用戶端 Sidecar Proxy 會自動將 mTLS 流量傳送至 Sidecar,但目的地服務仍會接受純文字和加密要求。
PeerAuthentication 政策可讓您限制服務,只接受 mTLS。您可以將政策套用至整個網格、特定命名空間或個別工作負載。如要瞭解各平台支援的欄位,請參閱「支援的功能」。
為每個命名空間啟用 mTLS
如要為特定命名空間中的所有工作負載啟用 mTLS,請使用命名空間層級的驗證政策。您可以在 metadata 下方指定適用的命名空間。
kubectl apply -f - <<EOF
apiVersion: "security.istio.io/v1beta1"
kind: "PeerAuthentication"
metadata:
name: "AUTH_POLICY_NAME"
namespace: "NAMESPACE"
spec:
mtls:
mode: STRICT
EOF
預期的輸出內容:
peerauthentication.security.istio.io/AUTH_POLICY_NAME created
為各項工作負載啟用 mTLS
如要為特定工作負載設定 PeerAuthentication 政策,您必須設定 selector 區段,並指定與目標工作負載相符的標籤。不過,Cloud Service Mesh 無法針對傳出至服務的 mTLS 流量,匯總工作負載層級政策。您必須設定目的地規則,才能管理這項行為。
將驗證政策套用至命名空間中的特定工作負載:
cat <<EOF | kubectl apply -n NAMESPACE -f - apiVersion: "security.istio.io/v1beta1" kind: "PeerAuthentication" metadata: name: "AUTH_POLICY_NAME" namespace: "NAMESPACE" spec: selector: matchLabels: app: WORKLOAD mtls: mode: STRICT EOF預期輸出內容:
peerauthentication.security.istio.io/AUTH_POLICY_NAME created
設定相符的目的地規則:
cat <<EOF | kubectl apply -n NAMESPACE -f - apiVersion: "networking.istio.io/v1alpha3" kind: "DestinationRule" metadata: name: "DEST_RULE_NAME" spec: host: "WORKLOAD.NAMESPACE.svc.cluster.local" trafficPolicy: tls: mode: ISTIO_MUTUAL EOF預期輸出內容:
destinationrule.networking.istio.io/WORKLOAD created
強制執行網格層級 mTLS
如要防止網格中的所有服務接受純文字流量,請設定網格層級的 PeerAuthentication 政策,並將 mTLS 模式設為 STRICT (預設為 PERMISSIVE)。網格層級的 PeerAuthentication 政策不應有選取器,且必須在根命名空間 istio-system 中套用。部署政策時,控制層會自動佈建 TLS 憑證,讓工作負載可以互相驗證。
如要強制執行網格範圍的 mTLS,請按照下列步驟操作:
kubectl apply -f - <<EOF
apiVersion: "security.istio.io/v1beta1"
kind: "PeerAuthentication"
metadata:
name: "AUTH_POLICY_NAME"
namespace: "istio-system"
spec:
mtls:
mode: STRICT
EOF
預期的輸出內容:
peerauthentication.security.istio.io/AUTH_POLICY_NAME created
停用代管 CSM 的 mTLS
Cloud Service Mesh 不支援 PeerAuthentication 資源中的 mtls.mode: DISABLE 值。
如要在 Cloud Service Mesh 中成功停用 mTLS,您必須使用 DestinationRule API,明確定義用戶端的行為和伺服器的需求。
概念總覽
- 伺服器端:使用
PeerAuthentication資源設定伺服器端 Proxy 預設值。 - 用戶端方法:您可以使用
DestinationRule資源,明確指示用戶端 Proxy 在與特定伺服器通訊時使用明文。
範例
步驟 1:設定 PeerAuthentication
在本範例中,我們將使用預設政策 PERMISSIVE,因此不需要明確定義政策。
步驟 2:設定用戶端 DestinationRule
這項設定會指示用戶端在呼叫 httpbin 時使用純文字。
apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
name: "DEST_RULE_NAME"
namespace: sample-namespace
spec:
host: "WORKLOAD.NAMESPACE.svc.cluster.local"
trafficPolicy:
tls:
mode: DISABLE
尋找並刪除 PeerAuthentication 政策
如要列出服務網格中的所有 PeerAuthentication 政策,請執行下列指令:
kubectl get peerauthentication --all-namespaces
如果 PeerAuthentication 政策已生效,您可以使用 kubectl delete 刪除該政策:
kubectl delete peerauthentication -n NAMESPACE AUTH_POLICY_NAME