設定傳輸安全性

您可以強制執行嚴格的相互傳輸層安全標準 (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 流量,匯總工作負載層級政策。您必須設定目的地規則,才能管理這項行為。

  1. 將驗證政策套用至命名空間中的特定工作負載:

    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
  2. 設定相符的目的地規則:

    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,明確定義用戶端的行為和伺服器的需求。

概念總覽

  1. 伺服器端:使用 PeerAuthentication 資源設定伺服器端 Proxy 預設值。
  2. 用戶端方法:您可以使用 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

後續步驟