運用 Istio Ingress 設定傳輸層安全標準 (TLS) 和 mTLS

本主題說明如何在 Istio ingress 上啟用單向 TLS 和 mTLS。

設定單向傳輸層安全標準 (TLS)

使用單向 TLS 保護 Istio 輸入端的 API Proxy 端點。如要啟用單向 TLS,請使用 TLS 憑證/金鑰組或 Kubernetes 機密資料設定 ingress,如以下選項所述。

方法 1:金鑰/憑證組合

在覆寫檔案的 virtualhosts 屬性中提供 SSL 憑證和金鑰檔案:

virtualhosts:
  - name: $ENVIRONMENT_GROUP_NAME
    sslCertPath: "$CERT_FILE"
    sslKeyPath: "$KEY_FILE"

其中 $ENVIRONMENT_GROUP_NAME 是環境群組的名稱,其中包含對應的主機別名,而 $CERT_FILE$KEY_FILE 則是 TLS 金鑰和憑證檔案。請參閱「建立傳輸層安全標準 (TLS) 憑證」一文。

選項 2:Kubernetes 密鑰

istio-system 命名空間中建立 Kubernetes 密鑰,並在覆寫檔案中加入密鑰名稱:

  1. 建立密鑰:
    kubectl create -n istio-system secret generic $SECRET_NAME  \
    --from-file=key=$KEY_FILE \
    --from-file=cert=$CERT_FILE
  2. 在覆寫檔案中設定 virtualhosts 屬性:
    virtualhosts:
      - name: $ENVIRONMENT_GROUP_NAME
        tlsMode: SIMPLE  # Note: SIMPLE is the default, so it is optional.
        sslSecret: $SECRET_NAME

設定 mTLS

您可以改為在 Istio 輸入端設定 mTLS,而非單向 TLS。設定 mTLS 有兩種方式,如下所述。

方法 1:金鑰/憑證組合和 CA 檔案

在覆寫檔案的 virtualhosts 屬性中,提供憑證授權單位 (CA) 憑證,以及 SSL 憑證和金鑰檔案:

virtualhosts:
  - name: $ENVIRONMENT_GROUP_NAME
    tlsMode: MUTUAL
    caCertPath: "$CA_FILE"
    sslCertPath: "$CERT_FILE"
    sslKeyPath: "$KEY_FILE"

其中 $ENVIRONMENT_GROUP_NAME 是環境群組的名稱,其中包含對應的主機別名,$CA_FILE 是授權憑證,$CERT_FILE$KEY_FILE 則是 TLS 金鑰和憑證檔案。請參閱「建立傳輸層安全標準 (TLS) 憑證」一文。

選項 2:Kubernetes 密鑰

istio-system 命名空間中建立兩個 Kubernetes 機密。第一個密鑰用於 CA,第二個用於 SSL 憑證/金鑰組。然後將這些值新增至覆寫檔案。
  1. istio-system 命名空間中建立兩個 Kubernetes 機密。第一個機密金鑰適用於 CA,第二個則適用於 SSL 憑證/金鑰組:
    kubectl create -n istio-system secret generic $SECRET_NAME  \
    --from-file=key=$KEY_FILE \
    --from-file=cert=$CERT_FILE
  2. 為 CA 建立密鑰:
    kubectl create -n istio-system secret generic $SECRET_NAME-cacert  \
    --from-file=cacert=$CA_FILE
  3. 在覆寫檔案中設定 virtualhosts 屬性:
    virtualhosts:
      - name: $ENVIRONMENT_GROUP_NAME
        tlsMode: MUTUAL  # Note: Be sure to specify MUTUAL
        sslSecret: $SECRET_NAME