Como faço para acessar o painel do Kubernetes em um caminho personalizado no Amazon EKS?

7 minuto de leitura
0

Quero acessar o painel do Kubernetes em um caminho personalizado no Amazon Elastic Kubernetes Service (Amazon EKS).

Breve descrição

Para acessar o painel do Kubernetes, você deve concluir o seguinte:

1.    Crie ou use um certificado autoassinado existente e, em seguida, faça o upload do certificado para o AWS Certificate Manager (ACM).

2.    Implante o NGINX Ingress Controller e, em seguida, exponha-o como um serviço NodePort.

3.    Crie um objeto Ingress para o Application Load Balancer Ingress Controller. Faça com que o objeto Ingress encaminhe todas as solicitações do Application Load Balancer para o NGINX Ingress Controller que você implanta usando um arquivo de manifesto.

4.    Implante o painel do Kubernetes.

5.    Crie um Ingress para o NGINX Ingress Controller.

Veja como a resolução funciona:

1.    O Application Load Balancer encaminha todo o tráfego de entrada para o NGINX Ingress Controller.

2.    O NGINX Ingress Controller avalia o padrão de caminho da solicitação recebida (por exemplo, /custom-path/additionalcustompath).

3.    O NGINX Ingress Controller reescreve a URL para /additionalcustompath antes de encaminhar a solicitação para o serviço kubernetes-dashboard.

Observação: essa solução não funciona em clusters que executam versões do kubernetes anteriores à 1.19.

Resolução

Crie ou use um certificado autoassinado existente e, em seguida, faça o upload do certificado para o ACM

Se o Application Load Balancer usa um certificado ACM existente, vá para “Implantar o NGINX Ingress Controller e expô-lo como um serviço NodePort”.

Observação: as etapas a seguir se aplicam ao Amazon Machine Image (AMI), versão 2018.03, do Amazon Linux.

1.    Gere um certificado autoassinado usando o OpenSSL:

openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout kube-dash-private.key -out kube-dash-public.crt

Importante: forneça um domínio totalmente qualificado para o Nome comum. O Application Load Balancer permite que somente certificados ACM com nomes de domínio totalmente qualificados sejam anexados ao receptor 443.

A saída é semelhante a seguinte:

Country Name (2 letter code) [XX]:
State or Province Name (full name) []:
Locality Name (eg, city) [Default City]:
Organization Name (eg, company) [Default Company Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:kube-dashboard.com     ==>This is important
Email Address []:

3.    Instale a AWS Command Line Interface (AWS CLI) e configure as credenciais.

Observação: se você receber erros ao executar comandos da AWS CLI,certifique-se de estar usando a versão mais recente da AWS CLI.

4.    Faça o upload da chave privada e do certificado para o ACM em sua região da AWS:

aws acm import-certificate --certificate fileb://kube-dash-public.crt --private-key fileb://kube-dash-private.key --region us-east-1

Observação: substitua us-east-1 pela sua região da AWS.

A saída é semelhante a seguinte:

{
"CertificateArn": "arn:aws:acm:us-east-1:your-account:certificate/your-certificate-id"
}

5.    Abra o console do ACM e verifique se o nome do domínio aparece no certificado ACM importado.

Observação: se o nome de domínio não aparecer no console do ACM, é uma prática recomendada recriar o certificado com um nome de domínio válido e totalmente qualificado.

Implante o NGINX Ingress Controller e o exponha como um serviço NodePort

1.    Crie o namespace ingress-nginx:

kubectl create ns ingress-nginx

2.    Instale a versão 3 do Helm.

3.    Use o Helm para implantar o NGINX Ingress Controller:

helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update
helm install nginx ingress-nginx/ingress-nginx --namespace ingress-nginx --set controller.service.type=NodePort

Observação: para que o controlador nginx-ingress seja executado nos nós do Fargate, defina allowPrivilegeEscalation: false na implantação do “nginx-ingress-nginx-controller”

Criar um objeto Ingress para o Application Load Balancer Ingress Controller

Crie um objeto Ingress usando um arquivo de manifesto. Faça com que o objeto Ingress encaminhe todas as solicitações do Application Load Balancer Ingress Controller para o NGINX Ingress Controller que você implantou anteriormente.

1.    Implante o Application Load Balancer Ingress Controller.

2.    Crie um objeto Ingress para o Application Load Balancer Ingress Controller com base no arquivo alb-ingress.yaml a seguir:

---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: "alb-ingress"
  namespace: "ingress-nginx"
  annotations:
    alb.ingress.kubernetes.io/scheme: internet-facing
    alb.ingress.kubernetes.io/certificate-arn: arn:aws:acm:your-region:your-account-id:certificate/XXXX-XXXX-XXXX-XXXX-XXXXX
    alb.ingress.kubernetes.io/healthcheck-path: /dashboard/
    alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80}, {"HTTPS":443}]'
    alb.ingress.kubernetes.io/actions.ssl-redirect: '{"Type": "redirect", "RedirectConfig": { "Protocol": "HTTPS", "Port": "443", "StatusCode": "HTTP_301"}}'
  labels:
    app: dashboard
