Come posso accedere alla dashboard di Kubernetes tramite un percorso personalizzato in Amazon EKS?

6 minuti di lettura
0

Desidero accedere alla dashboard di Kubernetes tramite un percorso personalizzato in Amazon Elastic Kubernetes Service (Amazon EKS).

Breve descrizione

Per accedere alla dashboard di Kubernetes, devi completare quanto segue:

  1. Crea o utilizza un certificato autofirmato esistente, quindi carica il certificato su AWS Certificate Manager (ACM).

  2. Implementa il controller NGINX Ingress, quindi esponilo come servizio NodePort.

  3. Crea un oggetto Ingress per l'Application Load Balancer Ingress Controller. Fai in modo che l'oggetto Ingress inoltri tutte le richieste dall'Application Load Balancer al NGINX Ingress Controller che distribuisci utilizzando un file manifest.

  4. Implementa la dashboard Kubernetes.

  5. Crea un ingresso per il controller di ingresso NGINX.

Ecco come funziona la risoluzione:

  1. L'Application Load Balancer inoltra tutto il traffico in entrata al NGINX Ingress Controller.

  2. Il controller di ingresso NGINX valuta il percorso della richiesta in arrivo (ad esempio, /custom-path/additionalcustompath).

  3. Il controller NGINX Ingress riscrive l'URL in /additionalcustompath prima di inoltrare la richiesta al servizio kubernetes-dashboard.

Nota: Questa soluzione non funziona su cluster che eseguono versioni di Kubernetes precedenti alla 1.19.

Risoluzione

Crea o utilizza un certificato autofirmato esistente, quindi carica il certificato su ACM

Se l'Application Load Balancer utilizza un certificato ACM esistente, passa a «Distribuisci il controller NGINX Ingress ed esponilo come servizio NodePort».

Nota: I passaggi seguenti si applicano alla versione Amazon Machine Image (AMI) 2018.03 di Amazon Linux.

  1. Genera un certificato autofirmato utilizzando OpenSSL:
openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout kube-dash-private.key -out kube-dash-public.crt

Importante: Fornisci un dominio completo per Common Name. Application Load Balancer consente di allegare al listener 443 solo certificati ACM con nomi di dominio completi.

L'output è simile al seguente:

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 []:
  1. Installa l'interfaccia a riga di comando AWS (AWS CLI) e configura le credenziali.

Nota: in caso di errori durante l'esecuzione dei comandi dell'interfaccia della linea di comando (AWS CLI), assicurati di utilizzare la versione più recente di AWC CLI.

  1. Carica la chiave privata e il certificato nell'ACM nella tua regione AWS:
aws acm import-certificate --certificate fileb://kube-dash-public.crt --private-key fileb://kube-dash-private.key --region us-east-1

Nota: Sostituisci us-east-1 con la tua regione AWS.

L'output è simile al seguente:

{
"CertificateArn": "arn:aws:acm:us-east-1:your-account:certificate/your-certificate-id"
}
  1. Apri la console ACM, quindi verifica che il nome di dominio appaia nel certificato ACM importato.

Nota: Se il nome di dominio non viene visualizzato nella console ACM, è consigliabile ricreare il certificato con un nome di dominio completo valido.

Implementa il controller NGINX Ingress ed esponilo come servizio NodePort

  1. Crea il namespace ingress-nginx:
kubectl create ns ingress-nginx
  1. Installa la versione 3 di Helm.

  2. Usa Helm per implementare il controller di ingresso NGINX:

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

Nota: Affinché il controller nginx-ingress venga eseguito sui nodi Fargate, imposta allowPrivilegeEscalation: false nella distribuzione "nginx-ingress-nginx-controller"

Creare un oggetto Ingress per l'Application Load Balancer Ingress Controller

