Amazon web services AWS Elastic Beanstalk、Dockerrun.AWS.json和docker上的多个端口运行

Amazon web services AWS Elastic Beanstalk、Dockerrun.AWS.json和docker上的多个端口运行,amazon-web-services,nginx,amazon-ec2,docker,amazon-elastic-beanstalk,Amazon Web Services,Nginx,Amazon Ec2,Docker,Amazon Elastic Beanstalk,我希望使用AWS API在EC2实例中运行docker,我有一个类似的示例: { “awsebdockerversion”:“1”, “身份验证”:{ “桶”:“桶”, “键”:“.dockercfg” }, “图像”:{ “姓名”:“, “更新”:“正确” }, “港口”:[ { “集装箱港口”:“80” }, { “集装箱港口”:“443” } ] } 如您所见,我有多个端口要公开,但elastic beanstalk只公开第一个端口 我在文档中发现了这样一句话:您可以指定多个容器端口,但

我希望使用AWS API在EC2实例中运行docker,我有一个类似的示例:

{
“awsebdockerversion”:“1”,
“身份验证”:{
“桶”:“桶”,
“键”:“.dockercfg”
},
“图像”:{
“姓名”:“,
“更新”:“正确”
},
“港口”:[
{
“集装箱港口”:“80”
},
{
“集装箱港口”:“443”
}
]
}
如您所见,我有多个端口要公开,但elastic beanstalk只公开第一个端口

我在文档中发现了这样一句话:您可以指定多个容器端口,但AWS Elastic Beanstalk仅使用第一个端口将您的容器连接到主机的反向代理并路由来自公共Internet的请求

我的问题是为什么

我有一个使用Oauth2协议的身份验证,出于明显的安全原因,我必须使用HTTPS协议。 有了这个限制,我只能选择HTTP或HTTPS,因为我只能公开端口80或443

我试图修补ebextensions,使nginx重定向具有EC2实例级别的端口,但失败了。 我该怎么办

这个stackoverflow用户也有同样的问题。


提前感谢您

我联系了亚马逊支持中心,并选择向您展示答案

你好,K

对于dockrun.aws.json,Elastic Beanstalk钩子脚本将只读取 JSON文件中的第一个端口

这是因为在/opt/elasticbeanstalk/hooks/appdeploy/pre/04run.sh中:

如果[
echo$EB_CONFIG_DOCKER_PORT|wc-w
-gt 1];然后 EB_CONFIG_DOCKER_PORT=
echo$EB_CONFIG_DOCKER_PORT | awk'{print$1}'
warn“仅允许使用一个EXPOSE指令,使用第一个指令: $EB\u配置\u码头装卸工\u端口“fi

钩子脚本必须为反向指定一个随机端口 要转发到的代理,然后转发到Docker容器的 港口。目前只能设置一个端口映射

关于nginx配置,实现 端口443侦听您的环境是为了创建一个单独的服务器 /etc/nginx/conf.d/e.g.custom-ssl.conf中的部分,该部分处理 与客户端的HTTPS握手。这意味着你必须 将SSL证书放在实例上,以便nginx可以 执行SSL握手。我稍后会给你一个样品 nginx中的HTTPS配置

否则,如果您的环境是负载平衡的环境,您可以 在ELB上设置HTTPS侦听器,并让ELB处理SSL 终止

同时,如果您还有其他问题,请随时提问

致以最良好的祝愿

悉尼支持中心

*

你好,K

正如我在以前的信件中提到的,请 附加了一个示例.ebextensions配置文件,该文件将设置https nginx上的服务器,在单实例Docker环境中。你没有 让我知道您询问的环境,以便 附加的.ebextensions将仅在单实例环境中工作

此.ebextensions配置文件执行以下操作:

  • 将nginx的https服务器配置文件添加为/etc/nginx/sites enabled/https.conf,该文件反向代理 将https会话作为http发送到Docker容器

  • 根据上述HTTPS服务器的要求,将SSL密钥/证书组合文件添加到/etc/pki/tls/certs/my_SSL.crt中

  • 向Beanstalk环境的EC2安全组添加额外的入口规则,以允许传入到实例的TCP:443连接

请随意修改.ebextensions配置文件以适合您的需要 用例,并将其放在 要在Elastic Beanstalk中部署的应用程序的根级别。如果 目录不存在,请创建它

有关.ebextensions配置文件的详细信息,请参阅:

如果您在负载平衡的环境中,那么您需要 通过AWS CLI将SSL证书上载到IAM,并配置 Beanstalk环境的ELB以启用其HTTPS侦听器。这个 说明将与上述说明不同:

请让我知道如何使用.ebextensions配置文件,以及 如果您需要进一步帮助,请告诉我

致以最良好的祝愿

悉尼支持中心

他在附件中给了我一个例子。01-nginx-ssl.config

files:
  "/etc/nginx/sites-enabled/https.conf":
    mode: "000644"
    owner: root
    group: root
    content: |
      server {
        listen  443 ssl;
        ssl_certificate_key /etc/pki/tls/certs/my_ssl.crt;
        ssl_certificate /etc/pki/tls/certs/my_ssl.crt;
        ssl_protocols       SSLv3 TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers         HIGH:!aNULL:!MD5;

        location / {
          proxy_pass          http://docker;
          proxy_http_version  1.1;

          proxy_set_header    Connection          $connection_upgrade;
          proxy_set_header    Upgrade             $http_upgrade;
          proxy_set_header    Host                $host;
          proxy_set_header    X-Real-IP           $remote_addr;
          proxy_set_header    X-Forwarded-For     $proxy_add_x_forwarded_for;
        }
      } 

  "/etc/pki/tls/certs/my_ssl.crt":
    mode: "000400"
    owner: root
    group: root
    content: |
      <Your key/cert pair goes here>


Resources:
  AllowSSL: 
    Type: AWS::EC2::SecurityGroupIngress
    Properties:
      GroupId: {Ref : AWSEBSecurityGroup}
      IpProtocol: tcp
      ToPort: 443
      FromPort: 443
      CidrIp: 0.0.0.0/0
文件:
“/etc/nginx/sites enabled/https.conf”:
模式:“000644”
所有者:root
组:根
内容:|
服务器{
听443ssl;
ssl_certificate_key/etc/pki/tls/certs/my_ssl.crt;
ssl_certificate/etc/pki/tls/certs/my_ssl.crt;
ssl_协议SSLv3 TLSv1 TLSv1.1 TLSv1.2;
ssl_密码高:!aNULL:!MD5;
地点/{
代理通行证http://docker;
proxy_http_版本1.1;
代理设置头连接$Connection\u升级;
代理设置头升级$http\U升级;
代理设置头主机$Host;
代理集头X-Real-IP$remote\u addr;
proxy\u set\u header X-Forwarded-For$proxy\u add\u X\u Forwarded\u For;
}
} 
“/etc/pki/tls/certs/my_ssl.crt”:
模式:“000400”
所有者:root
组:根
内容:|
资源:
AllowSSL:
类型:AWS::EC2::SecurityGroupIngress
特性:
GroupId:{Ref:AWSEBSecurityGroup}
IpProtocol:tcp
托波特:443
FromPort:443
CidrIp:0.0.0.0/0