使用Ansible获取GCP Compute Engine虚拟机的外部IP地址
问题解答
1. <ip a>字段含义解释
SSH_CONNECTION是远程主机SSH服务内置的会话环境变量,固定格式为客户端IP 客户端端口 服务端监听IP 服务端监听端口,其中<ip a>就是你运行Ansible命令的控制节点的公网出口IP,是SSH连接的发起方地址,和GCP虚拟机本身的IP没有关系。
2. 获取GCP Compute Engine虚拟机外部IP的可行方案
你之前的方法无法获取外网IP的原因是:GCP的公网IP是绑定在云平台网络层面的,不是直接配置在虚拟机操作系统的网卡上,虚拟机内部的系统级变量、网卡信息默认只能看到内网IP,需要通过以下两种方式获取:
- 方法1:调用GCP内置元数据接口获取(无需额外权限、无需调整Inventory配置)
可以直接在Ansible中通过任务获取元数据返回的公网IP,示例任务如下:
获取后可以通过- name: 获取GCP虚拟机外部IP ansible.builtin.shell: | curl -H "Metadata-Flavor: Google" http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/0/access-configs/0/external-ip register: gcp_external_ip{{ gcp_external_ip.stdout }}调用这个公网IP值,如果虚拟机配置了多个网卡、多个公网IP,调整元数据路径中network-interfaces/和access-configs/后的序号即可获取对应公网IP。 - 方法2:通过GCP动态Inventory直接读取
如果你使用GCP官方提供的gcp_compute动态Inventory来管理资产,外部IP会被自动采集到主机变量中,直接引用变量{{ hostvars[inventory_hostname].gcp_compute_networkInterfaces[0].accessConfigs[0].natIP }}即可获取。
内容的提问来源于stack exchange,提问作者GreatOrdinary
相关产品推荐
相关产品推荐

