【问题标题】:AWS Elastic Beanstalk, Dockerrun.aws.json and multiple ports on docker run [duplicate]AWS Elastic Beanstalk、Dockerrun.aws.json 和 docker run 上的多个端口 [重复]
【发布时间】:2015-03-07 01:49:16
【问题描述】:

我希望使用 AWS API 在 EC2 实例中运行 docker,并且我有一个 Dockerrun.aws.json,如下所示:

{
  "AWSEBDockerrunVersion": "1",
  "Authentication": {
    "Bucket": "<BUCKET>",
    "Key": ".dockercfg"
  },
  "Image": {
    "Name": "<NAME>:<TAG>",
    "Update": "true"
  },
  "Ports": [
    {
      "ContainerPort": "80"
    },
    {
      "ContainerPort": "443"
    }
  ]
}

如您所见,我有多个端口要公开,但弹性 beantalk 只公开其中的第一个。

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

我的问题是为什么?

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

我尝试修改 ebextensions 以使用 EC2 实例级别的端口进行 nginx 重定向,但我失败了。 我该怎么办?

这个 stackoverflow 用户也有同样的问题。 Exposing multiple ports from Docker within Elastic Beanstalk

提前谢谢你

【问题讨论】:

    标签: amazon-web-services nginx amazon-ec2 docker amazon-elastic-beanstalk


    【解决方案1】:

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

    你好 K...,

    使用 Dockerrun.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_CONFIG_DOCKER_PORT" 文件

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

    关于nginx的配置,最快的实现方式 443端口监听你的环境是创建一个单独的服务器 /etc/nginx/conf.d/ 中的部分,例如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,反向代理 以 http 形式传入 Docker 容器的 https 会话。

    • 将 SSL 密钥/证书组合文件添加到上述 HTTPS 服务器所需的 /etc/pki/tls/certs/my_ssl.crt 中。

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

    请随意修改 .ebextensions 配置文件以适合您的 用例,并将其放在 .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
    

    【讨论】:

      猜你喜欢
      • 2019-11-14
      • 2015-02-13
      • 2020-07-23
      • 2018-02-08
      • 2019-06-09
      • 2014-11-07
      • 2017-11-18
      • 2014-12-22
      • 2017-07-26
      相关资源
      最近更新 更多