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

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

通过NAT实例实现外部访问AWS的ElastiCache资源的更多相关文章

  1. Django 中如何让外部访问本地的静态资源

    简单使用 在Django中打开一个入口,让别人可以访问media文件 在settings中配置 MEDIA_ROOT=os.path.join(BASE_DIR,'media') 在路由中配置 fro ...

  2. 浅谈iptables 入站 出站以及NAT实例

    --------------本文是自己工作上的笔记总结,适合的可以直接拿去用,不适合的,适当修改即可!--------------- iptbales默认ACCEPT策略,也称通策略,这种情况下可以做 ...

  3. 【转载】浅析从外部访问 Kubernetes 集群中应用的几种方式

    一般情况下,Kubernetes 的 Cluster Network 是属于私有网络,只能在 Cluster Network 内部才能访问部署的应用.那么如何才能将 Kubernetes 集群中的应用 ...

  4. SignalR入门之从外部访问持久性连接或Hub

    有的时候,需要从外部访问持久性连接或Hub服务. 比如,假设A和B两个客户端正在聊天,那么系统或第三方在不参与聊天的情况需要为他们发送系统消息,那么此时,就需要独立来访问持久性连接或Hub服务. 之前 ...

  5. [转帖] 外部访问k8s 里面pod的方式方法

    https://jimmysong.io/posts/accessing-kubernetes-pods-from-outside-of-the-cluster/ 从外部访问Kubernetes中的P ...

  6. MySQL8.0允许外部访问

    MySQL8.0允许外部访问     版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/h99 ...

  7. centos7 打开mysql 3306端口并 设置外部访问

    mysql安装后默认是localhost访问,如果需要外部访问可以设置一个新的账号把host改为%,意味着所有ip均可以访问 grant all privileges on *.* to 'outUs ...

  8. IIS Express 配置外部访问

    IIS Express是Visual Stuido自带的微型Web服务器,简单易用. IIS Express默认只允许本机访问,通过Visual Studio调试Web程序时,我们有时需要通过外部访问 ...

  9. ubuntu系统lamp环境搭建、数据库迁移、设置数据库外部访问

    sudo passwd root设置两次密码su输入设置的密码exit (退出root帐号) 1.sudo apt-get update 2.sudo apt-get install apache2 ...

随机推荐

  1. [THINKPHP] 温故知新之getFieldBy

    1.getFieldBy id name 1 Mike 需求1:想要获取Mike M('table')->getFieldById('1','name'); 需求2:想要获取id的值1 M('t ...

  2. MySQL workbench中的PK,NN,UQ,BIN,UN,ZF,AI说明

    - PK: primary key (column is part of a pk) 主键- NN: not null (column is nullable) 是否为空  (非空)- UQ: uni ...

  3. C++中cin、cin.get()、cin.getline()、getline()、gets()等函数的用法(转)

    学C++的时候,这几个输入函数弄的有点迷糊:这里做个小结,为了自己复习,也希望对后来者能有所帮助,如果有差错的地方还请各位多多指教(本文所有程序均通过VC 6.0运行) 1.cin 2.cin.get ...

  4. 【BZOJ 1078】 1078: [SCOI2008]斜堆

    1078: [SCOI2008]斜堆 Description 斜堆(skew heap)是一种常用的数据结构.它也是二叉树,且满足与二叉堆相同的堆性质:每个非根结点的值都比它父亲大.因此在整棵斜堆中, ...

  5. [bzoj3244][noi2013]树的计数 题解

    UPD: 那位神牛的题解更新了,在这里. ------------------------------------------------------------------------------- ...

  6. 【树形dp】Treasure Hunt I

    [ZOJ3626]Treasure Hunt I Time Limit: 2 Seconds      Memory Limit: 65536 KB Akiba is a dangerous coun ...

  7. Educational Codeforces Round 6 D. Professor GukiZ and Two Arrays 二分

    D. Professor GukiZ and Two Arrays 题目连接: http://www.codeforces.com/contest/620/problem/D Description ...

  8. 移动应用安全开发指南(Android)--数据传输

    概述 移动应用很多时候并非孤立存在,在多数场景下存在前.后台以及第三方服务之间进行数据交互,因此,在网络中传输敏感数据在所难免,如果不使用正确安全的传输方式,有可能存在敏感信息泄漏的风险. 安全准则 ...

  9. <摘录>perl正则表达式中的元字符、转义字符、量词及匹配方式

    Linux平台上被广泛使用的正则表达式库PCRE - Perl-compatible regular expressions,从其名字即可知道,PCRE提供的是一套与Perl中相兼容的正则表达式. 元 ...

  10. Android获取apk的版本及包名等信息

    import android.app.Activity; import android.content.Context; import android.content.pm.ApplicationIn ...