使用配置文件 (.ebextensions) 在自定义 VPC 中为 TCP 直通配置 Elastic Beanstalk 环境的负载均衡器

Posted

技术标签:

【中文标题】使用配置文件 (.ebextensions) 在自定义 VPC 中为 TCP 直通配置 Elastic Beanstalk 环境的负载均衡器【英文标题】:Configuring an Elastic Beanstalk environment's Load Balancer for TCP Passthrough in a custom VPC with config files (.ebextensions) 【发布时间】:2017-08-16 19:36:54 【问题描述】:

我已尝试关注此特定文档

http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/https-tcp-passthrough.html

我的特殊需求没有运气。需要的是从我们的代理服务器通过 ELB 的第 4 层 TCP 直通,直到 Tomcat 后端才终止 SSL。入口端口是 TCP 443,出口是 8443。还需要使用自定义 VPC 而不是默认值。这如何利用配置文件来实现?

【问题讨论】:

【参考方案1】:

我能够使用以下配置文件解决:

https-instance-balancer.config

    
        "Resources": 
            "AWSEBSecurityGroup": 
                "Type": "AWS::EC2::SecurityGroup",
                "Properties": 
                    "VpcId": "vpc-xxxxxxxx",
                    "GroupDescription": "EC28443Ingress",
                    "SecurityGroupIngress": [
                        
                            "IpProtocol": "tcp",
                            "FromPort": 8443,
                            "ToPort": 8443,
                            "CidrIp": "0.0.0.0/0"
                        
                    ]
                
            ,
            "AWSEBLoadBalancerSecurityGroup": 
                "Type": "AWS::EC2::SecurityGroup",
                "Properties": 
                    "VpcId": "vpc-xxxxxxxx",
                    "GroupDescription": "ELB443and8443Ingress",
                    "SecurityGroupIngress": [
                        
                            "IpProtocol": "tcp",
                            "FromPort": 443,
                            "ToPort": 443,
                            "CidrIp": "0.0.0.0/0"
                        
                    ],
                    "SecurityGroupEgress": [
                        
                            "IpProtocol": "tcp",
                            "FromPort": 8443,
                            "ToPort": 8443,
                            "CidrIp": "0.0.0.0/0"
                        
                    ]
                
            ,
            "AWSEBLoadBalancer": 
                "Type": "AWS::ElasticLoadBalancing::LoadBalancer",
                "Properties": 
                    "Listeners": [
                        
                            "LoadBalancerPort": 443,
                            "Protocol": "TCP",
                            "InstancePort": 8443,
                            "InstanceProtocol": "TCP"
                        
                    ],
                    "SecurityGroups": [
                        
                            "Fn::GetAtt": [
                                "AWSEBLoadBalancerSecurityGroup",
                                "GroupId"
                            ]
                        
                    ]
                
            
        
    

https-lb-passthrough.config

    
      "option_settings": 
        "aws:elb:listener:443": 
          "ListenerProtocol": "TCP",
          "InstancePort": 8443,
          "InstanceProtocol": "TCP"
        ,
        "aws:elb:healthcheck": 
          "Target": "TCP:8443"
        
      
    

使用 Terraform 等软件可能更容易实现这一点,但对于某些人来说,这可能不是一个选择。

【讨论】:

您会认为 A) 这是一个常见的用例,并且 B) AWS 提供的文档将包含这样一个示例。我整天都在努力让他们的示例与 Play 一起工作,因为它不是以 root 身份启动的,因此可以访问默认端口 - ergo 必须准确地执行上述操作 - 几乎按原样使用你的文件并立即工作!谢谢。 该死!从头开始 - 结果我不小心连接到了 ec2 实例而不是前端负载均衡器。似乎您已经以某种方式使实例在端口 443 上提供服务(如果我可以让 ELB 与之对话,这可能很有用 - 完全不确定证书是如何提供的(我可能会正确添加)但是它是否正在以某种方式接收它)......回到头部敲打......

以上是关于使用配置文件 (.ebextensions) 在自定义 VPC 中为 TCP 直通配置 Elastic Beanstalk 环境的负载均衡器的主要内容,如果未能解决你的问题,请参考以下文章

如何使用配置文件 (.ebextensions) 在 AWS Elastic Beanstalk 上安装 PHP IMAP 扩展?

从 .ebextensions 配置文件访问 Elastic Beanstalk 环境属性

如何在 .ebextensions 配置中使用条件(AWS Elastic Beanstalk)

使用 .ebextensions 创建 WaitConditionHandle

Elastic Beanstalk 单实例 SSL .ebextensions 配置文件不起作用

我应该在配置文件 (.ebextensions) 或保存的配置下放置弹性 beanstalk 选项吗?