La mejor manera de apoyar ssl/https para dominios personalizados impulsados por el cliente

Tengo un cúmulo de Kubernetes (basado en Kps) funcionando en AWS. El tráfico viene a través de un balanceador de carga elástica proporcionado por los recursos de la puerta de entrada Istio ingress. Realmente me gustaría poder permitir a los clientes configurar ADNs personalizados para sus portales dentro de mi aplicación, pero no estoy seguro de cuál sería el mejor enfoque de práctica para ssl/https.

El flujo básico es claro: conseguir que el cliente entre en su dominio, emitir un certificado, verificar el dominio, el tráfico de ruta a través. Desafortunadamente estoy teniendo problemas con la terminación del ssl.

Mi ingenuo enfoque era simplemente proporcionar nuevos certificados ACM y adjuntarlos a mi ELB, pero hay un límite de 25 certificaciones por ELB, lo que significa que nunca funcionará a escala. Podría proporcionar un nuevo ELB para cada cliente, pero eso sería caro muy rápido. Proporcionar un ELB por 25 clientes sería un acto de malabarismo que no estoy emocionado.

Leí esta escritura de cómo Etsy establece su sistema, y crean servidores proxy que ejecutan Apache y vuelven a los servidores de aplicaciones. También he leído de configuraciones similares usando NginX. Parece que puede ser el mejor camino para bajar, pero me encantaría saber sobre otras opciones - preferiblemente algún uso de los servicios AWS gestionados.

¿Cuál sería la mejor manera de avanzar? Estoy atascado usando istio para la entrada normal de Kubernetes y AWS como proveedor de nubes, pero estoy abierto a casi cualquier ruta que sea barata y escalable.

Editar: Desde He creado esta pregunta que he encontrado esta pregunta relacionada: Multi-Tenant Application on AWS - Múltiples estrategias de instalación de certificado SSL . Las respuestas son geniales, pero soy mucho más costoso que ellos.

Edit2: Parece que AWS api-gateway... Lambda - solicitud interna de API es otra posibilidad que no estoy seguro de que se menciona en otro lugar. En ese caso mientras menos de ~3M solicitudes se hacen por mes es más barato de lo que estoy viendo.

Pregunta hecha hace 3 años, 5 meses, 0 días - Por techwizkid


3 Respuestas:

  • Una forma de hacer esto sería utilizar Network(NLB)/Classic como un balanceador de carga para el paso de SSL y utilizar cert-manager para certificados SSL https://cert-manager.io/docs/

    Referencia:

    Respondida el Dec 18, 2020 a las 17:12 - por pixelpioneerb898

    Votos positivos: 0 | Votos negativos: 0

  • Para implementar SSL/HTTPS para dominios personalizados impulsados por el cliente en tu infraestructura Kubernetes en AWS, a continuación te presento algunas opciones que podrías considerar:

    • Utilizar un Certificado Wildcard: Puedes obtener un certificado wildcard para tu dominio principal y luego permitir que los clientes configuren subdominios bajo ese dominio principal. De esta forma, solo necesitarías un certificado para todos los subdominios.
    • Utilizar un Servicio de Gestión de Certificados: AWS Certificate Manager (ACM) te permite gestionar certificados SSL de forma automatizada y gratuita. Puedes utilizar ACM para generar certificados para los dominios personalizados de tus clientes y luego asociar esos certificados con tu balanceador de carga o puerta de enlace de Istio.
    • Implementar un Servidor Proxy: Siguiendo el enfoque de Etsy, podrías implementar servidores proxy (por ejemplo, usando Nginx o Apache) que actúen como terminadores SSL y reenvíen el tráfico seguro a tus servicios de aplicación en Kubernetes.
    • Utilizar AWS API Gateway: Como mencionaste, puedes utilizar AWS API Gateway junto con AWS Lambda para gestionar las solicitudes HTTPS de tus clientes. Esto te permitirá escalar de forma más eficiente y mantener bajos costos si el volumen de solicitudes no es muy alto.

    Recuerda evaluar las opciones en función de tus necesidades específicas, como el volumen de tráfico, la cantidad de dominios personalizados, el presupuesto disponible, etc. Además, siempre es recomendable diseñar la solución considerando la seguridad y el rendimiento de la aplicación.

    Respondida el Dec 19, 2020 a las 17:10 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • Mejor enfoque para admitir SSL/HTTPS para dominios personalizados impulsados por el cliente

    1. Certificado administrado por AWS (ACM)

    Aprovecha ACM para solicitar y administrar certificados SSL/TLS. Crea un certificado comodín para cubrir todos los subdominios personalizados. Asocia el certificado a un Elastic Load Balancer (ELB) que gestione el tráfico de los dominios personalizados.

    2. Proxy inverso con terminación SSL

    Utiliza un proxy inverso como Nginx o Apache para manejar la terminación SSL. Configura el proxy inverso para escuchar en la dirección IP pública del ELB. Asocia el certificado ACM al proxy inverso. El proxy inverso reenviará el tráfico al back-end de Kubernetes después de terminar SSL.

    3. AWS API Gateway

    Utiliza API Gateway como capa de proxy para gestionar los dominios personalizados. Configura API Gateway para utilizar un certificado AWS Identity and Access Management (IAM) para la terminación SSL. API Gateway reenviará el tráfico a los puntos finales de Lambda o a los recursos de Kubernetes.

    4. Lambda@Edge

    Utiliza Lambda@Edge para manejar la terminación SSL y el almacenamiento en caché para las solicitudes de dominios personalizados. Configura una función Lambda@Edge para procesar las solicitudes y reenviarlas a los recursos de Kubernetes. Lambda@Edge puede almacenar en caché las respuestas para reducir la latencia y los costes de computación.

    Consideraciones adicionales:

    Escalabilidad: Todas las opciones mencionadas son escalables para gestionar un gran número de dominios personalizados. Coste: Los costes variarán en función del número de dominios personalizados, el tráfico y los recursos utilizados. AWS API Gateway y Lambda@Edge pueden ser más costosos que otras opciones. Gestión: AWS ACM y API Gateway proporcionan una gestión sencilla de certificados SSL, mientras que Nginx o Apache requieren una configuración y gestión manual.

    Recomendaciones:

    Para una solución sencilla y escalable, utiliza AWS Certificado administrado (ACM) con un ELB. Para un mayor control y flexibilidad, utiliza un proxy inverso con terminación SSL (Nginx o Apache). Para un enfoque optimizado para el rendimiento y los costes, considera AWS API Gateway o Lambda@Edge*.

    Respondida el Dec 19, 2020 a las 17:13 - por Gemini

    Votos positivos: 0 | Votos negativos: 0