Wie greife ich über einen benutzerdefinierten Pfad in Amazon EKS auf das Kubernetes-Dashboard zu?

Lesedauer: 6 Minute
0

Ich möchte über einen benutzerdefinierten Pfad in Amazon Elastic Kubernetes Service (Amazon EKS) auf das Kubernetes-Dashboard zugreifen.

Kurzbeschreibung

Um auf das Kubernetes-Dashboard zuzugreifen, müssen Sie die folgenden Schritte ausführen:

1.    Erstellen Sie ein selbstsigniertes Zertifikat oder verwenden Sie ein vorhandenes und laden Sie das Zertifikat in den AWS Certificate Manager (ACM) hoch.

2.    Stellen Sie den NGINX Ingress Controller bereit und machen Sie ihn dann als NodePort-Dienst verfügbar.

3.    Erstellen Sie ein Eingangsobjekt für den Application Load Balancer Ingress Controller. Lassen Sie das Eingangsobjekt alle Anfragen vom Application Load Balancer an den NGINX Ingress Controller weiterleiten, den Sie mithilfe einer Manifestdatei bereitstellen.

4.    Stellen Sie das Kubernetes-Dashboard bereit.

5.    Erstellen Sie einen Eingang für den NGINX Ingress Controller.

So funktioniert die Behebung:

1.    Der Application Load Balancer leitet den gesamten eingehenden Datenverkehr an den NGINX Ingress Controller weiter.

2.    Der NGINX Ingress Controller wertet das Pfadmuster der eingehenden Anfrage aus (z. B. /custom-path/additionalcustompath).

3.    Der NGINX Ingress Controller schreibt die URL in /additionalcustompath um, bevor er die Anfrage an den Kubernetes-Dashboard-Dienst weiterleitet.

Hinweis: Diese Lösung funktioniert nicht auf Clustern, auf denen Kubernetes-Versionen vor 1.19 ausgeführt werden.

Behebung

Ein selbstsigniertes Zertifikat erstellen oder ein vorhandenes verwenden und das Zertifikat auf ACM hochladen

Wenn Ihr Application Load Balancer ein vorhandenes ACM-Zertifikat verwendet, fahren Sie direkt mit "NGINX Ingress Controller bereitstellen und als NodePort-Dienst verfügbar machen" fort.

Hinweis: Die folgenden Schritte gelten für die Amazon Linux Amazon Machine Image (AMI), Version 2018.03.

1.    Generieren Sie ein selbstsigniertes Zertifikat mit OpenSSL:

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

Wichtig: Geben Sie eine vollständig qualifizierte Domäne für Common Name an. Mit Application Load Balancer können nur ACM-Zertifikate mit vollqualifizierten Domainnamen an den Listener 443 angehängt werden.

Die Ausgabe sieht dem folgenden Beispiel ähnlich:

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.    Installieren Sie die AWS Command Line Interface (AWS CLI) und richten Sie die Anmeldeinformationen ein.

Hinweis: Wenn Sie beim Ausführen von AWS-CLI-Befehlen Fehler erhalten, stellen Sie sicher, dass Sie die neueste AWS-CLI-Version verwenden.

4.    Laden Sie den privaten Schlüssel und das Zertifikat auf das ACM in Ihrer AWS-Region hoch:

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

Hinweis: Ersetzen Sie us-east-1 durch Ihre AWS-Region.

Die Ausgabe sieht dem folgenden Beispiel ähnlich:

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

5.    Öffnen Sie die ACM-Konsole und überprüfen Sie dann, ob der Domainname in Ihrem importierten ACM-Zertifikat erscheint.

Hinweis: Wenn der Domainname nicht in der ACM-Konsole erscheint, empfiehlt es sich, das Zertifikat mit einem gültigen, vollqualifizierten Domainnamen neu zu erstellen.

Stellen Sie den NGINX Ingress Controller bereit und machen Sie ihn als NodePort-Dienst verfügbar

1.    Erstellen Sie den namespace ingress-nginx:

kubectl create ns ingress-nginx

2.    Installieren Sie Helm Version 3.

3.    Verwenden Sie Helm, um den NGINX Ingress Controller bereitzustellen:

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

Hinweis: Damit der Nginx-Eingangscontroller auf Fargate-Knoten ausgeführt werden kann, setzen Sie in der Bereitstellung „nginx-ingress-nginx-controller“ die Einstellung allowPrivilegeEscalation: false

Erstellen Sie ein Eingangsobjekt für den Application Load Balancer Ingress Controller

Erstellen Sie ein Eingangsobjekt mithilfe einer Manifestdatei. Lassen Sie das Eingangsobjekt alle Anfragen vom Application Load Balancer Ingress Controller an den NGINX Ingress Controller weiterleiten, den Sie zuvor bereitgestellt haben.

