Come faccio a utilizzare i certificati TLS per attivare le connessioni HTTPS per le mie applicazioni Amazon EKS?

4 minuti di lettura
0

Vorrei utilizzare i certificati TLS per attivare le connessioni HTTPS per le mie applicazioni Amazon Elastic Kubernetes Service (Amazon EKS).

Breve descrizione

Per attivare le connessioni HTTPS per le tue applicazioni Amazon EKS, completa le seguenti attività:

  • Ottieni un certificato TLS valido per il tuo dominio personalizzato.
  • Usa il tipo di servizio di bilanciatore del carico per esporre il tuo servizio Kubernetes o usa AWS Load Balancer Controller per esporre il tuo oggetto di ingresso Kubernetes.
  • Associa il tuo dominio personalizzato al DNS del bilanciatore del carico.

Risoluzione

Acquisisci un certificato TLS valido per il tuo dominio personalizzato

Per acquisire un certificato TLS valido per il tuo dominio personalizzato, completa i seguenti passaggi:

  1. Richiedi un certificato pubblico della Gestione certificati AWS (ACM) per il tuo dominio personalizzato o carica il tuo certificato TLS su ACM.

  2. Identifica la risorsa ARN del certificato che desideri utilizzare con l’ascoltatore HTTPS del bilanciatore del carico.

  3. Per creare un'implementazione NGINX di esempio, esegui il seguente comando:

    $ kubectl create deploy web --image=nginx --port 80 --replicas=3
  4. Per verificare che i pod Kubernetes siano distribuiti sul tuo cluster Amazon EKS, esegui il seguente comando:

    $ kubectl get pods -l app=web

    Nota: i pod sono etichettati app=web. Utilizza questa etichetta come selettore per l'oggetto del servizio per identificare un set di pod.

Usa il tipo di servizio di bilanciatore del carico per esporre il tuo servizio Kubernetes

Nota: per utilizzare l'oggetto di ingresso per esporre la tua applicazione, continua con la sezione Esposizione del servizio Kubernetes usando l'oggetto di ingresso.

Per utilizzare il tipo di servizio di bilanciatore del carico per esporre il tuo servizio Kubernetes, completa i seguenti passaggi:

  1. Per creare un file manifesto service.yaml, usa il tipo di servizio 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. Modifica l'annotazione service.beta.kubernetes.io/aws-load-balancer-tls-cert per includere l'ARN dell'ACM.

  3. Per applicare il file loadbalancer.yaml, esegui il seguente comando:

    $ kubectl create -f loadbalancer.yaml
  4. Passa alla sezione Associazione del dominio personalizzato al DNS del bilanciatore del carico.

Esposizione del servizio Kubernetes usando l'oggetto di ingresso

Nota: la seguente risoluzione presuppone che tu abbia installato AWS Load Balancer Controller nel cluster Amazon EKS. Per altre informazioni, consulta aws-load-balancer-controller sul sito web GitHub.

Per utilizzare l'oggetto di ingresso in modo da esporre il servizio Kubernetes, completa i seguenti passaggi:

  1. Crea un servizio Kubernetes di tipo NodePort in base al seguente esempio:
    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: il precedente manifesto di ingresso è in ascolto su HTTP e HTTPS, quindi termina TLS su Application Load Balancer e reindirizza HTTP a HTTPS.
  2. Per applicare il file ingressservice.yaml, esegui il seguente comando:
    $ kubectl create -f ingressservice.yaml

Associazione del dominio personalizzato al DNS del bilanciatore del carico

Per associare il tuo dominio personalizzato al DNS del bilanciatore del carico, completa i seguenti passaggi:

  1. Per restituire l'URL DNS del servizio di tipo LoadBalancer, esegui il seguente comando:

    $ kubectl get service
  2. Per restituire l'URL DNS del servizio di tipo Ingress, esegui il seguente comando:

    $ kubectl get ingress/web-nginx-ingress
  3. Associa il nome di dominio personalizzato al nome del bilanciatore del carico.

  4. In un browser web, testa il dominio personalizzato con il seguente protocollo HTTPS:

    https://yourdomain.com
AWS UFFICIALE
AWS UFFICIALEAggiornata 7 mesi fa