將資料儲存在 Kubernetes Secret 中

本主題說明如何將機密資料儲存在 Kubernetes 密鑰中,並在 API 代理程式流程中從流程變數擷取資料。

簡介

有時您可能需要儲存資料,以便在執行階段擷取資料,而不會過期的資料不應在 API 代理程式邏輯中硬式編碼。其中一個選項是使用混合鍵/值對應 (KVM) 功能。如果您已使用 Kubernetes 在機密資料的自訂金庫中管理密鑰,建議您考慮使用本主題所述的 Kubernetes 密鑰功能。就像 KVM 資料一樣,您可以在 API 代理程式流程變數中存取 Kubernetes 密鑰資料。

哪些類型的資料可儲存在 Kubernetes Secret 中?

Apigee hybrid 僅允許您將下列類型的資料檔案儲存在 Kubernetes 秘密中。包括:

檔案格式 支援的副檔名
傳輸層安全標準 (TLS) 憑證和金鑰檔案 *.crt*.key*.pem
資源檔案 *.properties

屬性檔案是包含鍵/值組合的檔案。例如:

username=admin
password=1f2d1e2e7df

建立 Kubernetes 密鑰

本節說明如何建立 Kubernetes 機密,以便在叢集中儲存機密資料。

  1. 建立要儲存在 Kubernetes 機密資料中的檔案。檔案必須使用「可儲存在 Kubernetes 機密中的資料類型」一文中列出的支援格式和副檔名。
  2. 執行 kubectl create secret generic 指令。例如:
    kubectl -n namespace create secret generic org-env-policy-secret \
      --from-file=filepath/prop-file.properties \
      --from-file=filepath/key-file.key \
      --from-file="filepath/cert-file.pem
    

    其中:

    • namespace:部署執行階段元件的 Kubernetes 命名空間。
    • org:您的 Apigee 機構名稱。
    • env:機構中的環境名稱。
    • filepath:您要納入密鑰的檔案路徑。您必須至少指定一個要納入機密資料的檔案。
    • prop-file:要納入 Secret 中的屬性檔案名稱。
    • key-file:要納入密鑰中的 TLS 金鑰檔案名稱。
    • cert-file:要納入密鑰的 TLS 憑證檔案名稱。

    您可以在密鑰中加入一或多個檔案。例如:

    kubectl -n apigee create secret generic myorg-test-policy-secret \
      --from-file="$policy_secrets_path"/credential.properties \
      --from-file="$policy_secrets_path"/secrets.properties \
      --from-file="$policy_secrets_path"/public.key \
      --from-file="$policy_secrets_path"/fullchain.pem
  3. 建立後,系統最多可能需要 90 秒,變更才會反映在所有叢集中。訊息處理程序會每 30 秒輪詢一次機密金鑰變更。如果偵測到變更,快取就會更新。

從機密資料擷取資料

密鑰建立並可供使用後 (通常在建立後約 90 秒),您就可以在儲存密鑰的機構/環境中,透過 API 代理程式流程中的流程變數存取密鑰資料。舉例來說,假設您的 Secret 包含名為 credentials.properties*.properties 檔案,其中含有 API 金鑰,如下所示:

apikey=OrxYQptBMlY1TqmiGLTtyFiaLzzrD25Z

接著,您可以使用「Assign Message」等政策,從資料流變數中擷取 API 金鑰。例如:

<AssignMessage name="assignvariable-2">
  <AssignVariable>
    <Name>my-apikey</Name>
    <Ref>private.secret.credential.properties.apikey</Ref>
  </AssignVariable>
</AssignMessage>

Ref 元素 (private.secret.credential.properties.apikey) 中參照的變數名稱由以下部分組成:

變數名稱部分 說明
private.secret 變數的固定命名空間。儲存在混合叢集中的所有 Kubernetes 密鑰都會共用這個命名空間。
credential.properties

儲存在 Kubernetes 密鑰中的檔案名稱。

apikey 儲存在屬性檔案中的鍵名稱。

在本例中,指派訊息政策會擷取 apikeyOrxYQptBMlY1TqmiGLTtyFiaLzzrD25Z,並將其儲存在流程變數 my-apikey 中。

更新密鑰

由於 kubectl 不支援更新 Kubernetes 密鑰,您必須先刪除現有的密鑰,然後按照「建立 Kubernetes 密鑰」中的步驟重新建立密鑰。