Запуск openldap сервера + gui openldapadmin в docker swarm mode

Итак статья для тех, кто использует человеческий swarm вместо ублюдского kubernetes для ушлёпков.
Запускаем в swarm mode openldap.
Предполагается что у вас уже есть swarm — делается это одной-двумя командами.
Если у вас одна нода — manager и она же воркер делаем просто

docker swarm init

Увидим

Swarm initialized: current node (o91r08ngi1x7v7f4qoednp4uk) is now a manager.
To add a worker to this swarm, run the following command:
    docker swarm join \
    --token SWMTKN-1-03yleiqkrn9iwfc8qnuwctsulrp4v3sn4eqhrfz4kpahgnyc8r-5v6apaxtt85vbib3tdm5cb2nr \
    192.168.0.132:2377

Ок. Идем далее.
Деплоить будем из docker-compose.yml файла — очень удобно. Все переменные будут указаны в файлике

.env

Итак приступим.
Создаем файлик .env и запихиваем в него следующее содержимое

OPENLDAP_VERSION=1.2.0
LDAP_PORT=389
LDAP_PORT_TSL=636
LDAP_LOG_LEVEL=256
LDAP_ORGANISATION=ITC_LIFE LTD
LDAP_DOMAIN=itc-life.ru
LDAP_BASE_DN=
LDAP_ADMIN_PASSWORD=ADMIN_PASSWORD
LDAP_CONFIG_PASSWORD=config
LDAP_READONLY_USER=false
LDAP_READONLY_USER_USERNAME=readonly
LDAP_READONLY_USER_PASSWORD=readonly
LDAP_RFC2307BIS_SCHEMA=false
LDAP_BACKEND=mdb
LDAP_TLS=true
LDAP_TLS_CRT_FILENAME=ldap.crt
LDAP_TLS_KEY_FILENAME=ldap.key
LDAP_TLS_CA_CRT_FILENAME=ca.crt
LDAP_TLS_ENFORCE=false
LDAP_TLS_CIPHER_SUITE=SECURE256:-VERS-SSL3.0
LDAP_TLS_PROTOCOL_MIN=3.1
LDAP_TLS_VERIFY_CLIENT=demand
LDAP_REPLICATION=false
KEEP_EXISTING_CONFIG=false
LDAP_REMOVE_CONFIG_AFTER_SETUP=true
LDAP_SSL_HELPER_PREFIX=ldap
PHP_LDAPADMIN_PORT=8080

Здесь мы указываем много параметров — имя домена,пароль админа и т.д и т.п.
Создаем файлик docker-compose.yml для деалоя в наш swarm.

