经过NAT实例实现外部访问AWS的ElastiCache资源

ElastiCache做为AWS的内存缓存组建能够说作的一点也不友好了,redis

你能够经过ElastiCache建立redis,memcache的实例,却不能被外部访问。缓存

背景

人傻钱多的客户总有人傻钱多的需求,他们本地作开发测试,须要用到redis,安全

因而他们决定在aws上建立一个redis的实例,用做本地开发测试。虽然我看不到价目表,但我想一台redis实例应该也得很多钱。ssh

因而,我在public子网下建立了一个redis实例,本来觉得能够经过终端节点的名称加端口号来访问到实例,结果我想多了。tcp

官方给出的解释是:测试

 

好吧,我不是有意吐槽,至少它仍是给出了解决方法。3d

没错就是经过NAT实例blog

建立NAT实例

咱们先来讲说要求:ip

  • 首先你必须在相同vpc,相同子网下建立你的NAT实例以及你的缓存实例
  • 且所在子网必须是公有子网,啥叫公有子网就是在路由表中该子网必须绑定了internet网关(igw)
  • 而后你的NAT实例必须绑定一个弹性IP(EIP)

(可能你看到这就已经以为很麻烦了。。。)内存

 

环境准备:

接下来假设你在一个叫“TEST-VPC”下的“public-subnet”子网下建立了一个Redis的实例,你能够经过ping它的主机名以获取它的内网IP地址后面会用到。

好比你的redis的内网ip是:192.168.1.110   端口: 6379

而后咱们到EC2的界面选择——》实例——》启动实例

在选择AMI的时候搜索带有NAT标签的镜像(这里我就默认选择的第一个),资源怎么划分你们根据需求随意搭配

注意:

  • 选择和以前redis实例相同的VPC,以及相同的子网
  • 在建立安全组的时候开放TCP 6379的端口  以及ssh 22远程链接的端口

……省略建立EC2实例的过程

好比你已经建立好一个NAT实例了,IP地址为:192.168.1.120

接下来进入EC2界面——》弹性IP——》分配新地址,为你的实例关联一个弹性IP

到这里你已经成功了一大半了。

添加iptables规则

登陆到NAT实例,为 NAT 实例启用 IP 转发。如下命令可用于确认这一点:

cat /proc/sys/net/ipv4/ip_forward

启用假装:

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

将 iptables 规则添加到 NAT 实例。

必须为群集中的每一个节点将 iptables 规则添加到 NAT 表,以便将缓存端口从 NAT 实例转发到群集节点。

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 6379 -j DNAT --to 192.168.1.110:6379

你能够经过telnet测试是否成功:

telnet 203.0.113.73 6379

保存 iptables 配置。

在您测试和验证规则以后保存规则。若是您使用基于 Redhat 的 Linux 分发(例如 Amazon Linux),请运行如下命令:

service iptables save

到这里全部的配置就结束了

总结

接下来就是真正的吐槽时间了!

首先客户的提出的需求就已是一个另类的需求了,想必你们并很少见。

若是是本地开发测试,并不介意将你的redis建立在公有云上并经过公网访问。

其次,咱们来算一下你此次建立所需的花费:

  • redis实例
  • EC2实例
  • 弹性IP

您的测试环境成本真的大,/不是礼貌的微笑

相关文章
相关标签/搜索