12

tôi muốn chạy một Docker trong một trường hợp EC2 với AWS API, và tôi có một Dockerrun.aws.json như thế này:AWS đàn hồi Beanstalk, Dockerrun.aws.json và nhiều cổng vào Docker chạy

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

Giống như bạn có thể thấy, tôi có nhiều cổng để lộ ra, nhưng beanstalk đàn hồi chỉ phơi bày đầu tiên của chúng.

Tôi tìm thấy câu này trong tài liệu: Bạn có thể chỉ định nhiều cổng container, nhưng AWS Elastic Beanstalk chỉ sử dụng cổng đầu tiên để kết nối vùng chứa của bạn với proxy ngược của máy chủ và yêu cầu tuyến từ Internet công cộng.

Câu hỏi của tôi là lý do tại sao?

Tôi có xác thực sử dụng giao thức Oauth2 và tôi phải sử dụng giao thức HTTPS vì lý do bảo mật rõ ràng. Với giới hạn này, tôi chỉ có thể chọn HTTP hoặc HTTPS, vì tôi chỉ có thể hiển thị cổng 80 hoặc 443.

Tôi đã cố gắng sửa đổi các chuyển hướng nginx với cổng ở cấp EC2, nhưng tôi đã thất bại . Tôi có thể làm gì?

Người dùng stackoverflow này có cùng vấn đề. Exposing multiple ports from Docker within Elastic Beanstalk

Cám ơn bạn trước

Trả lời

9

tôi đã liên lạc với Trung tâm hỗ trợ Amazon, và tôi đã chọn để cho bạn thấy những câu trả lời.

Xin chào K ...,

Với Dockerrun.aws.json, đàn hồi Beanstalk kịch bản móc sẽ chỉ đọc cảng đầu tiên từ tệp JSON.

Điều này là do trong /opt/elasticbeanstalk/hooks/appdeploy/pre/04run.sh:

nếu [echo $EB_CONFIG_DOCKER_PORT | wc -w -gt 1]; sau đó EB_CONFIG_DOCKER_PORT = echo $EB_CONFIG_DOCKER_PORT | awk '{print $1}' cảnh báo "Chỉ có một vạch trần chỉ được cho phép, sử dụng đầu tiên: $ EB_CONFIG_DOCKER_PORT" fi

Các kịch bản móc sẽ phải chỉ định một cổng ngẫu nhiên cho điều ngược lại proxy để chuyển tiếp đến, sau đó chuyển tiếp vào cổng của vùng chứa Docker của bạn. Hiện tại chỉ có một bản đồ cổng có thể được thiết lập.

Liên quan đến cấu hình nginx, cách nhanh nhất để đạt được một cổng 443 nghe môi trường của bạn là để tạo ra một phần máy chủ riêng biệt trong /etc/nginx/conf.d/ ví dụ custom-ssl.conf, xử lý việc bắt tay HTTPS với khách hàng. Điều này có nghĩa là bạn sẽ phải đặt chứng chỉ SSL của mình lên cá thể sao cho nginx có thể thực hiện bắt tay SSL. Tôi sẽ liên hệ lại với bạn sau bằng một cấu hình HTTPS mẫu trong nginx.

Nếu không, nếu môi trường của bạn là cân bằng tải, bạn có thể chỉ cần thiết lập trình nghe HTTPS trên ELB và để ELB xử lý việc chấm dứt SSL .

Trong khi đó, nếu bạn có câu hỏi khác, xin đừng ngần ngại hỏi!

Trân trọng,

Trung Tâm Hỗ Trợ Sydney

*

Xin chào một lần nữa K ...,

Như tôi đã đề cập trong thư trước đây của tôi, xin vui lòng tìm đính kèm tệp cấu hình mẫu .ebextensions sẽ thiết lập máy chủ https trên nginx, vào một môi trường Docker dụ duy nhất. Bạn đã không cho tôi biết bạn đang tìm hiểu môi trường nào, vì vậy, đính kèm .bextensions sẽ chỉ hoạt động trên các môi trường thể hiện đơn lẻ.

này .ebextensions tập tin cấu hình thực hiện như sau:

  • Thêm máy chủ https tập tin cấu hình cho nginx như /etc/nginx/sites-enabled/https.conf, mà đảo ngược proxy phiên https đến vào vùng chứa Docker là http.

  • Thêm tệp kết hợp SSL/cert vào /etc/pki/tls/certs/my_ssl.crt, được yêu cầu bởi máy chủ HTTPS ở trên.

  • Thêm một quy tắc xâm nhập thêm vào nhóm an ninh EC2 môi trường của cây đậu để cho phép TCP đến: 443 kết nối đến dụ

Xin vui lòng thay đổi .ebextensions tập tin cấu hình cho phù hợp với trường hợp sử dụng của bạn và đặt thư mục này bên trong thư mục .ebextensions/ở cấp độ gốc của ứng dụng của bạn để được triển khai trong Cây đậu đàn hồi. Nếu thư mục không có ở đó, hãy tạo nó.

Để biết thêm thông tin về các file cấu hình .ebextensions, vui lòng xem:

Nếu bạn đang ở trên một môi trường cân bằng tải, sau đó bạn sẽ cần phải tải lên chứng chỉ SSL của bạn để IAM thông qua AWS CLI và định cấu hình ELB của môi trường của Beanstalk của bạn để bật trình nghe HTTPS của nó. Các hướng dẫn sẽ khác nhau với những cái ở trên:

Xin vui lòng cho tôi biết làm thế nào bạn đi với .ebextensions tập tin cấu hình, và cho tôi biết nếu bạn cần hỗ trợ thêm!

Trân trọng,

Trung Tâm Hỗ Trợ Sydney

Và ông đã cho tôi một ví dụ trong tập tin đính kèm. 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 
Các vấn đề liên quan