从 DCT 切换到 Red Hat 简单签名和更新虚拟服务器
支持 IBM Cloud® Container Registry 中的 Docker 内容信任 (DCT) 和 Docker 信任命令 (包括备用 URL) 的公证 v1 服务已停用。 使用 DCT 签名的任何现有 ICR 映像都必须使用 Red Hat重新签名。 有关更多信息,请参阅 Container Registry。
先决条件
过程
- 运行以下命令以列出所有 Hyper Protect Virtual Servers 实例:
ibmcloud hpvs instances [--output json]
--output
- 以请求的格式显示结果。 唯一有效值为
json
。
-
运行以下命令以查看有关特定服务器实例的详细信息:
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
-
完成以下步骤以使用 Red Hat 简单签名对映像进行签名:
-
创建批处理文件并向其添加以下内容:
Key-Type: RSA Key-Length: 4096 Subkey-Type: RSA Subkey-Length: 4096 Name-Real: latestnewkey Name-Email: latestnewkey@example.com Expire-Date: 472
-
创建密钥。
gpg --pinentry-mode loopback --passphrase="" --generate-key --batch <batchfile>
-
导出公用密钥。
gpg --armor --export <name> > <filename>.pub
-
使用
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
-
-
通过运行以下命令更新到最新的
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.
-
运行以下命令以创建注册定义文件
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-username
和cr-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>
-
运行以下命令以更新虚拟服务器实例:
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.