使用ansible访问仅具有私有IP的Azure VM

时间:2019-06-07 10:13:30

标签: azure ansible

在Azure上,我有一个资源组,其中1个vnet包含2个服务器;主人和工人。只有主服务器拥有公共IP。

使用“普通”命令,我可以通过在ansible_host文件中将工作人员的私有IP定义为hosts并使用ssh ProxyCommand参数创建一个group_vars文件来申请工作人员的私有IP来管理这两个服务器组,如此处针对jump host所述(请注意,还有一些较旧的方法也涉及直接ssh配置,但我认为group_vars方法更可取,因为它对其他用户更易携带)。

但是,这种方法需要对IP进行硬编码,这在Azure上并不理想。有一个azure_rm scriptplugin(取决于ansible版本),它们将提供动态清单,避免了需要hosts文件的问题,但是我该怎么做,相当于ProxyCommand的设置情况?

这种情况一定很普遍,所以我觉得我一定很想念东西。

1 个答案:

答案 0 :(得分:0)

堡垒主机

要在Ansible中使用代理/堡垒主机/跳转主机,您需要在ansible_ssh_common_args中指定ansible.cfg(或在环境变量中,请参阅Ansible文档的Configuration部分)。< / p>

您可以在all组级别的静态广告资源中进行设置以对此进行试验(更容易在没有动态广告资源的情况下尝试此方法)-有关更多详细信息,请参见this blog

[all:vars]
ansible_ssh_common_args='-o ProxyCommand="ssh -W %h:%p my-bastion.example.com"'

完成此操作后,您可以使用动态广告资源-创建文件group_vars/all.yml(首先对静态广告资源进行测试),然后将上述INI格式的广告资源转换为YAML(将=更改为{{ 1}})。

:

使用具有动态清单的私有IP

要确保清单输出中的ansible_ssh_common_args: '-o ProxyCommand="ssh -W %h:%p my-bastion.example.com"' 使用私有IP,您必须使用ansible_host(对于经典的export AZURE_USE_PRIVATE_IP=true清单脚本,尚未尝试使用插件清单)。 / p>

  • 没有这个,azure_rm.py可以为空或设置为公共IP /域名
  • 如果您使用解析为私有IP的域名,则可能不需要

测试动态库存

在开始将动态广告资源用于剧本之前,请确保测试动态广告资源是否生成了正确的JSON数据。

要检查特定的清单值是否映射到正确的主机,请尝试:

ansible_host

您还可以在调试时使用$ AZURE_USE_PRIVATE_IP=true ansible -i azure_rm.py mygroup -m debug -a var=ansible_host test01 | SUCCESS => { "ansible_host": "10.0.0.1" } 来检查Ansible SSH是否正在这样工作:

-vvvvv

经典vs基于插件的广告资源

我在这里使用了“经典” $ AZURE_USE_PRIVATE_IP=trueansible -i azure_rm.py mygroup -m debug -a var=ansible_host test01 | SUCCESS => { "changed": false, "ping": "pong" } 动态清单-相同的方法适用于基于插件的新动态清单(自Ansible 2.4起,包括清单缓存)。

要查看任一模式下的动态清单JSON输出:

  • 经典:azure_rm.py
  • 基于插件的:AZURE_USE_PRIVATE_IP=true python azure_rm.py | jq .

使用jq是可选的,它只是格式化输出以提高可读性。