¿Cómo utilizo los certificados TLS para activar las conexiones HTTPS en mis aplicaciones de Amazon EKS?

4 minutos de lectura
0

Quiero usar los certificados TLS para activar las conexiones HTTPS en mis aplicaciones de Amazon Elastic Kubernetes Service (Amazon EKS).

Descripción breve

Para activar las conexiones HTTPS en sus aplicaciones de Amazon EKS, lleve a cabo las siguientes tareas:

  • Obtenga un certificado TLS válido para su dominio personalizado.
  • Utilice el tipo de servicio de equilibrador de carga para exponer su servicio de Kubernetes, o use AWS Load Balancer Controller para exponer su objeto de ingreso de Kubernetes.
  • Asocie su dominio personalizado al DNS del equilibrador de carga.

Resolución

Obtención de un certificado TLS válido para su dominio personalizado

Si quiere obtener un certificado TLS válido para su dominio personalizado, siga estos pasos:

  1. Solicite un certificado público de AWS Certificate Manager (ACM) para su dominio personalizado o suba su propio certificado TLS a ACM.

  2. Identifique el ARN del certificado que desea usar con el agente de escucha HTTPS del equilibrador de carga.

  3. Para crear un despliegue de ejemplo de NGINX, ejecute el siguiente comando:

    $ kubectl create deploy web --image=nginx --port 80 --replicas=3
  4. Para comprobar que los pods de Kubernetes estén desplegados en su clúster de Amazon EKS, ejecute el siguiente comando:

    $ kubectl get pods -l app=web

    **Nota:**Los pods tienen la etiqueta app=web. Utilice esta etiqueta como selector del objeto de servicio para identificar un conjunto de pods.

Uso del tipo de servicio de equilibrador de carga para exponer su servicio de Kubernetes

Nota: Si quiere usar el objeto de entrada para exponer su aplicación, vaya a la sección Exposición de su servicio de Kubernetes mediante el objeto de entrada.

Si desea usar el tipo de servicio de equilibrador de carga para exponer su servicio de Kubernetes, siga estos pasos:

  1. Para crear un archivo de manifiesto service.yaml, utilice el tipo de servicio LoadBalancer:

    cat <<EOF > loadbalancer.yaml
    apiVersion: v1
    kind: Service
    metadata:
      name: lb-service
      annotations:
        # Note that the backend talks over HTTP.
        service.beta.kubernetes.io/aws-load-balancer-type: external
        # TODO: Fill in with the ARN of your certificate.
        service.beta.kubernetes.io/aws-load-balancer-ssl-cert: arn:aws:acm:{region}:{user id}:certificate/{id}
        # Run TLS only on the port named "https" below.
        service.beta.kubernetes.io/aws-load-balancer-ssl-ports: "https"
        # By default In-tree controller will create a Classic LoadBalancer if you require a NLB uncomment below annotation.
        # service.beta.kubernetes.io/aws-load-balancer-type: "nlb"
    spec:
      selector:
        app: web
      ports:
      - name: http
        port: 80
        targetPort: 80
      - name: https
        port: 443
        targetPort: 80
      type: LoadBalancer
    EOF
  2. Edite el servicio de anotación service.beta.kubernetes.io/aws-load-balancer-tls-cert para incluir el ARN de la ACM.

  3. Para aplicar el archivo loadbalancer.yaml, ejecute el siguiente comando:

    $ kubectl create -f loadbalancer.yaml
  4. Vaya a la sección Cómo asociar su dominio personalizado al DNS del equilibrador de carga.

Exposición de su servicio de Kubernetes mediante el objeto de entrada

Nota: La siguiente resolución supone que ha instalado AWS Load Balancer Controller en su clúster de Amazon EKS. Para obtener más información, consulte aws-load-balancer-controller en el sitio web de GitHub.

Si desea usar el objeto de entrada para exponer su servicio de Kubernetes, siga estos pasos:

  1. Cree un servicio de Kubernetes de tipo NodePort basado en el siguiente ejemplo:
    cat  <<EOF  > ingressservice.yaml
    apiVersion: v1
    kind: Service
    metadata:
      name: web-nginx
    spec:
      ports:
        - port: 80
          targetPort: 80
          protocol: TCP
      type: NodePort
      selector:
        app: web
    ---
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: "web-nginx-ingress"
      annotations:
        # Below annotation is to specify if the loadbalancer is "internal" or "internet-facing"
        alb.ingress.kubernetes.io/scheme: internet-facing
        # TODO: Fill in with the ARN of your certificate.
        alb.ingress.kubernetes.io/certificate-arn: arn:aws:acm:us-west-2:xxxx:certificate/xxxxxx
        # TODO: Fill in the listening ports.
        alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80}, {"HTTPS":443}]'
        # Set HTTP to HTTPS redirects. Every HTTP listener configured is redirected to below mentioned port over HTTPS.
        alb.ingress.kubernetes.io/ssl-redirect: '443'
      labels:
        app: web
    spec:
      ingressClassName: alb
      rules:
        - http:
            paths:
              - path: /
                pathType: Prefix
                backend:
                  service:
                    name: "web-nginx"
                    port:
                      number: 80
    EOF
    Nota: El manifiesto de entrada anterior escucha en HTTP y HTTPS, detiene TLS en el equilibrador de carga de aplicación y, a continuación, redirige HTTP a HTTPS.
  2. Para aplicar el archivoingressservice.yaml, ejecute el siguiente comando:
    $ kubectl create -f ingressservice.yaml

Cómo asociar su dominio personalizado al DNS del equilibrador de carga

Para asociar su dominio personalizado al DNS del equilibrador de carga, siga estos pasos:

  1. Para devolver la URL de DNS del servicio de tipo LoadBalancer, ejecute el siguiente comando:

    $ kubectl get service
  2. Para devolver la URL de DNS del servicio de tipo Ingress, ejecute el siguiente comando:

    $ kubectl get ingress/web-nginx-ingress
  3. Associate your custom domain name with your load balancer name.

  4. En un navegador web, pruebe su dominio personalizado con el siguiente protocolo HTTPS:

    https://yourdomain.com
OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 7 meses