使用密鑰

瞭解如何建立 Secret,以及設定 Knative 服務和修訂版本來使用該 Secret。

服務的常見用途是透過使用者名稱和密碼存取第三方應用程式。對於 Google Kubernetes Engine,最佳做法是將這類機密資訊儲存在 Kubernetes Secret 物件中。

如要讓容器存取密鑰,您可以將每個密鑰掛接為磁碟區,這樣容器就能以檔案形式存取密鑰中的項目。您應掛接 Secret,確保系統在讀取每個 Secret 時,會傳回最新版本。

您也可以使用環境變數傳遞 Secret。

建立密鑰

下列步驟僅示範如何建立 Secret,但建立 Secret 的方法有很多種,詳情請參閱「Secret」主題。

建立 Secret 時,請務必在與執行 Knative 服務服務的叢集相同的命名空間中建立。在這些範例中,使用的是 default 命名空間。

如要在叢集的 default 命名空間中建立密鑰:

  • 使用檔案建立 Secret:

    echo -n 'devuser' > ./username.txt
    echo -n 'S!B\*d$zDsb' > ./password.txt
    kubectl create secret generic user-creds --from-file=./username.txt --from-file=./password.txt
    
  • 只使用 kubectl 指令建立 Secret:

    kubectl create secret generic user-creds --from-literal=username=devuser --from-literal=password='S!B\*d$zDsb'
    

讓服務可存取 Secret

部署新服務或更新現有服務並部署修訂版本時,可以使用 Google Cloud 主控台或指令列工具,將密鑰與服務建立關聯:

控制台

  1. 前往 Google Cloud 控制台的 Knative Serving:

    前往 Knative serving

  2. 如要設定部署的新服務,請按一下「建立服務」。如要設定現有服務,請按一下該服務,然後按一下「Edit & Deploy New Revision」(編輯及部署新的修訂版本)

  3. 在「進階設定」下方,按一下「變數和密鑰」

  4. 在「參照密鑰」下方,從下拉式選單中選取所需密鑰。

    • 在「參考方法」下拉式選單中,選取要使用 Secret 的方式,例如掛接為磁碟區或公開為環境變數。
    • 如果使用掛接做為磁碟區,請指定路徑,然後按一下「完成」
    • 如果以環境變數形式公開:
      1. 提供變數的「名稱」,然後從「金鑰」下拉式選單中選取對應的密鑰值。
      2. 按一下「新增」,新增其他密鑰值。
      3. 提供變數的「名稱」,然後從「金鑰」下拉式選單中選取對應的密鑰值。
      4. 按一下 [完成]

  5. 按一下「下一步」繼續前往下一個部分。

  6. 在「設定這項服務的觸發方式」部分,選取要用來叫用服務的連線。

  7. 按一下「建立」,將映像檔部署到 Knative 服務,然後等待部署作業完成。

gcloud

您可以使用 Google Cloud CLI 將祕密與新服務建立關聯,或更新現有服務:

  • 如要更新現有服務的 Secret,請執行 gcloud run services update 指令,並指定下列其中一個參數:

    範例:

    gcloud run services update SERVICE --update-secrets KEY1=VALUE1,KEY2=VALUE2

    取代:

    • SERVICE 改為您的服務名稱。
    • KEY1=VALUE1,KEY2=VALUE2 以半形逗號分隔的清單,其中包含每個 Secret 的名稱和值配對。 針對您指定的每個 KEY,以正斜線 / 開頭指定路徑,將 Secret 掛接為檔案。您也可以選擇排除正斜線,將 Secret 掛接為環境變數。為每個 VALUE 指定密鑰名稱。 如何指定多個參數
    • 指令參數選項

      如要指定多組鍵/值組合,您可以指定多個參數,方便閱讀。範例:
      [...]
      --update-secrets "KEY=VALUE1" \
      --update-secrets "KEY=VALUE2" \
      --update-secrets "KEY=VALUE3"
  • 如果是新服務,請執行 gcloud run deploy 指令並搭配 --set-secrets 參數,將 Secret 與服務建立關聯:

    gcloud run deploy SERVICE --image=IMAGE_URL --set-secrets KEY1=VALUE1,KEY2=VALUE2

    取代:

    • IMAGE_URL,並參照容器映像檔,例如 gcr.io/cloudrun/hello
    • SERVICE 改為您的服務名稱。
    • KEY1=VALUE1,KEY2=VALUE2 以半形逗號分隔的清單,其中包含每個 Secret 的名稱和值配對。 針對您指定的每個 KEY,以正斜線 / 開頭指定路徑,將 Secret 掛接為檔案。您也可以選擇排除正斜線,將 Secret 掛接為環境變數。為每個 VALUE 指定密鑰名稱。 如何指定多個參數
    • 指令參數選項

      如要指定多組鍵/值組合,您可以指定多個參數,方便閱讀。範例:
      [...]
      --update-secrets "KEY=VALUE1" \
      --update-secrets "KEY=VALUE2" \
      --update-secrets "KEY=VALUE3"