IBM Cloud Docs
从 DCT 切换到 Red Hat 简单签名和更新虚拟服务器

从 DCT 切换到 Red Hat 简单签名和更新虚拟服务器

支持 IBM Cloud® Container Registry 中的 Docker 内容信任 (DCT) 和 Docker 信任命令 (包括备用 URL) 的公证 v1 服务已停用。 使用 DCT 签名的任何现有 ICR 映像都必须使用 Red Hat重新签名。 有关更多信息,请参阅 Container Registry

先决条件

  • 如果映像是 DCT 签名的并且存在于 DockerHub中,那么不适用。
  • 如果映像是 Red Hat 简单签名且存在于 IBM Cloud® Container Registry (ICR) 中,并且虚拟服务器实例已使用 Red Hat 简单签名映像进行部署,那么不适用。
  • 如果虚拟服务器已在运行并且您不打算更新虚拟服务器,那么不适用。
  • 仅当使用 Docker 内容信任 (DCT) 对映像进行签名并且该映像存在于 ICR 中,并且您计划将虚拟服务器更新为最新版本时才适用。 在此场景中,请遵循 这些 指示信息。
  • 必须安装 Skopeo

过程

  1. 运行以下命令以列出所有 Hyper Protect Virtual Servers 实例:
    ibmcloud hpvs instances [--output json]
    
