通過NAT實例實現外部訪問AWS的ElastiCache資源


ElastiCache作為AWS的內存緩存組建可以說做的一點也不友好了,

你可以通過ElastiCache創建redis,memcache的實例,卻不能被外部訪問。

背景

人傻錢多的客戶總有人傻錢多的需求,他們本地做開發測試,需要用到redis,

於是他們決定在aws上創建一個redis的實例,用作本地開發測試。雖然我看不到價目表,但我想一台redis實例應該也得不少錢。

於是,我在public子網下創建了一個redis實例,原本以為可以通過終端節點的名稱加端口號來訪問到實例,結果我想多了。

官方給出的解釋是:

 

好吧,我不是有意吐槽,至少它還是給出了解決方法。

沒錯就是通過NAT實例

創建NAT實例

我們先來說說要求:

  • 首先你必須在相同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

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM