經過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

您的測試環境成本真的大,/不是禮貌的微笑

相關文章
相關標籤/搜索