為 Cassandra 設定 TLS

本主題說明如何設定驗證,確保 Cassandra 節點之間,以及用戶端與 Cassandra 節點之間的通訊安全。

如何在執行階段層級為 Cassandra 設定 TLS

Cassandra 可確保用戶端電腦與資料庫叢集之間,以及叢集內節點之間的通訊安全無虞。啟用加密功能可確保傳輸中的資料不會遭到入侵,並以安全方式傳輸。在 Apigee Hybrid 中,Cassandra 節點之間,以及用戶端與 Cassandra 節點之間的任何通訊,預設都會啟用 TLS。

您可以透過使用者名稱/密碼組合設定驗證,直接放在覆寫檔案中,或新增至 Kubernetes Secret,如本主題所述。

關於 Cassandra 使用者驗證

混合式平台會使用 Cassandra 做為執行階段資料層資料的後端資料儲存庫。根據預設,用戶端與 Cassandra 的任何通訊都需要驗證。有多位用戶與 Cassandra 溝通。系統會為這些使用者提供預設密碼,您不必變更密碼。

這些使用者 (包括預設使用者) 說明如下:

  • DML 使用者:用於用戶端通訊,可讀取及寫入 Cassandra 的資料 (KMS、KVM、快取和配額)。
  • DDL 使用者:MART 會使用此角色執行任何資料定義工作,例如建立、更新及刪除鍵空間。
  • 管理員使用者:用於在 Cassandra 叢集上執行的任何管理活動。
  • 預設 Cassandra 使用者:啟用驗證時,Cassandra 會建立預設使用者,使用者名稱為 cassandra
  • JMX 使用者:用於驗證及與 Cassandra JMX 介面通訊。
  • Jolokia 使用者:用於驗證及與 Cassandra JMX API 通訊。

在覆寫檔案中變更預設密碼

Apigee Hybrid 會為 Cassandra 使用者提供預設密碼。如要變更預設使用者密碼,請在 overrides.yaml 檔案中執行這項操作。新增下列設定、視需要變更預設密碼 (「iloveapis123」),然後將變更套用至叢集。

cassandra:
   auth:
     default:  ## the password for the new default user (static username: cassandra)
       password: "iloveapis123"
     admin: ## the password for the admin user (static username: admin_user)
       password: "iloveapis123"
     ddl: ## the password for the DDL User (static username: ddl_user)
       password: "iloveapis123"
     dml: ## the password for the DML User (static username: dml_user)
       password: "iloveapis123"
     jmx:
       username: "jmxuser" ## the username for the JMX User
       password: "iloveapis123" ## the password for the JMX User
     jolokia:
       username: "jolokiauser" ## the username to access jolokia interface
       password: "iloveapis123" ## the password for jolokia user

注意事項:

  • 不支援憑證授權單位 (CA) 輪替。
  • 系統不支援使用密碼片產生的伺服器憑證。

在 Kubernetes Secret 中設定使用者名稱和密碼

本節說明如何設定 Cassandra,以使用 Kubernetes Secret 進行驗證。

建立 Secret

請使用下列範本設定 Kubernetes Secret。將範本儲存至檔案,然後編輯必要屬性。請注意,如果使用這個選項,您必須為每個密碼提供使用者名稱。

apiVersion: v1
kind: Secret
metadata:
  name: $SECRET_NAME
  namespace: $APIGEE_NAMESPACE
type: Opaque
data:
  default.password: $PASSWORD   #base64-encoded string
  admin.user: $USERNAME   #base64-encoded string
  admin.password: $PASSWORD   #base64-encoded string
  dml.user: $USERNAME   #base64-encoded string
  dml.password: $PASSWORD   #base64-encoded string
  ddl.user: $USERNAME   #base64-encoded string
  ddl.password: $PASSWORD   #base64-encoded string
  jmx.user: $USERNAME   #base64-encoded string
  jmx.password: $PASSWORD   #base64-encoded string
  jolokia.user: $USERNAME   #base64-encoded string
  jolokia.password: $PASSWORD   #base64-encoded string
  

其中 $SECRET_NAME 是您為密鑰選擇的名稱,$APIGEE_NAMESPACE 是部署 Apigee Pod 的命名空間 (預設為 apigee),而 $USERNAME$PASSWORD 則是每個使用者的使用者名稱和密碼。請注意,使用者名稱和密碼必須採用 Base64 編碼。

將 Secret 套用至叢集。例如:

kubectl apply -f $SECRET_FILE

將密鑰新增至覆寫檔案:

cassandra:
  auth:
    secret: $SECRET_NAME

將更新後的 Cassandra 覆寫套用至叢集:

$APIGEECTL_HOME/apigeectl apply -f overrides/overrides.yaml --datastore

檢查 Cassandra 記錄

Cassandra 啟動後,請立即檢查記錄。下方記錄顯示 Cassandra 用戶端連線已加密。

kubectl logs apigee-cassandra-2 -n apigee -f

INFO  00:44:36 Starting listening for CQL clients on /10.0.2.12:9042 (encrypted)...
INFO  00:44:36 Binding thrift service to /10.0.2.12:9160
INFO  00:44:36 enabling encrypted thrift connections between client and server
INFO  00:44:36 Listening for thrift clients...