跳至主要内容

映像檔安全性

自 v1.4.0 版本起提供

Harvester 允許您加密和解密虛擬機器映像檔。加密機制利用 Linux kernel 模組 dm_crypt 和命令列公用程式 cryptsetup。

備註

此功能僅支援 Longhorn V1 資料引擎。您無法加密和解密儲存在其他儲存解決方案中的映像檔。

先決條件​

請準備以下資源:

  • 來源虛擬機器映像檔:您可以使用任何支援的方法 上傳或建立映像檔。

    警告

    請勿上傳已加密的映像檔。

  • Secret:Kubernetes Secret 用作 dm_crypt 的密碼短語 (passphrase)。您必須指定 CRYPTO_KEY_VALUE 欄位的值。所有其他欄位是固定的。

    Secret 範例:

    apiVersion: v1
    kind: Secret
    metadata:
    name: encryption
    namespace: default
    data:
    CRYPTO_KEY_CIPHER: aes-xts-plain64
    CRYPTO_KEY_HASH: sha256
    CRYPTO_KEY_PROVIDER: secret
    CRYPTO_KEY_SIZE: 256
    CRYPTO_KEY_VALUE: "Your encryption passphrase"
    CRYPTO_PBKDF: argon2i
    important

    該範例包含 Kubernetes Secret 的預設 YAML 程式碼。除此之外,您可以使用 LUKS 模式的加密選項,這是一種 cryptsetup 操作模式。Harvester v1.4.1 及更高版本支援這些選項,但您必須驗證您的節點是否支援這些選項。

    選項可能的值
    CRYPTO_KEY_CIPHERaes-xts-plain, aes-xts-plain64, aes-cbc-plain, aes-cbc-plain64, aes-cbc-essiv:sha256
    CRYPTO_KEY_HASHsha256, sha384, sha512
    CRYPTO_KEY_SIZE256, 384, 512
    CRYPTO_PBKDFargon2i, argon2id, pbkdf2

    您可以使用 kubectl 或 Harvester UI (Edit as YAML 功能) 在系統命名空間中建立 Secret。系統命名空間中的資源不會顯示在 Harvester UI Secrets 畫面上。

  • StorageClass:映像檔使用 Longhorn 進行加密,因此必須將必要的欄位傳遞給 Longhorn CSI 驅動程式。您可以在建立 StorageClass 時指定加密 Secret。如需更多資訊,請參閱 映像檔 StorageClass。

    StorageClass 範例:

    allowVolumeExpansion: true
    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
    name: encryption
    parameters:
    csi.storage.k8s.io/node-publish-secret-name: encryption
    csi.storage.k8s.io/node-publish-secret-namespace: default
    csi.storage.k8s.io/node-stage-secret-name: encryption
    csi.storage.k8s.io/node-stage-secret-namespace: default
    csi.storage.k8s.io/provisioner-secret-name: encryption
    csi.storage.k8s.io/provisioner-secret-namespace: default
    encrypted: "true"
    migratable: "true"
    numberOfReplicas: "3"
    staleReplicaTimeout: "2880"
    provisioner: driver.longhorn.io
    reclaimPolicy: Delete
    volumeBindingMode: Immediate
    important

    您可以使用 Harvester UI (Edit as YAML 功能) 和 kubectl 在系統命名空間中建立 Secret。系統命名空間中的資源不會顯示在 Harvester UI Secrets 畫面上。

加密虛擬機器映像檔​

  1. 在 Harvester UI 上,前往 Images (映像檔)。

  2. 點擊 Create (建立)。

  3. 指定命名空間和名稱。

  4. 在 Basics (基本) 頁籤上,選取 Encrypt (加密),然後選取來源映像檔。

  1. 在 Storage (儲存) 頁籤上,選取包含加密相關欄位的 StorageClass。

Harvester 會將必要的欄位傳遞給 Longhorn。

  1. 點擊 Create (建立)。

解密虛擬機器映像檔​

  1. 在 Harvester UI 上,前往 Images (映像檔)。

  2. 點擊 Create (建立)。

  3. 指定命名空間和名稱。

  4. 在 Basics (基本) 頁籤上,選取 Decrypt (解密),然後選取來源映像檔。

  1. 在 Storage (儲存) 頁籤上,選取 harvester-longhorn (Default) 或其他常用的 StorageClass。

Harvester 使用您想要解密之來源映像檔的 StorageClass。

  1. 點擊 Create (建立)。

使用具有加密卷冊的映像檔​

建立虛擬機器時,您必須選取想要使用的映像檔。

當虛擬機器使用的卷冊被加密時,Virtual Machines (虛擬機器) 畫面會顯示以下圖示和訊息。

若要確定哪些卷冊已加密,請檢查 Virtual Machine 詳細資訊畫面上的 Volumes (卷冊) 頁籤。

結合 Rancher 整合的進階用法​

Secret 是一個未加密的 Base64 編碼字串。為了保證 Secret 的安全,您可以使用專案和命名空間來隔離權限。如需更多資訊,請參閱 多租戶。

限制​

您無法執行以下動作:

  • 從加密的映像檔匯出新映像檔
  • 下載加密的映像檔
  • 上傳加密的映像檔