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:
-
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.
-
Identifique o ARN do certificado que você deseja usar com o ouvinte HTTPS do balanceador de carga.
-
Para criar uma implantação NGINX de amostra, execute o comando a seguir:
$ kubectl create deploy web --image=nginx --port 80 --replicas=3
-
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:
-
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
-
Edite a anotação service.beta.kubernetes.io/aws-load-balancer-tls-cert para incluir o ARN do ACM.
-
Para aplicar o arquivo loadbalancer.yaml, execute o comando a seguir:
$ kubectl create -f loadbalancer.yaml
-
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:
- 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.
- 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:
-
Para retornar o URL de DNS do serviço de tipo LoadBalancer, execute o comando a seguir:
$ kubectl get service
-
Para retornar ao URL de DNS do serviço de tipo Entrar, execute o comando a seguir:
$ kubectl get ingress/web-nginx-ingress
-
Associe seu nome de domínio ao nome do seu balanceador de carga.
-
Em um navegador da web, teste o seu domínio personalizado com o seguinte protocolo HTTPS:
https://yourdomain.com