Amazon web services AWS Elastic Beanstalk、Dockerrun.AWS.json和docker上的多个端口运行
我希望使用AWS API在EC2实例中运行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只公开第一个端口 我在文档中发现了这样一句话:您可以指定多个容器端口,但
{
“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连接
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