Como uso certificados TLS para ativar conexões HTTPS para meus aplicativos Amazon EKS?

4 minuto de leitura
0

Quero usar certificados Transport Layer Security (TLS) para ativar conexões HTTPS para meus aplicativos Amazon Elastic Kubernetes Service (Amazon EKS).

Breve descrição

Para ativar conexões HTTPS para seus aplicativos Amazon EKS:

  • Obtenha um certificado TLS válido para seu domínio personalizado.
  • Exponha seu serviço Kubernetes usando o tipo de serviço do balanceador de carga ou exponha seu objeto de entrada do Kubernetes usando o AWS Load Balancer Controller (no GitHub).
  • Associe seu domínio personalizado ao DNS do balanceador de carga.

Resolução

Obtenha um certificado TLS válido para seu domínio personalizado:

1.    Solicite um certificado AWS Certificate Manager (ACM) para o seu domínio personalizado ou faça o upload do seu próprio certificado TLS para o ACM.

2.    Identifique o nome do recurso da Amazon (ARN) do certificado que você quer usar com o receptor HTTPS do balanceador de carga.

3.    Para criar uma implantação NGINX de amostra, execute o comando a seguir:

$ kubectl create deploy web --image=nginx --port 80 --replicas=3

4.    Para verificar se os pods do Kubernetes estão implantados no seu cluster Amazon EKS, execute o comando a seguir:

$ kubectl get pods -l app=web

Observação: Os pods são rotulados como app=web. Use esse rótulo como um seletor para que o objeto de serviço identifique um conjunto de pods.

Exponha seu serviço Kubernetes usando o tipo de serviço do balanceador de carga

Observação: Para usar o objeto de entrada para expor o seu aplicativo, pule para a seção Expor seu serviço de Kubernetes usando o objeto de entrada.

1.    Para criar um arquivo de manifesto service.yaml, use o tipo de serviço 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 a anotação service.beta.kubernetes.io/aws-load-balancer-tls-cert para incluir o ARN do ACM.

3.    Para aplicar o arquivo loadbalancer.yaml, execute o comando a seguir:

$ kubectl create -f loadbalancer.yaml

4.    Pule para a seção Associar seu domínio ao DNS do balanceador de carga.

Exponha seu serviço Kubernetes usando o objeto de entrada

Observação: A resolução a seguir pressupõe que você tenha instalado o AWS Load Balancer Controller em seu cluster Amazon EKS.

1.    Crie um serviço de tipo Kubernetes NodePort baseado no exemplo a seguir:

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

Observação: O manifesto de entrada anterior recebe no HTTP e HTTPS, depois encerra o TLS no ALB e redireciona HTTP para HTTPS.

2.    Para aplicar o arquivo ingressservice.yaml, execute o comando a seguir:

$ kubectl create -f ingressservice.yaml

Associe seu domínio personalizado ao DNS do balanceador de carga

1.    Para retornar o URL de DNS do serviço de tipo LoadBalancer, execute o comando a seguir:

$ kubectl get service

2.    Para retornar ao URL de DNS do serviço de tipo Entrar, execute o comando a seguir:

$ kubectl get ingress/web-nginx-ingress

3.    Associe seu nome de domínio ao seu nome do balanceador de carga.

4.    Em um navegador web, teste o seu domínio personalizado com o seguinte protocolo HTTPS:

https://yourdomain.com
AWS OFICIAL
AWS OFICIALAtualizada há um ano