Контейнер Docker не может получить доступ к серверу LDAP - PullRequest
0 голосов
/ 11 июля 2019

У меня есть приложение для доступа к серверу LDAP (Active Directory), и оно работает правильно, когда работает локально.Однако, когда он запускается в док-контейнере, приложение не может получить доступ к серверу Active Directory.Я выполнил команду ping внутри контейнера, и она сработала.

# ping 10.10.2.1
PING 10.10.2.1 (10.10.2.1) 56(84) bytes of data.
64 bytes from 10.10.2.1: icmp_seq=1 ttl=37 time=14.7 ms
64 bytes from 10.10.2.1: icmp_seq=2 ttl=37 time=16.5 ms
64 bytes from 10.10.2.1: icmp_seq=3 ttl=37 time=14.5 ms
64 bytes from 10.10.2.1: icmp_seq=4 ttl=37 time=11.8 ms
64 bytes from 10.10.2.1: icmp_seq=5 ttl=37 time=15.8 ms
^C
--- 10.10.2.1 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4006ms
rtt min/avg/max/mdev = 11.854/14.700/16.554/1.606 ms

Приведенный ниже код отвечает за доступ к серверу LDAP.

        /// <summary>
        /// Construtor da classe
        /// </summary>
        /// <param name="configuration">Parâmetro de configuração</param>
        public ActiveDirectoryClient(IConfiguration configuration, ILogger<ActiveDirectoryClient> logger)
        {
            _logger = logger;
            _configuration = configuration;
            _domain = _configuration["LDAPAdress"];
        }

        /// <summary>
        /// Tenta conectar com o ActiveDirectory até uma quantidade de vezes e um intervalo de tempo fornecido em segundos
        /// </summary>
        /// <param name="attemps">Número de tentativas</param>
        /// <param name="retryInterval">Intervalo de tempo entre as tentativas em segundos</param>
        /// <returns>Retorna o contexto do Active Directory</returns>
        /// <exception cref="CustomException">Lançada quando não é possível se conectar com o ActiveDiretory</exception>
        private PrincipalContext TryConnectActiveDirectory(int attemps, double retryInterval)
        {
            while (attemps > 0)
            {
                _context = null;
                var isRetry = false;


                _logger.LogCritical(_domain);
                try
                {
                    _context = new PrincipalContext(ContextType.Domain, _domain);
                }
                catch (Exception)
                {
                    isRetry = true;
                    attemps--;
                    Thread.Sleep(TimeSpan.FromSeconds(retryInterval));
                }

                if (isRetry || _context.Container == null)
                {
                    attemps--;
                    Thread.Sleep(TimeSpan.FromSeconds(retryInterval));
                }
            }

            _logger.LogCritical(_domain);

            if (_context == null)
            {
                throw new CustomException(HttpStatusCode.ServiceUnavailable, "Não foi possível conectar-se com o servidor");
            }

            return _context;
        }

Этот файл имеет конфигурации проекта

{
  "LDAPAdress": "10.10.2.1",
  "Logging": {
    "LogLevel": {
      "Default": "Warning"
    }
  },
  "AllowedHosts": "*"
}

Я назначил порт контейнера с 60331 на 80.Это работает, потому что у меня есть доступ к браузеру броска страниц сваггера на хосте по адресу http://localhost:60331.

Я выполнил команду tcpdump -i eth0 port 389 -v внутри контейнера, чтобы прослушать все запросы к *Порт 1020 * и ничего не было возвращено, однако, когда я запускаю приложение локально, некоторые запросы порта 389 могут быть обнаружены.

Может ли кто-нибудь помочь?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...