--output
以请求的格式显示结果。 唯一有效值为 json
  1. 运行以下命令以查看有关特定服务器实例的详细信息:

    ibmcloud hpvs instance (NAME | CRN) [--output json]
    
    NAME
    实例的名称。

    如果实例名称不唯一,请指定 CRN

    CRN
    服务器的云资源名称 (CRN)。 如果 NAME 不唯一,请指定 CRN 。 您可以运行 ibmcloud hpvs instances 命令以获取 CRN。

    命令选项

    --output
    以请求的格式显示结果。 唯一有效值为 json

    示例输出

    Name                  hpvs-env-test
    CRN                   crn:v1:bluemix:public:hpvs:..............::
    Location              <location>
    Cloud tags
    Cloud state           active
    Server status         running
    Plan                  Free
    Public IP address     52.x.x.x
    Internal IP address   172.x.x.x
    Storage               50 GiB
    Memory                2048 MiB
    Processors            1 vCPUs
    Image type            self-provided
    Image OS              self-defined
    Image name            de.icr.io/hpvs_test/ubuntu:v2
    Environment           TEST_VAR=value
                          TEST_VAR2=value2
    Last operation        update succeeded
    
  2. 完成以下步骤以使用 Red Hat 简单签名对映像进行签名:

    1. 创建批处理文件并向其添加以下内容:

      Key-Type: RSA
      Key-Length: 4096
      Subkey-Type: RSA
      Subkey-Length: 4096
      Name-Real: latestnewkey
      Name-Email: latestnewkey@example.com
      Expire-Date: 472
      
    2. 创建密钥。

      gpg --pinentry-mode loopback --passphrase="" --generate-key --batch <batchfile>
      
    3. 导出公用密钥。

      gpg --armor --export <name> > <filename>.pub
      
    4. 使用 skopeo 对映像进行签名,然后将该映像推送到 ICR。

      skopeo copy docker-daemon:us.icr.io/yournamespace/nginx1:latest docker://us.icr.io/yournamespace/nginx1:latest --sign-by E8C9E90........D9F3 --dest-creds=iamapikey:*****************
      
      Getting image source signatures
      Copying blob 226117031573 done
      .........
      Writing manifest to image destination
      Signing manifest using simple signing
      Storing signatures
      

      示例输出

      sudo skopeo copy docker-daemon:us.icr.io/yournamespace/nginx1:latest docker://us.icr.io/yournamespace/nginx1:latest --sign-by E8C9E9091D087114C7A978FF82CA7961A927D9F3 --dest-creds=iamapikey:*****************
      
      Getting image source signatures
      Copying blob 226117031573 done
      Copying blob 04ab349b7b3b done
      Copying blob 2c31eef17db8 done
      Copying blob 7b9055fc8058 done
      Copying blob 73993eeb8aa2 done
      Copying blob 6485bed63627 done
      Copying blob 1f9171ae3ae1 done
      Copying config bd909010fa done
      Writing manifest to image destination
      Signing manifest using simple signing
      Storing signatures
      
  3. 通过运行以下命令更新到最新的 hpvs plugin :

    ibmcloud plugin install hpvs
    

    示例输出

    ibmcloud plugin install hpvs
    Looking up 'hpvs' from repository 'IBM Cloud'...
    Plug-in 'hpvs 1.4.24' found in repository 'IBM Cloud'
    Plug-in 'hpvs 1.4.21' was already installed. Do you want to update it with 'hpvs 1.4.24' or not? [y/N] > y
    Attempting to download the binary file...
     13.88 MiB / 13.88 MiB [========================================================================================================================================================================] 100.00% 2s
    14553504 bytes downloaded
    Installing binary...
    OK
    Plug-in 'hpvs 1.4.24' was successfully installed into bluemix/plugins/hpvs. Use 'ibmcloud plugin show hpvs' to show its details.
    
  4. 运行以下命令以创建注册定义文件

    ibmcloud hpvs registration-create [--repository-name REPO-NAME] [--cr-username USER-NAME --cr-pwd-path FILE-PATH | --no-auth] [--allowed-env-keys ENV-KEYS | --no-env] [--image-key-id IMAGE-KEY-ID] [--fingerprint FINGERPRINT] [--image-key-public-path PUBLIC-KEY] [--registration-key-private-path PRIVATE-KEY-PATH] [--registration-key-public-path PUBLIC-KEY-PATH] [--gpg-passphrase-path PASS-PHRASE] [--cap-add  CAPABILITIES] [--isv-secrets ISV-SECRETS | --no-isv-secrets]
    

    此命令的输出是用于更新虚拟服务器的 registration.json.asc 文件。 在运行此命令之前,请确保将现有 registration.json.asc 文件移动到其他位置。

    如果输入不带任何参数的命令,那么系统会提示您输入所有参数。

    如果图像在 ICR 中,那么当提示您输入 "指纹" 时,必须提供用于对图像进行签名的 gpg 密钥的指纹,当提示您输入 "包含图像公用密钥的文件的路径" 时,需要提供用于对其进行签名的公用密钥的路径。

    对于 --registration-key-private-path--registration-key-public-path 参数,请确保使用首次创建虚拟实例时使用的专用密钥和公用密钥。 您必须将这些密钥保存在安全的位置,以供将来使用。 如果不使用同一组专用密钥和公用密钥,那么命令执行将失败

    如果容器注册表不需要认证,请设置 -no-auth 参数以防止提示。 如果不需要任何环境参数,请设置 -no-env 参数,例如:

    ibmcloud hpvs registration-create --no-env --no-auth
    

    命令选项 --repository-name REPO-NAME : 是存储库的标准名称。

    --cr-username USER-NAME
    是用于在容器存储库上登录的用户名。 它可以是 4-30 个字符的任何字符串。
    --cr-pwd-path FILE-PATH
    包含容器存储库密码的文件的路径。

    要确保文件路径中没有尾部空格,可以将其指定为 vi -b file_name, :set noeol, :wq

    --no-auth
    是在映像不需要授权即可下载时必须设置的参数。 在这种情况下,您不需要提供 cr-usernamecr-pwd-path 参数。 如果您这样做,那么将忽略这些参数。
    --allowed-env-keys ENV-KEYS
    以逗号分隔列表形式指定允许的环境变量键。 键必须是 1-64 个字符的字符串。
    --no-env
    如果映像不需要任何允许的环境变量,那么可以设置此参数。 在这种情况下,您不需要提供 allowed-env-keys 参数。 如果执行此操作,那么将忽略此操作。
    --image-key-id IMAGE-KEY-ID
    用于对映像进行签名的根密钥的标识。 它必须包含 64 个字符长。 如果未指定 image-key-id ,那么该命令首先尝试通过请求容器注册表公证服务来自动确定标识。 系统将提示您输入 Docker Hub 映像的此参数。
    --fingerprint FINGERPRINT
    如果图像位于 ICR 中,那么必须提供用于对图像进行签名的 gpg 键的指纹。 您可以使用 gpg --list-keys name_of_the_key 命令获取指纹。 例如,运行 gpg --list-keys latestnewkey 命令时,以下片段是输出的示例:
    pub   rsa4096 2023-01-12 [SCEA] [expires: 2024-04-28]
       E8C9E...........61A927D9F3
    uid           [ultimate] latestnewkey
    <latestnewkey@example.com>
    sub   rsa4096 2023-01-1--fingerprint FINGERPRINT2 [SEA] [expires: 2024-04-28]
    

    在此示例中, "E8C9E...........61A927D9F3" 是指纹。

    --image-key-public-path PUBLIC-KEY
    包含用于对映像进行签名的密钥的公用部分的文件的路径。 密钥的公用部分必须至少包含 20 个字符,并且 base64 编码。 如果该映像存在于 ICR 中,那么应强制提供用于对该映像进行签名并推送到 ICR 的 gpg 公用密钥的路径。
    --registration-key-public-path PRIVATE-KEY-PATH
    注册密钥对中的公用密钥的路径。 确保使用的密钥与首次创建虚拟实例时使用的密钥相同。 您必须将这些密钥保存在安全的位置,以供将来使用。
    --registration-key-private-path PUBLIC-KEY-PATH
    注册密钥对中的专用密钥的路径。 确保使用的密钥与首次创建虚拟实例时使用的密钥相同。 您必须将这些密钥保存在安全的位置,以供将来使用。
    --gpg-passphrase-path PASS-PHRASE
    包含用于注册密钥的专用部分的 gpg 口令的文件的路径。 口令必须至少由 6 个字符组成。 要确保未追加新行,请将 echo-n 配合使用,将 cat 与 EOF 配合使用。
    --cap-add CAPABILITIES
    要启用的 Linux 功能以逗号分隔列表形式指定。
    --isv-secrets ISV-SECRETS
    要在 BYOI 中使用的 Linux 私钥。 这些私钥将添加到容器内的 /isv_secrets/secrets.json 文件中。

    ISV 私钥是用冒号分隔的键值对,您可以指定用逗号分隔的列表私钥。 在指定多个私钥时,请避免在逗号后面添加空格。 如果私钥的大小较大,建议您使用 --isv-secrets 命令参数来指定该私钥。 要更新 ISV 私钥,必须使用更新后的 ISV 私钥创建新的注册定义文件,并在运行 hpvs instance-update 命令以更新实例时使用相同的注册定义文件。

    --no-isv-secrets
    如果映像不需要任何 isv 私钥,那么可以设置此参数。 您无需提供 isv-secret 参数,如果需要,那么将忽略该参数。

    如果您未使用首次创建虚拟服务器实例时使用的专用密钥和公用密钥 (--registration-key-public-path PRIVATE-KEY-PATH--registration-key-private-path PUBLIC-KEY-PATH) ,那么命令执行将失败。

    示例输出

    ibmcloud hpvs registration-create
    Repository name> us.icr.io/yournamespace/nginx1
    Container registry API key>
    Secrets to be passed into BYOI registration file>
    Allowed environment variables as comma separated list>
    Fingerprint> E8C9E...........61A927D9F3
    Path to the file containing the image public key> new.pub
    Path to the file containing public part of the registration key> byoifeb21.public
    Allowed Linux capabilities to be enabled as comma separated list> ALL
    Path to the file containing the private part of the registration key> byoifeb21.private
    Gpg pass phrase for the private part of the registration key>
    OK
    The registration file was successfully created in the current working directory: registration.json.asc
    Complete command executed:
     ibmcloud hpvs registration-create --repository-name=us.icr.io/yournamespace/nginx1 --cr-username=iamapikey --cr-pwd-path=<PATH> --no-env --fingerprint=E8C9E...........61A927D9F3 --image-key-public-path=new.pub --registration-key-public-path=byoifeb21.public --cap-add=ALL --registration-key-private-path=byoifeb21.private --gpg-passphrase-path=<PATH>
    
  5. 运行以下命令以更新虚拟服务器实例:

    ibmcloud hpvs instance-update (NAME | CRN) [--hostname HOST-NAME] [(--rd REGISTRATION-DEFINITION | --rd-path REGISTRATION-DEFINITION-PATH)] [-i IMAGE-TAG] [-e ENV-CONFIG1 -e ENV-CONFIG2 ...] [--force]
    
    NAME
    实例的名称。 如果实例名称不唯一,请指定 CRN
    CRN
    服务器的云资源名称 (CRN)。 如果 NAME 不唯一,请指定 CRN 。 您可以运行 ibmcloud hpvs instances 命令以获取 CRN。 命令选项
    --hostname HOST-NAME
    将在 Hyper Protect Virtual Servers 容器中使用此参数值设置的主机名。
    --rd REGISTRATION-DEFINITION
    当您使用自提供的映像时,用于 自带服务器映像 (BYOI)--rd--rd-path 的加密和签名注册定义是可选的。
    --rd-path REGISTRATION-DEFINITION-PATH
    包含用于 BYOI 的加密和签名注册定义的文件的文件路径。 当您使用自提供的映像时, --rd--rd-path 是可选的。
    -i IMAGE-TAG
    BYOI 服务器映像的映像标记。 如果您正在使用自己的映像,那么是必需的。
    -e ENV-CONFIG
    使用自提供的映像时指定环境变量。 需要先在注册定义中进行指定。 您可以使用 -e 标志 (例如 -ibmcloud hpvs instance-update CRN -i latest -e k1=v1 -e k2='v2 v3') 将一个或多个环境变量设置为键值对。 环境变量 names 的最大长度可以是 64 个字符,可以是数字,字符和下划线。 环境变量 values 的最大长度可以为 4096。
    --force
    强制更新 Hyper Protect Virtual Servers 实例,而不提示确认。 示例输出
    ibmcloud hpvs instance-update hpvs-env-test -i latest --rd-path "registration.json.asc"
    
    This will wipe all the data from your virtual boot disk of the virtual server and replace it with a new image. Make sure that you have moved all required data to the /data/ disk. The Ubuntu virtual server SSH server is configured to read the authorized keys for the root user from the /data/.ssh/authorized_keys file after the update. Verify that this file contains a valid configuration so that you don't lose access to your instance.
    
    Are you sure you want to update the service instance? [y/N]> y
    OK
    Update request for service instance 'hpvs-env-test (crn:v1:bluemix:public:hpvs:..............::)' was accepted.