Comment puis-je accéder au tableau de bord Kubernetes via un chemin personnalisé dans Amazon EKS ?

Date de la dernière mise à jour : 13/11/2020

Je souhaite accéder au tableau de bord Kubernetes via un chemin personnalisé dans Amazon Elastic Kubernetes Service (Amazon EKS).

Brève description

Pour accéder au tableau de bord Kubernetes, vous devez effectuer les opérations suivantes :

  1. Créer ou utiliser un certificat auto-signé existant, puis le charger dans AWS Certificate Manager (ACM)
  2. Déployer le contrôleur d'entrée NGINX et l'exposer en tant que service NodePort
  3. Créer un objet d'entrée pour le contrôleur d'entrée de l'Application Load Balancer qui transmet toutes les demandes de l'Application Load Balancer au contrôleur d'entrée NGINX que vous déployez à l'aide d'un fichier manifeste
  4. Déployer le tableau de bord Kubernetes
  5. Créer une entrée pour le contrôleur d'entrée NGINX

Voici comment fonctionne la résolution :

  1. L'Application Load Balancer transmet tout le trafic entrant au contrôleur d'entrée NGINX.
  2. Le contrôleur d'entrée NGINX examine le modèle de chemin de la demande entrante (par exemple /custom-path/additonalcustompath).
  3. Le contrôleur d'entrée NGINX remplace l'URL par /additonalcustompath avant de transmettre la demande au service kubernetes-dashboard.

Résolution

Création ou utilisation d'un certificat auto-signé existant, puis chargement de celui-ci dans ACM

Si vous utilisez un certificat ACM existant avec l'Application Load Balancer, passez à la section Déploiement du contrôleur d'entrée NGINX et exposition de celui-ci en tant que service NodePort.

Remarque : les étapes suivantes s'appliquent à l'Amazon Machine Image (AMI) Amazon Linux version 2018.03.

1.    Générez une clé privée à l'aide d'OpenSSL :

openssl genrsa 2048 > kube-dash-private.key

2.    Créez un certificat à l'aide de la clé générée à l'étape 1 :

openssl req -new -x509 -nodes -sha1 -days 3650 -extensions v3_ca -key kube-dash-private.key > kube-dash-public.crt

Important : spécifiez un domaine complet dans le champ Nom commun, car l'Application Load Balancer autorise uniquement l'attachement de certificats ACM comportant des noms de domaines complets à l'écouteur 443.

Le résultat doit être similaire à ce qui suit :

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.    Installez l'interface de ligne de commande AWS (AWS CLI) et configurez les identifiants.

Remarque : si vous recevez des erreurs lors de l'exécution de commandes depuis AWS CLI, assurez-vous d'utiliser la version la plus récente d'AWS CLI.

4.    Chargez la clé privée et le certificat dans ACM dans votre région AWS :

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

Remarque : remplacez us-east-1 par le nom de votre région AWS.

Le résultat doit être similaire à ce qui suit :

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

5.    Ouvrez la console ACM, puis vérifiez que le nom de domaine apparaît dans votre certificat ACM importé.

Astuce : si le nom de domaine n'apparaît pas dans la console ACM, recréez le certificat à l'aide d'un nom de domaine complet valide.

Déploiement du contrôleur d'entrée NGINX et exposition de celui-ci en tant que service NodePort

1.    Créez l'espace de noms ingress-nginx :

kubectl create ns ingress-nginx

2.    Installez Helm version 3.

3.    Utilisez Helm pour déployer le contrôleur d'entrée NGINX :

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

Créer un objet d'entrée pour le contrôleur d'entrée de l'Application Load Balancer

Vous devez créer un objet d'entrée qui transfère toutes les demandes du contrôleur d'entrée de l'Application Load Balancer au contrôleur d'entrée NGINX que vous avez déployé précédemment à l'aide d'un fichier manifeste.

1.    Déployez le contrôleur d'entrée de l'Application Load Balancer .