spec:
  ingressClassName: alb
  rules:
  - http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: ssl-redirect
            port:
              name: use-annotation
      - path: /
        pathType: Prefix
        backend:
          service:
            name: "nginx-ingress-nginx-controller"
            port:
              number: 80

Observação: substitua alb.ingress.kubernetes.io/certificate-arn pelo nome do recurso da Amazon (ARN) do seu certificado ACM. Para Fargate, adicione “alb.ingress.kubernetes.io/target-type: ip” nas anotações

O arquivo de manifesto anterior usa as seguintes anotações:

A anotação “alb.ingress.kubernetes.io/scheme” cria um Application Load Balancer voltado para a Internet. A anotação “alb.ingress.kubernetes.io/certificate-arn” associa o ARN do seu certificado ACM ao receptor 443 do Application Load Balancer. A anotação “alb.ingress.kubernetes.io/listen-ports” cria os receptores para as portas 80 e 443. A anotação “alb.ingress.kubernetes.io/actions.ssl-redirect” redireciona todas as solicitações que chegam às portas 80 a 443. A anotação “alb.ingress.kubernetes.io/healthcheck-path” define o caminho da verificação de integridade como /dashboard/.

3.    Aplique o arquivo de manifesto da etapa 2 anterior:

kubectl apply -f alb-ingress.yaml

Implante o painel do Kubernetes

Para implantar o painel do Kubernetes, consulte o Tutorial: Implante o painel do Kubernetes (interface de usuário baseada na web).

Crie um Ingress para o NGINX Ingress Controller

1.    Crie um Ingress para o NGINX Ingress Controller com base no arquivo ingress-dashboard.yaml a seguir:

---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: dashboard
  namespace: kubernetes-dashboard
  annotations:
    nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
    nginx.ingress.kubernetes.io/rewrite-target: /$2
    nginx.ingress.kubernetes.io/configuration-snippet: |
      rewrite ^(/dashboard)$ $1/ redirect;
spec:
  ingressClassName: nginx
  rules:
  - http:
      paths:
      - path: /dashboard(/|$)(.*)
        pathType: Prefix
        backend:
          service:
            name: kubernetes-dashboard
            port:
              number: 443

Observação: a anotação “nginx.ingress.kubernetes.io/rewrite-target” reescreve a URL antes de encaminhar a solicitação para os pods de back-end. Em /dashboard(/|$)(.*) para path, (.*) armazena a URL dinâmica gerada ao acessar o painel do Kubernetes. A anotação “nginx.ingress.kubernetes.io/rewrite-target” substitui os dados capturados na URL antes de encaminhar a solicitação para o serviço kubernetes-dashboard. A anotação “nginx.ingress.kubernetes.io/configuration-snippet” reescreve a URL para adicionar uma barra final (“/”) somente se ALB-URL/dashboard for acessado.

2.    Aplique o arquivo de manifesto ingress-dashboard.yaml:

kubectl apply -f ingress-dashboard.yaml

3.    Verifique a URL do Application Load Balancer no ADDRESS do alb-ingress que você criou anteriormente:

kubectl get ingress alb-ingress -n ingress-nginx

Agora você pode acessar o painel do Kubernetes usando ALB-URL/dashboard/. Se você acessar ALB-URL/dashboard, uma barra final (“/”) será adicionada automaticamente à URL.

Limpe os recursos que você criou anteriormente

1.    Exclua o Ingress do NGINX Ingress Controller:

helm uninstall nginx -n ingress-nginx

2.    Exclua os componentes do painel do Kubernetes e o Metrics Server:

kubectl delete -f eks-admin-service-account.yaml
kubectl delete -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta8/aio/deploy/recommended.yaml
kubectl delete -f https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.3.6/components.yaml>

3.    Exclua o alb-ingresso:

kubectl delete -f alb-ingress.yaml

Observação: se você criou recursos do AWS Identity and Access Management (IAM), poderá excluir o perfil do IAM e a política do IAM.

4.    Exclua o AWS Load Balancer Controller:

helm uninstall aws-load-balancer-controller -n kube-system

5.    Exclua o namespace ingress-ngix:

kubectl delete ns ingress-nginx

6.    Para excluir o certificado ACM que você criou, execute o comando a seguir:

aws acm delete-certificate \
    --certificate-arn arn:aws:acm:us-east-1:your-account-id:certificate/XXXX-XXXX-XXXX-XXXX-XXXXX \
    --region us-east-1

Observação: substitua certificate-arn pelo ARN do certificado. Substitua us-east-1 pela sua região da AWS. Substitua your-account-id pelo ID da sua conta.


AWS OFICIAL
AWS OFICIALAtualizada há um ano