Come posso accedere alla dashboard di Kubernetes tramite un percorso personalizzato in Amazon EKS?
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:
-
Crea o utilizza un certificato autofirmato esistente, quindi carica il certificato su AWS Certificate Manager (ACM).
-
Implementa il controller NGINX Ingress, quindi esponilo come servizio NodePort.
-
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.
-
Implementa la dashboard Kubernetes.
-
Crea un ingresso per il controller di ingresso NGINX.
Ecco come funziona la risoluzione:
-
L'Application Load Balancer inoltra tutto il traffico in entrata al NGINX Ingress Controller.
-
Il controller di ingresso NGINX valuta il percorso della richiesta in arrivo (ad esempio, /custom-path/additionalcustompath).
-
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.
- 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 []:
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.
- 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" }
- 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
- Crea il namespace ingress-nginx:
kubectl create ns ingress-nginx
-
Installa la versione 3 di Helm.
-
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.
-
Implementa l'Application Load Balancer Ingress Controller.
-
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/.
- 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
- 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.
- Applica il file manifest ingress-dashboard.yaml:
kubectl apply -f ingress-dashboard.yaml
- 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
- Elimina l'ingresso per il controller di ingresso NGINX:
helm uninstall nginx -n ingress-nginx
- 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>
- 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.
- Elimina il controller AWS Load Balancer:
helm uninstall aws-load-balancer-controller -n kube-system
- Eliminare lo spazio dei nomi ingress-ngix:
kubectl delete ns ingress-nginx
- 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.
Contenuto pertinente
- AWS UFFICIALEAggiornata 2 anni fa
- AWS UFFICIALEAggiornata un anno fa
- AWS UFFICIALEAggiornata 2 mesi fa
- AWS UFFICIALEAggiornata 2 anni fa