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

4 minuto de leitura
0

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

Breve descrição

Para ativar as conexões HTTPS para seus aplicativos Amazon EKS, conclua as seguintes tarefas:

  • Obtenha um certificado TLS válido para seu domínio personalizado.
  • Use o tipo de serviço do balanceador de carga para expor seu serviço Kubernetes ou use o AWS Load Balancer Controller para expor seu objeto de entrada do Kubernetes.
  • Associe seu domínio personalizado ao DNS do balanceador de carga.

Resolução

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

Para obter um certificado TLS válido para seu domínio personalizado, conclua as seguintes etapas:

  1. Solicite um certificado do 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 ARN do certificado que você deseja usar com o ouvinte 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 do 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.

Use o tipo de serviço do balanceador de carga para expor seu serviço Kubernetes

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.

Para usar o tipo de serviço do balanceador de carga para expor seu serviço Kubernetes, conclua as seguintes etapas:

  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-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 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.

Use o objeto de entrada para expor seu serviço Kubernetes

Observação: a resolução a seguir pressupõe que você tenha instalado o AWS Load Balancer Controller em seu cluster Amazon EKS. Para obter mais informações, consulte aws-load-balancer-controller no site do GitHub.

Para usar o objeto de entrada para expor seu serviço Kubernetes, conclua as seguintes etapas:

  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 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
    Observação: o manifesto de entrada anterior escuta em HTTP e HTTPS, depois encerra o TLS no Application Load Balancer e, em seguida, 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

Para associar seu domínio personalizado ao DNS do balanceador de carga, conclua as seguintes etapas:

  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 nome do seu balanceador de carga.

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

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