我创建了一个公共&的VPC。使用VPC向导的私有子网。我正在使用Elasticbeanstalk来部署我的应用程序。有两种环境:网络和工人层。
两种环境都是负载平衡的,并且启用了自动缩放。
网络层ELB
,NAT
& bastion host
位于VPC的公有子网中。
Web层EC2
,工作层EC2
和RDS
位于VPC的私有子网中。
所有实例都可以相互通信,私有实例可以通过NAT连接到Internet,一切正常。
我按照本指南:http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/AWSHowTo-vpc-bh.html一步一步地创建了一个堡垒主机。
在我的情况下,我想连接到堡垒主机并访问工作层中的EC2实例。因此,当我cd /var/app/current
时,我希望能够访问我的应用程序文件。
不知何故,我随机设法做到了。我很满意它所以我决定关闭实例(堡垒主机),因为当时我不需要它。两个小时后,我试图再次这样做,但就像我的大脑被擦除而无法工作一样。
当我ssh
到堡垒主机时,我得到一个空白的linux实例,而不是连接到工作层EC2。
编辑:我认为我需要HVM虚拟化,因此我选择了ami-892fe1fe
。当我ssh到机器时,我仍然无法$ cd /var/app
。
编辑:所有私有EC2实例都具有半虚拟化虚拟化,其AMI为ami-2918e35e
(由elasticbeanstalk设置)。
我在这两个小时内做了很多改变。我现在不确定我做了什么并且有效。
组合太多了,所以我会问一些事情:
ami-892fe1fe
,ami-2918e35e
。WorkerTier
角色。我尝试使用None
,aws-elasticbeanstalk-ec2-role
(由ElasticBeanstalk生成)和WorkerTierRole
,但都没有效果。 WorkerTierRole
只是一个特殊的IAM角色,允许EC2访问SQS和CloudWatch指标。以下是我的VPC的安全组(而不是bastion host
我将其命名为ssh
):
Group ID | Group Name | VPC ID | Description
sg-1de43178 | ssh | vpc-fa22c89f | bastion host
入站:SSH,TCP,22,0.0.0.0 / 0
出站:SSH,TCP,22,10.0.1.0 / 24
所有流量,全部,全部,0.0.0.0 / 0
Group ID | Group Name | VPC ID | Description
sg-2ffa2f4a | worker | vpc-fa22c89f | VPC Security Group
入站:所有流量,全部,全部,0.0.0.0 / 0
出站:所有流量,全部,全部,0.0.0.0 / 0
Group ID | Group Name | VPC ID | Description
sg-483ff52d | default | vpc-fa22c89f | default VPC security group
入站:所有流量,全部,全部,sg-483ff52d(默认)
所有流量,全部,全部,sg-1de43178(ssh)
出站:所有流量,全部,全部,0.0.0.0 / 0
Group ID | Group Name | VPC ID | Description
sg-d23ff5b7 | awseb....... | vpc-fa22c89f | Load Balancer Security Group
入站:HTTP,TCP,80,0.0.0.0/0
出站:HTTP,TCP,80,0.0.0.0/0
Group ID | Group Name | VPC ID | Description
sg-db3ff5be | awseb....... | vpc-fa22c89f | VPC Security Group (for web)
入站:HTTP,TCP,80,sg-d23ff5b7(awseb -......)
出站:HTTP,TCP,80,0.0.0.0/0
堡垒主机属于安全组ssh
。 NAT实例属于default
。 Worker实例属于sg-2ffa2f4a,sg-483ff52d。 Web实例属于sg-db3ff5be,sg-483ff52d。
我真的不知道我在这里失踪了什么。任何想法都将受到高度赞赏!
编辑:当我连接到blank
堡垒主机时,我尝试了各种命令来连接到我的工作室实例:
$ ssh ec2-user@10.0.1.174
$ ssh ec2-user@ip-10-0-1-174.eu-west-1.compute.internal
$ yum install telnet; telnet 10.0.1.174 22
前两个命令给了我一个公钥错误(这里不足为奇)。我不确定将公钥导入堡垒主机的最佳方式是什么以及安全性如何。
键入字符后的第三个命令会抱怨协议不匹配。
答案 0 :(得分:0)
解决方案是在Worker Tier中的ElasticBeanstalk中创建一个新环境,方法是选择加载worker配置&将工作者应用程序推送到VPC内部,但是在公共子网中,以便我可以通过SSH访问它。
这样,实例就可以使用我需要的应用程序文件,同时仍然可以访问数据库。
修改强>
可以通过NAT编辑iptables
并使用端口转发到connect to a private instance。
获得的经验教训:
有时会出现问题的替代解决方案,我们无法看到它们,因为我们不会立即考虑开箱即用。