設定傳輸安全性

在 Kubernetes 工作負載的 Cloud Service Mesh 中,系統會預設啟用自動雙向 TLS (自動 mTLS)。透過自動 mTLS,用戶端 sidecar 代理程式會自動偵測伺服器是否有 sidecar。用戶端補充資訊會將 mTLS 傳送至含有補充資訊的工作負載,並將純文字傳送至不含補充資訊的工作負載。不過請注意,服務會接受純文字和 mTLS 流量。在 Pod 中插入附屬 Proxy 時,建議您也將服務設定為只接受 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

為每個工作負載啟用 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

尋找及刪除 PeerAuthentication 政策

如需服務中介網中的所有 PeerAuthentication 政策清單,請參閱:

kubectl get peerauthentication --all-namespaces

如果有有效的 PeerAuthentication 政策,您可以使用 kubectl delete 刪除該政策:

kubectl delete peerauthentication -n NAMESPACE AUTH_POLICY_NAME

後續步驟