我的目标是在 Google 云中创建一个计算引擎实例,从中我可以运行 ansible 脚本来进一步创建将通过 GKE 运行容器的其他实例。
我已经想通了一些事情:
- 如何创建可以运行 ansible 和 gce.py 的实例
- 如何赋予该实例足够的权限来调用 apache-cloudlib
- ansible 使用 inventory 中的 'ansible_ssh_host' 来建立连接
py可以使用外部 IP 地址,也可以使用内部 IP 地址,具体取决于 shell 变量 INVENTORY_IP_TYPE 的值。
计算引擎环境均未将上述两者配置为使用由 gcloud compute ssh-config 生成的 SSH 密钥,如下所示:
Host compute-instance.us-central1-a.project-name
Hostname 99.99.99.99
IdentityFile /home/user/.ssh/google_compute_engine
*其中 99.99.99.99 是公共 IP 地址
最终结果是,我可以通过 ssh 连接到 compute-instance.us-central1-a.project-name,但不能连接到公共 IP、99.99.99.99 或私有 IP,而无需指定私钥文件( google_compute_engine ),因为这不是 gce.py 脚本中的选项。
我可以通过将内部 IP 添加为主机的另一个条目来获得我想要的行为:
Host compute-instance.us-central1-a.project-name 10.128.0.2
..但是,配置文件中有一个注释,指出该文件是自动生成的(而不是做那件事):
# The following has been auto-generated by "gcloud compute config-ssh"
# to make accessing your Google Compute Engine virtual machines easier.
#
# To remove this blob, run:
#
# gcloud compute config-ssh --remove
...
# You should not hand-edit this section, unless you are deleting it.
#
是否存在已知的“正确”方法,可以让 gce.py 在 Google Cloud 内部运行,而无需破解脚本生成的 ansible_ssh_host 值?
答案1
Ansible 托管实例的配置规范在剧本中定义。剧本是 YAML 格式的文件,其中包含代表托管实例所需状态的任务集合。
Ansible 还需要管理实例的库存清单。您需要使用静态文件或动态库存插件来管理其库存。
可以使用用于应用剧本的 Ansible 命令来创建、管理和销毁 Compute Engine 资源:
ansible-playbook -i inventory.ini gce-playbook.yml
有关此事的更多信息,请参阅此帮助中心文章。