7.4.2.2.3. 使用命令行在创建虚拟机时添加密钥


当使用命令行创建虚拟机(VM)时,您可以添加静态管理的公共 SSH 密钥。密钥会在第一次引导时添加到虚拟机。

密钥作为 cloud-init 数据源添加到虚拟机中。此方法将访问凭据与 cloud-init 用户数据中的应用数据分隔开。这个方法不会影响 cloud-init 用户数据。

先决条件

  • 您可以通过运行 ssh-keygen 命令生成 SSH 密钥对。

流程

  1. 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 密钥。

  2. 创建 VirtualMachineSecret 对象:

    $ oc create -f <manifest_file>.yaml
  3. 启动虚拟机:

    $ 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
    # ...

Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

关于红帽文档

Legal Notice

Theme

© 2026 Red Hat
返回顶部