Como uso certificados TLS para ativar conexões HTTPS para meus aplicativos Amazon EKS?
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
Conteúdo relevante
- AWS OFICIALAtualizada há 2 anos
- AWS OFICIALAtualizada há 8 meses