docker-compose.yml
version: '3.3'
services:
  openldap:
    image: osixia/openldap:${OPENLDAP_VERSION}
    #container_name: openldap
    environment:
      LDAP_LOG_LEVEL: "${LDAP_LOG_LEVEL}"
      LDAP_ORGANISATION: "${LDAP_ORGANISATION}"
      LDAP_DOMAIN: "${LDAP_DOMAIN}"
      LDAP_BASE_DN: ""
      LDAP_ADMIN_PASSWORD: "${LDAP_ADMIN_PASSWORD}"
      LDAP_CONFIG_PASSWORD: "${LDAP_CONFIG_PASSWORD}"
      LDAP_READONLY_USER: "${LDAP_READONLY_USER}"
      #LDAP_READONLY_USER_USERNAME: "readonly"
      #LDAP_READONLY_USER_PASSWORD: "readonly"
      LDAP_RFC2307BIS_SCHEMA: "${LDAP_RFC2307BIS_SCHEMA}"
      LDAP_BACKEND: "${LDAP_BACKEND}"
      LDAP_TLS: "${LDAP_TLS}"
      LDAP_TLS_CRT_FILENAME: "${LDAP_TLS_CRT_FILENAME}"
      LDAP_TLS_KEY_FILENAME: "${LDAP_TLS_KEY_FILENAME}"
      LDAP_TLS_CA_CRT_FILENAME: "${LDAP_TLS_CA_CRT_FILENAME}"
      LDAP_TLS_ENFORCE: "${LDAP_TLS_ENFORCE}"
      LDAP_TLS_CIPHER_SUITE: "${LDAP_TLS_CIPHER_SUITE}"
      LDAP_TLS_PROTOCOL_MIN: "${LDAP_TLS_PROTOCOL_MIN}"
      LDAP_TLS_VERIFY_CLIENT: "${LDAP_TLS_VERIFY_CLIENT}"
      LDAP_REPLICATION: "${LDAP_REPLICATION}"
      #LDAP_REPLICATION_CONFIG_SYNCPROV: "binddn="cn=admin,cn=config" bindmethod=simple credentials=$LDAP_CONFIG_PASSWORD searchbase="cn=config" type=refreshAndPersist retry="60 +" timeout=1 starttls=critical"
      #LDAP_REPLICATION_DB_SYNCPROV: "binddn="cn=admin,$LDAP_BASE_DN" bindmethod=simple credentials=$LDAP_ADMIN_PASSWORD searchbase="$LDAP_BASE_DN" type=refreshAndPersist interval=00:00:00:10 retry="60 +" timeout=1 starttls=critical"
      #LDAP_REPLICATION_HOSTS: "#PYTHON2BASH:['ldap://ldap.example.org','ldap://ldap2.example.org']"
      KEEP_EXISTING_CONFIG: "${KEEP_EXISTING_CONFIG}"
      LDAP_REMOVE_CONFIG_AFTER_SETUP: "${LDAP_REMOVE_CONFIG_AFTER_SETUP}"
      LDAP_SSL_HELPER_PREFIX: "${LDAP_SSL_HELPER_PREFIX}"
    #tty: true
    #stdin_open: true
    volumes:
      - type: volume
        source: ldap_data
        target: /var/lib/ldap
        volume:
          nocopy: false
      - type: volume
        source: ldap_slap
        target: /etc/ldap/slapd.d
        volume:
          nocopy: false
      - type: volume
        source: ldap_certs
        target: /container/service/slapd/assets/certs/
        volume:
          nocopy: false
    ports:
      - "${LDAP_PORT}:389"
      - "${LDAP_PORT_TSL}:636"
    #domainname: "${LDAP_DOMAIN}"
    hostname: "${LDAP_DOMAIN}"
    networks:
      ldap-network:
        aliases:
          - openldap.local
    deploy:
      #endpoint_mode: dnsrr
      #mode: replicated
      replicas: 1
      resources:
        # Hard limit - Docker does not allow to allocate more
        limits:
          cpus: '1'
          memory: 1G
        # Soft limit - Docker makes best effort to return to it
        reservations:
          #cpus: '0.25'
          memory: 256M
      # service restart policy
      restart_policy:
        condition: on-failure
        delay: 5s
        max_attempts: 8
        window: 3s
      # service update configuration
      update_config:
        parallelism: 1
        delay: 10s
        failure_action: continue
        monitor: 60s
        max_failure_ratio: 0.3
      # placement constraint - in this case on 'worker' nodes only
      placement:
        constraints: [node.role == manager]
  phpldapadmin:
    image: osixia/phpldapadmin:latest
    #container_name: phpldapadmin
    environment:
      PHPLDAPADMIN_LDAP_HOSTS: "openldap"
      PHPLDAPADMIN_HTTPS: "false"
    ports:
      - "${PHP_LDAPADMIN_PORT}:80"
    depends_on:
      - openldap
    networks:
      ldap-network:
        aliases:
          - phpldapadmin.local
    deploy:
      #endpoint_mode: dnsrr
      #mode: replicated
      replicas: 1
      resources:
        # Hard limit - Docker does not allow to allocate more
        limits:
          cpus: '1'
          memory: 256M
        # Soft limit - Docker makes best effort to return to it
        reservations:
          #cpus: '0.25'
          memory: 256M
      # service restart policy
      restart_policy:
        condition: on-failure
        delay: 5s
        max_attempts: 8
        window: 3s
      # service update configuration
      update_config:
        parallelism: 1
        delay: 10s
        failure_action: continue
        monitor: 60s
        max_failure_ratio: 0.3
      # placement constraint - in this case on 'worker' nodes only
      placement:
        constraints: [node.role == manager]
##NETWORKS
networks:
  ldap-network:
    driver: overlay
##VOLUMES
volumes:
  ldap_data:
  ldap_slap:
  ldap_certs:

Данные будут храниться в volumes:

  ldap_data:
  ldap_slap:
  ldap_certs:

Здесь мы указали переменные лимиты и всякую шляпу.
Запускаем.

export $(cat .env) && docker stack deploy --compose-file=docker-compose.yml ldap

Заходим в

127.0.0.1:8080

Логин

cn=admin,dc=itc-life,dc=ru
Пароль - указан в .env.

Всё.
Создаем для начала posix group, затем пользователя и наслаждаемся.
Чтобы проверить работу.

docker exec имяконтейнераopenldap ldapsearch -x -H ldap://localhost -b dc=itc-life,dc=ru -D "cn=admin,dc=itc-life,dc=ru" -w пароль_админа

Увиди текущих пользователей и т.д. и т.п
Чтобы удалить сервис.

docker stack rm ldap

Добавить комментарий

Войти с помощью: 

Ваш e-mail не будет опубликован. Обязательные поля помечены *

 

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.