Skip to content
Snippets Groups Projects
Select Git revision
  • c540423bc41861eddd1e31ccacdedea824202b5a
  • main default protected
2 results

6.Creation_openldap.md

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.

    Déploiement d'un Serveur LDAP sur Kubernetes

    Introduction

    Ce guide détaille le processus de déploiement d'un serveur OpenLDAP sur un cluster Kubernetes, accompagné de phpLDAPadmin pour une gestion simplifiée via une interface web. L'objectif est de mettre en place un système de gestion des utilisateurs et des permissions au sein de Kubernetes.

    Étapes du Déploiement

    1. Création d'un Namespace dédié

    Pour isoler les ressources liées à OpenLDAP, il est recommandé de créer un namespace spécifique :

    kubectl create namespace openldap

    2. Préparation du fichier de déploiement

    Un fichier YAML est nécessaire pour définir les ressources Kubernetes requises : Secret, PersistentVolumeClaim, Deployments et Services.

    Création des Secrets

    Les informations sensibles, telles que le nom de domaine, l'organisation et le mot de passe administrateur, doivent être encodées en base64 et stockées dans un Secret Kubernetes.

    apiVersion: v1
    kind: Secret
    metadata:
      name: openldap-secrets
      namespace: openldap
    type: Opaque
    data:
      organization: "bXlvcmdhbml6YXRpb24="  # myorganization encodé en base64
      domain: "bXlkb21haW4="               # mydomain encodé en base64
      password: "bXlwYXNzd29yZA=="         # mypassword encodé en base64

    Définition du PersistentVolumeClaim

    Pour assurer la persistance des données LDAP, un PersistentVolumeClaim est défini :

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: openldap-data-disk
      namespace: openldap
    spec:
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 1Gi

    Déploiement d'OpenLDAP

    Le déploiement spécifie l'image Docker d'OpenLDAP, les ports à exposer, les variables d'environnement (récupérées depuis le Secret) et les volumes pour la persistance des données :

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: openldap-deployment
      namespace: openldap
      labels:
        app: openldap
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: openldap
      template:
        metadata:
          labels:
            app: openldap
        spec:
          containers:
            - name: openldap
              image: osixia/openldap:1.3.0
              ports:
                - containerPort: 389
                - containerPort: 636
              env:
                - name: LDAP_ORGANISATION
                  valueFrom:
                    secretKeyRef:
                      name: openldap-secrets
                      key: organization
                - name: LDAP_DOMAIN
                  valueFrom:
                    secretKeyRef:
                      name: openldap-secrets
                      key: domain
                - name: LDAP_ADMIN_PASSWORD
                  valueFrom:
                    secretKeyRef:
                      name: openldap-secrets
                      key: password
              volumeMounts:
                - name: openldap-volume
                  mountPath: "/var/lib/ldap"
                  subPath: database
                - name: openldap-volume
                  mountPath: "/etc/ldap/slapd.d"
                  subPath: config
          volumes:
            - name: openldap-volume
              persistentVolumeClaim:
                claimName: openldap-data-disk

    Service pour OpenLDAP

    Un Service de type ClusterIP est créé pour exposer OpenLDAP au sein du cluster :

    apiVersion: v1
    kind: Service
    metadata:
      name: openldap-service
      namespace: openldap
    spec:
      selector:
        app: openldap
      ports:
      - name: ldap
        protocol: TCP
        port: 389
        targetPort: 389
      - name: ldaps
        protocol: TCP
        port: 636
        targetPort: 636

    Déploiement de phpLDAPadmin

    Pour faciliter la gestion de LDAP, phpLDAPadmin est déployé :

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: phpldapadmin-deployment
      namespace: openldap
      labels:
        app: phpldapadmin
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: phpldapadmin
      template:
        metadata:
          labels:
            app: phpldapadmin
        spec:
          containers:
            - name: phpldapadmin
              image: osixia/phpldapadmin:0.9.0
              ports:
                - containerPort: 443
              env:
                - name: PHPLDAPADMIN_LDAP_HOSTS
                  value: openldap-service

    Service pour phpLDAPadmin

    Un Service de type LoadBalancer est défini pour permettre l'accès externe à phpLDAPadmin :

    apiVersion: v1
    kind: Service
    metadata:
      name: phpldapadmin-service
      namespace: openldap
    spec:
      type: LoadBalancer
      selector:
        app: phpldapadmin
      ports:
      - protocol: TCP
        port: 9943
        targetPort: 443

    3. Application du fichier YAML

    Après avoir défini toutes les ressources, appliquer le fichier YAML pour déployer OpenLDAP et phpLDAPadmin :

    kubectl apply -f openldap.yaml

    4. Accès à phpLDAPadmin

    Une fois le déploiement terminé, accéder à phpLDAPadmin via l'adresse IP attribuée au Service LoadBalancer, en utilisant le port 9943 :

    https://192.168.10.101:9943

    Identifiants de connexion :

    • Utilisateur : cn=admin,dc=mydomain
    • Mot de passe : celui défini dans le secret Kubernetes.

    Ce déploiement permet de gérer un annuaire LDAP efficacement dans un cluster Kubernetes, tout en garantissant une interface web simplifiée pour l'administration.

    ldap ldap2

    • Voici la configuration complete de mon LDAP :
    # LDIF Export for dc=unzy
    # Server: openldap-service (openldap-service)
    # Search Scope: sub
    # Search Filter: (objectClass=*)
    # Total Entries: 9
    #
    # Generated by phpLDAPadmin (http://phpldapadmin.sourceforge.net) on March 9, 2025 4:35 pm
    # Version: 1.2.5
    
    version: 1
    
    # Entry 1: dc=unzy
    dn: dc=unzy
    dc: unzy
    o: devops
    objectclass: top
    objectclass: dcObject
    objectclass: organization
    
    # Entry 2: cn=admin,dc=unzy
    dn: cn=admin,dc=unzy
    cn: admin
    description: LDAP administrator
    objectclass: simpleSecurityObject
    objectclass: organizationalRole
    userpassword: {SSHA}k0E3DnJhMzTy0+2PTfS4n5u84U3sWx+U
    
    # Entry 3: ou=Groups,dc=unzy
    dn: ou=Groups,dc=unzy
    objectclass: organizationalUnit
    objectclass: top
    ou: Groups
    
    # Entry 4: cn=Admin,ou=Groups,dc=unzy
    dn: cn=Admin,ou=Groups,dc=unzy
    cn: Admin
    gidnumber: 502
    memberuid: dclemente
    objectclass: posixGroup
    objectclass: top
    
    # Entry 5: cn=Famille,ou=Groups,dc=unzy
    dn: cn=Famille,ou=Groups,dc=unzy
    cn: Famille
    gidnumber: 500
    memberuid: dclemente
    memberuid: mclemente
    memberuid: fclemente
    objectclass: posixGroup
    objectclass: top
    
    # Entry 6: ou=Users,dc=unzy
    dn: ou=Users,dc=unzy
    objectclass: organizationalUnit
    objectclass: top
    ou: Users
    
    # Entry 7: cn=Damien clemente,ou=Users,dc=unzy
    dn: cn=Damien clemente,ou=Users,dc=unzy
    cn: Damien clemente
    gidnumber: 502
    givenname: Damien
    homedirectory: /home/users/dclemente
    loginshell: /bin/bash
    objectclass: inetOrgPerson
    objectclass: posixAccount
    objectclass: top
    sn: clemente
    uid: dclemente
    uidnumber: 1000
    userpassword: kube
    
    # Entry 8: cn=Frederic Clemente,ou=Users,dc=unzy
    dn: cn=Frederic Clemente,ou=Users,dc=unzy
    cn: Frederic Clemente
    gidnumber: 500
    givenname: Frederic
    homedirectory: /home/users/fclemente
    loginshell: /bin/bash
    objectclass: inetOrgPerson
    objectclass: posixAccount
    objectclass: top
    sn: Clemente
    uid: fclemente
    uidnumber: 1002
    userpassword: kube
    
    # Entry 9: cn=Mathieu Clemente,ou=Users,dc=unzy
    dn: cn=Mathieu Clemente,ou=Users,dc=unzy
    cn: Mathieu Clemente
    gidnumber: 500
    givenname: Mathieu
    homedirectory: /home/users/mclemente
    loginshell: /bin/bash
    objectclass: inetOrgPerson
    objectclass: posixAccount
    objectclass: top
    sn: Clemente
    uid: mclemente
    uidnumber: 1001
    userpassword: kube