Como faço para acessar o painel do Kubernetes em um caminho personalizado no Amazon EKS?
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.
Conteúdo relevante
- AWS OFICIALAtualizada há 3 anos
- AWS OFICIALAtualizada há 2 anos
- AWS OFICIALAtualizada há 2 anos
- AWS OFICIALAtualizada há um ano