我有一个使用 Terraform 和 Openstack 的旧设置。通过 Terraform,密钥对将注入到 Openstack 实例中:
resource "openstack_compute_instance_v2" "bamboo_agent" {
name = var.agents[count.index].name
image_name = "${var.image}"
flavor_name = "${var.flavor}"
key_pair = "${openstack_compute_keypair_v2.bamboo_ssh[0].name}"
user_data = "${file("scripts/init_instance.cfg")}"
network {
port = "${openstack_networking_port_v2.bamboo[count.index].id}"
}
count= length(var.agents)
}
并且在脚本/init_instance.cfg将会添加以下键:
ssh_authorized_keys:
- ssh-rsa ...
据我所知,这两种方法的效果都一样,对吧?我需要两种方法吗?删除其中一个还不够吗?
我想删除密钥对并通过ssh_authorized_keys
默认帐户添加密钥,并通过users:
cloud-init 中的其他帐户添加密钥。
答案1
实际上他们应该做同样的事情,但据我所知他们不会同时应用。
cloud-init 在用于创建新实例的镜像/模板中运行,并在首次启动时使用实例特定设置自定义模板。Cloud-init 很早就调用 OpenStack 元数据提供程序,并下载元数据,例如 OpenStack ssh 密钥和您的用户数据/云配置脚本scripts/init_instance.cfg
我认为将首先应用来自 OpenStack 的 SSH 密钥。
由于它在接受密钥之前会验证密钥,因此依靠 OpenStack 部署密钥应该非常强大和可靠。但是 OpenStack 有一个限制,即它只允许您分配一个密钥来部署到实例。
像您这样的用户数据/云配置脚本scripts/init_instance.cfg
是 cloud-init 最后执行的脚本。cloud
-config 没有一个密钥的限制,并且允许您分配多个 ssh 密钥并执行许多其他配置任务。
OpenStack 部署密钥可能会有所帮助,以防万一云配置脚本包含无效的 yaml 并且完全失败;那么您仍然应该有一个可以访问和调试的实例......