設定傳輸安全性

設定傳輸安全性

在 Cloud Service Mesh 中,如果 Kubernetes 工作負載使用 Istio API,系統預設會啟用自動雙向 TLS (自動 mTLS)。透過自動 mTLS,用戶端 Sidecar Proxy 會自動偵測伺服器是否具有 Sidecar。用戶端補充資訊會將 mTLS 傳送至含有補充資訊的工作負載,並將純文字傳送至不含補充資訊的工作負載。但請注意,服務接受純文字和 mTLS 流量。將 Sidecar Proxy 注入 Pod 時,建議您也設定服務,只接受 mTLS 流量。

透過 Cloud Service Mesh,您可以套用 PeerAuthentication 政策,將服務設為只接受 mTLS。Cloud Service Mesh 可讓您彈性地將政策套用至整個服務網格、命名空間或個別工作負載。如果特定的工作負載已有指定的政策,則需以該項政策為準。舉例來說,工作負載專屬政策的優先度高於命名空間專屬政策。如果沒有為工作負載指定政策,工作負載就會繼承命名空間或網格的政策。

如要瞭解平台支援哪些 PeerAuthentication CR 欄位,請參閱「支援的功能」。

為每個命名空間啟用 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

為每個工作負載啟用雙向 TLS

如要為特定工作負載設定 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

後續步驟