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 Transport Layer Security (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, occorre:

  • Ottenere un certificato TLS valido per il tuo dominio personalizzato.
  • Esporre il tuo servizio Kubernetes utilizzando il tipo di sistema di bilanciamento del carico, oppure esporre il tuo oggetto di ingresso Kubernetes utilizzando Controller del sistema di bilanciamento del carico di AWS (su GitHub).
  • Associare il tuo dominio personalizzato al DNS del sistema di bilanciamento del carico.

Risoluzione

Acquisisci un certificato TLS valido per il tuo dominio personalizzato:

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 il nome della risorsa Amazon (ARN) del certificato che desideri utilizzare con l'ascoltatore HTTPS del sistema di bilanciamento 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 contenitori.

Esponi il tuo servizio Kubernetes utilizzando il tipo di sistema di bilanciamento del carico

Nota: per utilizzare l'oggetto di ingresso per esporre la tua applicazione, passa alla sezione Esponi il servizio Kubernetes usando l'oggetto di ingresso.

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-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.    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 direttamente alla sezione Associa il tuo dominio personalizzato al DNS del sistema di bilanciamento del carico.

Esponi il tuo servizio Kubernetes utilizzando l'oggetto di ingresso

Nota: la seguente risoluzione presuppone che tu abbia installato Controller del sistema di bilanciamento del carico AWS nel tuo cluster Amazon EKS.

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 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: il manifesto di ingresso precedente ascolta HTTP e HTTPS, quindi termina TLS su ALB e reindirizza HTTP a HTTPS.

2.    Per applicare il file ingressservice.yaml, esegui il seguente comando:

$ kubectl create -f ingressservice.yaml

Associa il tuo dominio personalizzato al DNS del sistema di bilanciamento del carico

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 tuo nome di dominio personalizzato al nome del tuo sistema di bilanciamento del carico.

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

https://yourdomain.com
AWS UFFICIALE
AWS UFFICIALEAggiornata un anno fa