Crea un oggetto Ingress utilizzando un file manifest. Fai in modo che l'oggetto Ingress inoltri tutte le richieste dall'Application Load Balancer Ingress Controller al NGINX Ingress Controller che hai implementato in precedenza.

  1. Implementa l'Application Load Balancer Ingress Controller.

  2. Crea un oggetto Ingress per l'Application Load Balancer Ingress Controller basato sul seguente file alb-ingress.yaml:

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

Nota: Sostituisci alb.ingress.kubernetes.io/certificate-arn con l'Amazon Resource Name (ARN) del tuo certificato ACM. Per Fargate, aggiungi «alb.ingress.kubernetes.io/target-type: ip» nelle annotazioni

Il file manifest precedente utilizza le seguenti annotazioni:

L'annotazione «alb.ingress.kubernetes.io/scheme» crea un Application Load Balancer rivolto a Internet. L'annotazione «alb.ingress.kubernetes.io/certificate-arn» associa l'ARN del certificato ACM al listener 443 dell'Application Load Balancer. L'annotazione «alb.ingress.kubernetes.io/listen-ports» crea i listener per le porte 80 e 443. L'annotazione «alb.ingress.kubernetes.io/actions.ssl-redirect» reindirizza tutte le richieste che arrivano alle porte da 80 a 443. L'annotazione «alb.ingress.kubernetes.io/healthcheck-path» imposta il percorso del controllo dello stato su /dashboard/.

  1. Applica il file manifest del passaggio 2 precedente:
kubectl apply -f alb-ingress.yaml

Implementa la dashboard Kubernetes

Per implementare la dashboard di Kubernetes, consulta il Tutorial: Implementa la dashboard Kubernetes (interfaccia utente web).

Crea un ingresso per il controller di ingresso NGINX

  1. Crea un Ingress per NGINX Ingress Controller basato sul seguente file ingress-dashboard.yaml:
---
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

Nota: L'annotazione «nginx.ingress.kubernetes.io/rewrite-target» riscrive l'URL prima di inoltrare la richiesta ai pod del backend. In /dashboard(/|$)(.*) per **path,(.*) ** memorizza l'URL dinamico generato durante l'accesso alla dashboard di Kubernetes. L'annotazione «nginx.ingress.kubernetes.io/rewrite-target» sostituisce i dati acquisiti nell'URL prima di inoltrare la richiesta al servizio **kubernetes-dashboard **. L'annotazione "nginx.ingress.kubernetes.io/configuration-snippet" riscrive l'URL per aggiungere una barra finale («/») solo se si accede a ALB-URL/dashboard.

  1. Applica il file manifest ingress-dashboard.yaml:
kubectl apply -f ingress-dashboard.yaml
  1. Controlla l'URL Application Load Balancer nell'INDIRIZZO dell'alb-ingress che hai creato in precedenza:
kubectl get ingress alb-ingress -n ingress-nginx

Ora puoi accedere alla dashboard di Kubernetes utilizzando alb-URL/dashboard/. Se accedi a alb-URL/dashboard, all'URL viene aggiunta automaticamente una barra finale («/»).

Ripulisci le risorse che hai creato in precedenza

  1. Elimina l'ingresso per il controller di ingresso NGINX:
helm uninstall nginx -n ingress-nginx
  1. Elimina i componenti della dashboard di Kubernetes e il 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>
  1. Eliminare l'ingresso alb-:
kubectl delete -f alb-ingress.yaml

Nota: Se hai creato risorse AWS Identity and Access Management (IAM), puoi eliminare il ruolo aIAM e la policy IAM.

  1. Elimina il controller AWS Load Balancer:
helm uninstall aws-load-balancer-controller -n kube-system
  1. Eliminare lo spazio dei nomi ingress-ngix:
kubectl delete ns ingress-nginx
  1. Per eliminare il certificato ACM che hai creato, esegui il seguente comando:
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

Nota: Sostituisci certificate-arn con il tuo certificato ARN. Sostituisci us-east-1 con la tua regione AWS. Sostituisci your-account-id con l'ID del tuo account.


AWS UFFICIALE
AWS UFFICIALEAggiornata un anno fa