1.    Stellen Sie den Application Load Balancer Ingress Controller bereit.

2.    Erstellen Sie ein Eingangsobjekt für den Application Load Balancer Ingress Controller, das auf der folgenden alb-ingress.yaml-Datei basiert:

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

**Hinweis:**Ersetzen Sie alb.ingress.kubernetes.io/certificate-arn durch den Amazon-Ressourcennamen (ARN) Ihres ACM-Zertifikats. Fügen Sie für Fargate „alb.ingress.kubernetes.io/target-type: ip“ in den Anmerkungen hinzu

Die vorherige Manifestdatei verwendet die folgenden Anmerkungen:

Die Anmerkung „alb.ingress.kubernetes.io/scheme“ erstellt einen mit dem Internet verbundenen Application Load Balancer. Die Anmerkung „alb.ingress.kubernetes.io/certificate-arn“ verknüpft den ARN Ihres ACM-Zertifikats mit dem Listener 443 des Application Load Balancers. Die Anmerkung „alb.ingress.kubernetes.io/listen-ports“ erstellt die Listener für die Ports 80 und 443. Die Anmerkung „alb.ingress.kubernetes.io/actions.ssl-redirect“ leitet alle Anfragen weiter, die an die Ports 80 bis 443 gehen. Die Anmerkung „alb.ingress.kubernetes.io/healthcheck-path“ legt den Pfad zur Zustandsprüfung auf /dashboard/ fest.

3.    Wenden Sie die Manifestdatei aus dem vorherigen Schritt 2 an:

kubectl apply -f alb-ingress.yaml

Stellen Sie das Kubernetes-Dashboard bereit

Informationen zur Bereitstellung des Kubernetes-Dashboards finden Sie im Tutorial: Bereitstellen des Kubernetes-Dashboards (Web-UI).

Erstellen eines Eingangs für den NGINX Ingress Controller

1.    Erstellen Sie einen Eingang für den NGINX Ingress Controller, der auf der folgenden ingress-dashboard.yaml-Datei basiert:

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

Hinweis: Die Anmerkung „nginx.ingress.kubernetes.io/rewrite-target“ schreibt die URL neu, bevor die Anfrage an die Backend-Pods weitergeleitet wird. In /dashboard(/|$)(.*) für Pfad, speichert (.*) die dynamische URL, die beim Zugriff auf das Kubernetes-Dashboard generiert wird. Die Anmerkung „nginx.ingress.kubernetes.io/rewrite-target“ ersetzt die erfassten Daten in der URL, bevor die Anfrage an den kubernetes-dashboard-Dienst weitergeleitet wird. Die Anmerkung „nginx.ingress.kubernetes.io/configuration-snippet“ schreibt die URL um und fügt nur dann einen abschließenden Schrägstrich („/“) hinzu, wenn auf ALB-URL/dashboard zugegriffen wird.

2.    Wenden Sie die Manifestdatei ingress-dashboard.yaml an:

kubectl apply -f ingress-dashboard.yaml

3.    Überprüfen Sie die Application Load Balancer-URL in der ADDRESS des alb-ingress, den Sie zuvor erstellt haben:

kubectl get ingress alb-ingress -n ingress-nginx

Sie können jetzt über ALB-URL/dashboard/ auf das Kubernetes-Dashboard zugreifen. Wenn Sie auf ALB-URL/dashboard zugreifen, wird der URL automatisch ein abschließender Schrägstrich („/“) hinzugefügt.

Bereinigen der Ressourcen, die Sie zuvor erstellt haben

1.    Löschen Sie den Eingang für den NGINX Ingress Controller:

helm uninstall nginx -n ingress-nginx

2.    Löschen Sie die Kubernetes-Dashboard-Komponenten und den 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.    Löschen Sie den alb-ingress:

kubectl delete -f alb-ingress.yaml

Hinweis: Wenn Sie Ressourcen für AWS Identity and Access Management (IAM) erstellt haben, können Sie die IAM-Rolle und die IAM-Richtlinie löschen.

4.    Löschen Sie den AWS Load Balancer Controller:

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

5.    Löschen Sie den Namespace ingress-ngix:

kubectl delete ns ingress-nginx

6.    Führen Sie den folgenden Befehl aus, um das von Ihnen erstellte ACM-Zertifikat zu löschen:

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

Hinweis: Ersetzen Sie certificate-arn durch Ihren Zertifikat-ARN. Ersetzen Sie us-east-1 durch Ihre AWS-Region. Ersetzen Sie your-account-id durch Ihre Konto-ID.


AWS OFFICIAL
AWS OFFICIALAktualisiert vor einem Jahr