7.4.2.2.3. 使用命令行在创建虚拟机时添加密钥
当使用命令行创建虚拟机(VM)时,您可以添加静态管理的公共 SSH 密钥。密钥会在第一次引导时添加到虚拟机。
密钥作为 cloud-init 数据源添加到虚拟机中。此方法将访问凭据与 cloud-init 用户数据中的应用数据分隔开。这个方法不会影响 cloud-init 用户数据。
先决条件
-
您可以通过运行
ssh-keygen命令生成 SSH 密钥对。
流程
为
VirtualMachine对象和Secret对象创建清单文件:apiVersion: kubevirt.io/v1 kind: VirtualMachine metadata: name: example-vm namespace: example-namespace spec: dataVolumeTemplates: - apiVersion: cdi.kubevirt.io/v1beta1 kind: DataVolume metadata: name: example-vm-disk spec: sourceRef: kind: DataSource name: rhel9 namespace: openshift-virtualization-os-images storage: resources: requests: storage: 30Gi running: false template: metadata: labels: kubevirt.io/domain: example-vm spec: domain: cpu: cores: 1 sockets: 2 threads: 1 devices: disks: - disk: bus: virtio name: rootdisk - disk: bus: virtio name: cloudinitdisk interfaces: - masquerade: {} name: default rng: {} features: smm: enabled: true firmware: bootloader: efi: {} resources: requests: memory: 8Gi evictionStrategy: LiveMigrate networks: - name: default pod: {} volumes: - dataVolume: name: example-volume name: example-vm-disk - cloudInitConfigDrive: <.> userData: |- #cloud-config user: cloud-user password: <password> chpasswd: { expire: False } name: cloudinitdisk accessCredentials: - sshPublicKey: propagationMethod: configDrive: {} source: secret: secretName: authorized-keys <.> --- apiVersion: v1 kind: Secret metadata: name: authorized-keys data: key: | MIIEpQIBAAKCAQEAulqb/Y... <.><.> 指定
cloudInitConfigDrive来创建配置驱动器。<.> 指定Secret对象名称。<.> 粘贴公共 SSH 密钥。创建
VirtualMachine和Secret对象:$ oc create -f <manifest_file>.yaml启动虚拟机:
$ virtctl start vm example-vm -n example-namespace
验证
获取虚拟机配置:
$ oc describe vm example-vm -n example-namespace输出示例
apiVersion: kubevirt.io/v1 kind: VirtualMachine metadata: name: example-vm namespace: example-namespace spec: template: spec: accessCredentials: - sshPublicKey: propagationMethod: configDrive: {} source: secret: secretName: authorized-keys # ...