2015-04-08 9 views
6

Quindi ho un'applicazione docker che gira sulla porta 9000, e mi piacerebbe che ci si acceda solo tramite https piuttosto che http, comunque non sembra che abbia alcun senso di come le porte amazon. In breve, vorrei solo esporre la porta 443 e non la 80 (sul livello di bilanciamento del carico e il livello dell'istanza), ma non sono stato in grado di farlo.Porte AWS Beanstalk e Docker = che tipo di buffonata è questa?

Quindi il mio Dockerfile ha:

EXPOSE 9000 

e la mia Dockerrun.aws.json ha:

{ 
    "AWSEBDockerrunVersion": "1", 
    "Ports": [{ 
     "ContainerPort": "9000" 
    }] 
} 

e non riesco ad accedere le cose tramite la porta 9000, ma dal 80 solo.

Quando eseguo ssh nell'istanza in cui il contenitore mobile è in esecuzione e cerco le porte con netstat ottengo le porte 80 e 22 e alcune altre porte udp, ma nessuna porta 9000. Come mai Amazon gestisce questo? Ancora più importante, in che modo un utente ottiene un comportamento previsto?

Anche questo tentativo con ssl e https restituisce la stessa cosa. I certificati sono impostati e mappati alla porta 443, ho anche creato un caso nei .ebextensions file di configurazione per aprire la porta 443 per l'istanza e ancora non ssl

sslSecurityGroupIngress: 
     Type: AWS::EC2::SecurityGroupIngress 
     Properties: 
     GroupName: {Ref : AWSEBSecurityGroup} 
     IpProtocol: tcp 
     ToPort: 443 
     FromPort: 443 
     CidrIp: 0.0.0.0/0 

L'unico modo che posso ottenere SSL al lavoro è per fare in modo che Load Balancer usi la porta 443 (ssl) che inoltra alla porta di istanza 80 (non https), ma questo è ridicolo. Come posso aprire la porta ssl sull'istanza e impostare la finestra mobile per utilizzare la porta specificata? Qualcuno l'ha mai fatto con successo?

Apprezzerei qualsiasi aiuto su questo - ho passato i documenti e sono arrivato a questo punto, ma questo mi imbarazza. In breve, vorrei solo esporre la porta 443 e non la 80 (sul livello di bilanciamento del carico e il livello dell'istanza), ma non sono stato in grado di farlo.

hanno un grande giorno

Acclamazioni

risposta

4

E 'noto problema, da http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_docker_image.html:

È possibile specificare più porti container, ma fagiolo magico elastico utilizza solo il primo per collegare il contenitore per il proxy inverso dell'host e le richieste di instradamento da Internet pubblica.

Quindi, se avete bisogno di più porte, AWS Elastic Beanstalk non è probabilmente la scelta migliore. Almeno l'opzione Docker.

Per quanto riguarda SSL, l'abbiamo risolto utilizzando l'istanza dedicata di nginx e proxy_passing all'URL di ambiente Elastic Beanstalk.

+0

Vorrei solo esporre la porta 443 e non la 80 (sul livello di bilanciamento del carico e il livello di istanza), ma non sono stato in grado di farlo. Sono curioso di sapere un po 'di più su come hai risolto questo. Come ho capito, beanstalk è un sistema di bilanciamento del carico e diverse istanze sotto quello che crescono con il carico. Al momento non ho ancora capito come esporre la porta 443 sull'istanza: sembra che usi solo la porta 80. Quindi, se ho capito bene, hai un box nginx ec2 separato che funge da proxy inverso o simile - porta forwards 80 traffico verso la porta 443? – Josh

+0

Sì, esattamente. Non usiamo gli ambienti di beanstalk elastici direttamente (motivi diversi), usiamo sempre istanza ec2 separata con nginx come proxy inverso. In questo caso puoi gestire tutte le cose SSL come certificati, ecc.in un posto. – sap1ens

+1

Giusto, grazie. Questa potrebbe essere la mia unica opzione. Vorrei che aws ordinasse qualcosa di fondamentale come questo. – Josh

Problemi correlati