我正在使用Cloudformation设置VPN节点并使用Saltstack进行配置。我们称它们为左右节点。在配置左节点时,我需要知道右节点的公共IP,反之亦然。有没有办法在Saltstack公式中检索另一个EC2实例的IP?两个实例都有与之关联的标签。
或者有不同的方法来实现这一目标吗?我只想省略任何硬编码。
答案 0 :(得分:2)
使用Salt的云提供商独立方式是使用Salt Mine。在这里,主人收集小兵的信息(例如关于IP地址)并使其可供其他小兵使用。 This link has an example for a load balancer configuration
此设置要求您运行Salt Master(无主设置在此处不起作用)。如果所有节点都可能想知道所有其他节点的IP地址,则您需要在知道所有IP地址后再次运行Salt配置,或者使用Salt Orchestrate确保收集所有minion的粒子,并且然后安装服务。
如果您希望IP地址定期更改,或者您计划使用定期进出的IP地址扩展您的基础架构(临时节点),Salt会建议Salt Reactor,但我认为Consul(见下文)可能根据您的情况设置起来要简单得多。
对于Consul,您将在每个节点上安装代理,并以直接的Salt方式在本地注册每个节点的服务。 Consul可以为您提供节点和服务的DNS解析。使用Consul Template,一旦IP地址发生变化或节点出现,它将重新编写您的配置并重新加载您的服务。您需要有一位Consul master来完成这项工作。 Consul online documentation非常好。我还写了一篇Consul/Salt/Cloud Tutorial,你可能会感兴趣。
答案 1 :(得分:1)
你可以在命令行中使用Saltstack shell来使用aws命令行工具吗?我们一直在Chef中执行此操作,以基于标记获取对其他资源的引用。
您可能希望为您的EC2实例执行调用IAM角色,并具有调用ec2:DescribeInstances操作的权限:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:DescribeInstances"
],
"Resource": [
"*"
]
}
]
}
然后你只需要向Salt添加一些内容以获取基于标记的实例信息:
aws --region us-east-1 ec2 describe-instances --filter Name=tag:MyTagKey,Values=MyTagValue --query Reservations[0].Instances[0].PublicIpAddress
请注意,从声音中你希望每个节点找到另一个(循环依赖),这样你就可能遇到竞争条件。你必须找到一种方法来人工延迟每次Salt运行,直到两个实例都使用公共IP运行。