2.    Créez un objet d'entrée pour le contrôleur d'entrée de l'Application Load Balancer en vous basant sur le fichier alb-ingress.yaml suivant :

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: "alb-ingress"
  namespace: "ingress-nginx"
  annotations:
    kubernetes.io/ingress.class: alb
    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:
  rules:
    - http:
        paths:
          - path: /*
            backend:
              serviceName: ssl-redirect
              servicePort: use-annotation
          - path: /*
            backend:
              serviceName: "nginx-ingress-nginx-controller"
              servicePort: 80

Remarque : remplacez alb.ingress.kubernetes.io/certificate-arn par l'Amazon Resource Name (ARN) de votre certificat ACM.

Le fichier manifeste précédent comporte les annotations suivantes :

L'annotation « alb.ingress.kubernetes.io/scheme » permet de créer un Application Load Balancer accessible sur Internet.
L'annotation « alb.ingress.kubernetes.io/certificate-arn » permet d'associer l'ARN du certificat ACM à l'écouteur 443 de l'Application Load Balancer.
L'annotation « alb.ingress.kubernetes.io/listen-ports » permet de créer les écouteurs pour les ports 80 et 443.
L'annotation « alb.ingress.kubernetes.io/actions.ssl-redirect » permet de rediriger toutes les demandes transmises aux ports 80 à 443.
L'annotation « alb.ingress.kubernetes.io/healthcheck-path » permet de définir le chemin de vérification de l'état sur /dashboard/.

3.    Appliquez le fichier manifeste créé à l'étape 2 ci-dessus :

kubectl apply -f alb-ingress.yaml

Déploiement du tableau de bord Kubernetes

Pour déployer le tableau de bord Kubernetes, consultez Didacticiel : Déployer le tableau de bord Kubernetes (interface utilisateur Web).

Création d'une entrée pour le contrôleur d'entrée NGINX

1.    Créez une entrée pour le contrôleur d'entrée NGINX en vous basant sur le fichier ingress-dashboard.yaml suivant :

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: 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;
  namespace: kubernetes-dashboard
spec:
  rules:
  - http:
      paths:
      - path: /dashboard(/|$)(.*)
        backend:
          serviceName: kubernetes-dashboard
          servicePort: 443

Remarque : l'annotation « nginx.ingress.kubernetes.io/rewrite-target » permet de réécrire l'URL avant de transmettre la demande aux pods du backend. Dans le chemin /dashboard(/|$)(.*) , (.*) permet de stocker l'URL dynamique qui est générée lors de l'accès au tableau de bord Kubernetes. L'annotation « nginx.ingress.kubernetes.io/rewrite-target » permet de remplacer les données capturées dans l'URL avant de transmettre la demande au service kubernetes-dashboard. L'annotation « nginx.ingress.kubernetes.io/configuration-snippet » permet de réécrire l'URL pour ajouter une barre oblique de fin (« / ») uniquement si vous accédez à ALB-URL/dashboard .

2.    Appliquez le fichier manifeste ingress-dashboard.yaml :

kubectl apply -f ingress-dashboard.yaml

3.    Vérifiez l'URL de l'Application Load Balancer dans le champ ADDRESS (Adresse) du fichier alb-ingress que vous avez créé précédemment :

kubectl get ingress alb-ingress -n ingress-nginx

Vous pouvez désormais accéder au tableau de bord Kubernetes à l'aide de l'adresse ALB-URL/dashboard/. Si vous accédez à ALB-URL/dashboard, une barre oblique de fin (« / ») est automatiquement ajoutée à l'URL.

Suppression des ressources que vous avez créées précédemment

1.    Supprimez l'entrée pour le contrôleur d'entrée NGINX :

helm uninstall nginx -n ingress-nginx

2.    Supprimez les composants du tableau de bord Kubernetes et 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.    Supprimez alb-ingress :

kubectl delete -f alb-ingress.yaml

Remarque : si vous avez créé des ressources AWS Identity and Access Management (IAM), vous pouvez supprimer le rôle IAM et la stratégie IAM.

4.    Supprimez l'espace de noms ingress-nginx :

kubectl delete ns ingress-nginx

5.    Pour supprimer le certificat ACM que vous avez créé, exécutez la commande suivante :

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

Remarque : remplacez certificate-arn par l'ARN de votre certificat. Remplacez us-east-1 par le nom de votre région AWS. Remplacez your-account-id par l'ID de votre compte.</p


Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?