Bastien Guillossou
Bastien Guillossou

Reputation: 11

Python Celery connect to redis with sentinel TLS

I have a issue to connect to my Redis 6 with python 3.9 and celery 5.3.6.

There is a Sentinel to use to connect and TLS activate.

I use this code to test my connection:

import ssl
from celery import Celery

REDIS_URL = "sentinel://sentinel_url:9990"

c = Celery("celery",
    broker=REDIS_URL,
    backend=REDIS_URL,
    broker_transport_options = {
       'master_name': 'RedisCluster',
       'sentinel_kwargs': {
           'ssl': True,
           'ssl_cert_reqs': ssl.CERT_NONE
       }
    },
    result_backend_transport_options = {
      'master_name': 'RedisCluster',
      'sentinel_kwargs': {
          'ssl': True,
          'ssl_cert_reqs': ssl.CERT_NONE
      }
    },
    broker_use_ssl = {
      'ssl_cert_reqs': ssl.CERT_NONE
    },
    redis_backend_use_ssl = {
      'ssl_cert_reqs': ssl.CERT_NONE
    },
)

def test():
    print("hello")

work = c.send_task(test())

And i have this error

Traceback (most recent call last):
  File "/app/ansit00/ansible-6.2/venv-INFRAPDO/lib64/python3.8/site-packages/kombu/connection.py", line 472, in _reraise_as_library_errors
    yield
  File "/app/ansit00/ansible-6.2/venv-INFRAPDO/lib64/python3.8/site-packages/celery/app/base.py", line 798, in send_task
    self.backend.on_task_call(P, task_id)
  File "/app/ansit00/ansible-6.2/venv-INFRAPDO/lib64/python3.8/site-packages/celery/backends/redis.py", line 373, in on_task_call
    self.result_consumer.consume_from(task_id)
  File "/app/ansit00/ansible-6.2/venv-INFRAPDO/lib64/python3.8/site-packages/celery/backends/redis.py", line 169, in consume_from
    return self.start(task_id)
  File "/app/ansit00/ansible-6.2/venv-INFRAPDO/lib64/python3.8/site-packages/celery/backends/redis.py", line 147, in start
    self._consume_from(initial_task_id)
  File "/app/ansit00/ansible-6.2/venv-INFRAPDO/lib64/python3.8/site-packages/celery/backends/redis.py", line 177, in _consume_from
    self._pubsub.subscribe(key)
  File "/opt/rh/rh-python38/root/usr/lib64/python3.8/contextlib.py", line 131, in __exit__
    self.gen.throw(type, value, traceback)
  File "/app/ansit00/ansible-6.2/venv-INFRAPDO/lib64/python3.8/site-packages/celery/backends/redis.py", line 130, in reconnect_on_error
    self._ensure(self._reconnect_pubsub, ())
  File "/app/ansit00/ansible-6.2/venv-INFRAPDO/lib64/python3.8/site-packages/celery/backends/redis.py", line 384, in ensure
    return retry_over_time(
  File "/app/ansit00/ansible-6.2/venv-INFRAPDO/lib64/python3.8/site-packages/kombu/utils/functional.py", line 318, in retry_over_time
    return fun(*args, **kwargs)
  File "/app/ansit00/ansible-6.2/venv-INFRAPDO/lib64/python3.8/site-packages/celery/backends/redis.py", line 106, in _reconnect_pubsub
    metas = self.backend.client.mget(self.subscribed_to)
  File "/app/ansit00/ansible-6.2/venv-INFRAPDO/lib64/python3.8/site-packages/redis/commands/core.py", line 2016, in mget
    return self.execute_command("MGET", *args, **options)
  File "/app/ansit00/ansible-6.2/venv-INFRAPDO/lib64/python3.8/site-packages/redis/client.py", line 540, in execute_command
    conn = self.connection or pool.get_connection(command_name, **options)
  File "/app/ansit00/ansible-6.2/venv-INFRAPDO/lib64/python3.8/site-packages/redis/connection.py", line 1104, in get_connection
    connection.connect()
  File "/app/ansit00/ansible-6.2/venv-INFRAPDO/lib64/python3.8/site-packages/redis/sentinel.py", line 55, in connect
    return self.retry.call_with_retry(self._connect_retry, lambda error: None)
  File "/app/ansit00/ansible-6.2/venv-INFRAPDO/lib64/python3.8/site-packages/redis/retry.py", line 51, in call_with_retry
    raise error
  File "/app/ansit00/ansible-6.2/venv-INFRAPDO/lib64/python3.8/site-packages/redis/retry.py", line 46, in call_with_retry
    return do()
  File "/app/ansit00/ansible-6.2/venv-INFRAPDO/lib64/python3.8/site-packages/redis/sentinel.py", line 45, in _connect_retry
    self.connect_to(self.connection_pool.get_master_address())
  File "/app/ansit00/ansible-6.2/venv-INFRAPDO/lib64/python3.8/site-packages/redis/sentinel.py", line 35, in connect_to
    super().connect()
  File "/app/ansit00/ansible-6.2/venv-INFRAPDO/lib64/python3.8/site-packages/redis/connection.py", line 288, in connect
    self.on_connect()
  File "/app/ansit00/ansible-6.2/venv-INFRAPDO/lib64/python3.8/site-packages/redis/connection.py", line 391, in on_connect
    self.read_response()
  File "/app/ansit00/ansible-6.2/venv-INFRAPDO/lib64/python3.8/site-packages/redis/sentinel.py", line 65, in read_response
    return super().read_response(
  File "/app/ansit00/ansible-6.2/venv-INFRAPDO/lib64/python3.8/site-packages/redis/connection.py", line 512, in read_response
    response = self._parser.read_response(disable_decoding=disable_decoding)
  File "/app/ansit00/ansible-6.2/venv-INFRAPDO/lib64/python3.8/site-packages/redis/_parsers/resp2.py", line 15, in read_response
    result = self._read_response(disable_decoding=disable_decoding)
  File "/app/ansit00/ansible-6.2/venv-INFRAPDO/lib64/python3.8/site-packages/redis/_parsers/resp2.py", line 38, in _read_response
    raise error
redis.exceptions.AuthenticationError: Authentication required.

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "test_redis4.py", line 38, in <module>
    work = c.send_task(test())
  File "/app/ansit00/ansible-6.2/venv-INFRAPDO/lib64/python3.8/site-packages/celery/app/base.py", line 799, in send_task
    amqp.send_task_message(P, name, message, **options)
  File "/opt/rh/rh-python38/root/usr/lib64/python3.8/contextlib.py", line 131, in __exit__
    self.gen.throw(type, value, traceback)
  File "/app/ansit00/ansible-6.2/venv-INFRAPDO/lib64/python3.8/site-packages/kombu/connection.py", line 476, in _reraise_as_library_errors
    raise ConnectionError(str(exc)) from exc
kombu.exceptions.OperationalError: Authentication required.

I am thinking of passing master info from Sentinel and crash on Authen on Redis.

I don't know to set my user and password in my block code for Redis.

Upvotes: 1

Views: 171

Answers (0)

Related Questions