![使用内部 IP 地址在 EC2 中运行 TeamCity 服务器和代理](https://linux22.com/image/796601/%E4%BD%BF%E7%94%A8%E5%86%85%E9%83%A8%20IP%20%E5%9C%B0%E5%9D%80%E5%9C%A8%20EC2%20%E4%B8%AD%E8%BF%90%E8%A1%8C%20TeamCity%20%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%92%8C%E4%BB%A3%E7%90%86.png)
我正在 EC2 中设置一个带有 SVN 服务器的 TeamCity 集群,并希望使用 TeamCity 的“云”功能在需要时启动新的代理。
我目前主要关心的是确保三类机器(TC 服务器、TC 代理和 SVN)之间的所有通信都使用内部 EC2 IP 地址,以使数据传输免费(请参阅EC2 定价页面,可用区域数据传输)。
对于 SVN 服务器来说这很容易,我可以将其私有 IP 地址放入 TeamCity Server 配置中。但是,对于 TeamCity 服务器 URL,我认为我需要输入外部 IP 地址,以便用户可以访问服务器。相同的 IP 地址会发送给新创建的代理,以便他们知道要与哪里进行通信。
因此,代理与服务器之间的通信将通过外部 IP 进行,从而产生数据传输成本。如何避免这种情况?
编辑
我在我的一个代理上运行了“dig”,给它提供了 TC 服务器的弹性 IP 地址,并得到了这个(注意,我稍微混淆了外部 IP)。那里没有内部 IP 地址。
[ec2-user@ip-10-166-9-94 ~]$ dig 54.243.x.y
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.10.rc1.25.amzn1 <<>> 54.243.x.y
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 60896
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0
;; QUESTION SECTION:
;54.243.x.y. IN A
;; AUTHORITY SECTION:
. 10800 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2012111500 1800 900 604800 86400
;; Query time: 38 msec
;; SERVER: 172.16.0.23#53(172.16.0.23)
;; WHEN: Thu Nov 15 18:10:09 2012
;; MSG SIZE rcvd: 106
答案1
您无需设置域/DNS。如果您分配了弹性IP,则可以使用弹性IP公共DNS名称,如果您从外部查询,它将解析为外部IP,如果您从其他EC2实例查询,它将解析为内部地址。
因此,如果我的弹性 IP 为 54.254.54.54,则公共主机名是 ec2-54-254-54-54.us-west-2.compute.amazonaws.com。如果您在内部查询,这将解析为内部 IP。
你能将您自己的主机名 (foo.domain.com) 命名为 CNAME,它将以相同的方式运行。