我正在创建一套自我训练练习和指南(也许最终会成为视频或 Slideshare 演示文稿的集合),涵盖一系列系统管理和“操作”相关主题。
我的计划是制作原型并展示它们,主要假设学生将创建 AWS 账户并使用 EC2 实例和一组有限的相关资源来完成示例。我建议学生使用一些较便宜的 VPS 提供商(例如 Linode)创建一个基本实例,作为他们大部分工作的“大本营”,然后在每次练习期间启动实例(大多数是 t1.micro,如果可能的话),并在每次工作结束后关闭它们。(目标是让学生能够负担自己的专业教育费用……所以我将花费额外的精力进行实践和练习课程设计,以最大限度地降低服务成本)。
该计划将主要根据需要使用适用于 CentOS、Debian、Ubuntu 和 FreeBSD 的免费 AWS Marketplace AMI。(我最终也会探索替代云,除非 Amazon Inc. 来赞助我的项目)——尽管我可能会基于这些创建一些自定义 AMI,并将它们作为我产品的一部分发布到 Marketplace。
早期课程将强调使用 Python Boto(这是我目前最熟悉的),我正在构建的一些工具将帮助管理每个学生创建的基础设施……我将让学生在大多数练习中使用 Ansible(用于会话设置和实例集合的拆卸)。一套课程将讲授 Puppet,另一套课程将讲授 Chef。大多数后期课程(Hadoop、Cassandra、MongoDB、Zookeeper)将(要求/假设?)学生使用其中之一构建集群。
这终于引出了我的问题。(抱歉,我的开场白有些冗长,但我觉得有必要先介绍一下背景)。
昨晚我设置了最简单的 Puppet(版本 3)配置,这对系统管理的学生来说可能很有用。一对 CentOS 6.4 实例,一个作为 puppetmaster,另一个作为客户端。我使用丑陋的 ec*.internal 名称(在 hosts 文件和配置中)将它们连接在一起。然后进行更改(在我的 site.pp 清单中创建用户、组和 ssh 密钥条目)并确认它们正在运行(在客户端上运行 puppet agent --test 命令)。当然,最大的障碍是:更改安全组配置,禁用默认 CentOS IPTables 配置,禁用 SELinux 强制模式,并摆弄dns_alt_names =
puppetmaster 的 /etc/puppet/puppet.conf 中的指令。(稍后我将弄清楚如何正确授予 Ruby/Apache/Passenger 组件必要的 SELinux 权限以重新启用 SELinux)。
今晚,当我准备继续之前的工作时,我才意识到(虽然有些迟了),我确实需要稳定的 IP 和反向 DNS 来支持这个模型。在每次工作开始时,都必须重新配置 Puppet Master 并重新生成其 PEM 证书以及所有客户端的证书,这是一件非常繁琐而没有教育意义的事情(而且编写所有这些脚本几乎不适用于任何正常的未来工作环境)。
所以,呃,需要分配一个弹性 IP(至少一个)并为其请求一个反向 DNS 条目...或者我需要重新制定我的假设并根据一组先决条件的 VPC 设置课程进行这些练习。
现在,我刚刚设置了 EIP 并输入了 PTR 覆盖请求(顺便说一句,这似乎在亚马逊的工作流程中与某些 STMP 启用请求表单混淆了)。
我正在寻找建议,关于是否应该围绕 VPC 执行此操作(并预测在该虚拟网络内设置 DNS 服务器的课程,可能至少最初托管在 puppetmaster 本身上)或者是否应该围绕使用一个或两个通用命名的弹性 IP 来构建课程(并且可能稍后将 puppetmaster 服务迁移到 HAProxy 或类似前端后面,作为不同的练习)。
有建议吗?批评吗?
答案1
您应该使用 VPC,并且主机应位于默认网关为 VPC Internet 网关的子网中。有两种方法可以确保目标环境对于所有学习您课程的人来说都是相同的:
- 让他们运行云形成模板负责完成所有繁重的工作并配置 VPC 的所有组件。有许多示例模板你可以从这里借用。
- 使用 shell 和aws-cli、python 和 boto 或 ruby 和 fog 完成所有繁重工作并配置 VPC 的所有组件
新功能允许启动时分配的公共 IP 地址,您仍然可以远程访问所有系统,无需 EIP 或跳转主机,而且还可以通过静态内部 VPC 地址来寻址系统。
关于 DNS,我认为启用 DNS 主机名功能应该对你有帮助,但我还没有广泛使用过它。