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

4 minutos de lectura
0

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

Descripción breve

Para activar las conexiones HTTPS para sus aplicaciones de Amazon EKS, debe:

  • Obtener un certificado TLS válido para su dominio personalizado.
  • Exponer su servicio de Kubernetes mediante el tipo de servicio de equilibrador de carga o exponga su objeto de ingreso de Kubernetes mediante AWS Load Balancer Controller (en GitHub).
  • Asociar su dominio personalizado al DNS del equilibrador de carga.

Resolución

Obtener un certificado TLS válido para su dominio personalizado:

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

2.    Identifique el nombre de recurso de Amazon (ARN) del certificado que desea usar con el detector HTTPS del equilibrador de carga.

3.    Para crear un ejemplo de despliegue 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 implementados 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.

Exponga su servicio de Kubernetes mediante el tipo de servicio de equilibrador de carga

Nota: Para usar el objeto de ingreso para exponer su aplicación, vaya a la sección Exponer su servicio de Kubernetes con objetos de ingreso.

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-backend-protocol: http
    # TODO: Fill in with the ARN of your certificate.
    service.beta.kubernetes.io/aws-load-balancer-tls-cert: arn:aws:acm:{region}:{user id}:certificate/{id}
    # Only run TLS on the port named "https" below.
    service.beta.kubernetes.io/aws-load-balancer-tls-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 Asociar su dominio personalizado al DNS del equilibrador de carga.

Exponer su servicio de Kubernetes mediante el objeto de entrada

Nota: La siguiente resolución asume que ha instalado AWS Load Balancer Controller en su clúster de Amazon EKS.

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 will be 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 ingreso anterior escucha en HTTP y HTTPS, luego termina TLS en ALB y redirige HTTP a HTTPS.

2.    Para aplicar el archivoingressservice.yaml ejecute el siguiente comando:

$ kubectl create -f ingressservice.yaml

Asocie su dominio personalizado al DNS del equilibrador de carga

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

$ kubectl get service

2.    Para devolver la URL DNS del servicio de tipo Ingress (ingreso), ejecute el siguiente comando:

$ kubectl get ingress/web-nginx-ingress

3.    Asocie su nombre de dominio personalizado con el nombre de su equilibrador de carga.

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

https://yourdomain.com
OFICIAL DE AWS
OFICIAL DE AWSActualizada hace un año