You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用Python执行Redis rpush命令时遭遇密码验证错误

解决Redis rpush命令的“authentication error - invalid password”问题

我来帮你排查这个投票应用里的Redis认证错误——虽然你已经成功初始化了连接对象,但执行rpush时触发密码无效的报错,大概率是认证环节的细节没处理到位,咱们一步步梳理:

1. 先确认Redis实例的实际密码配置

  • 首先得搞清楚你的Redis Pod到底设置了什么密码:
    • 执行kubectl exec -it <your-redis-pod-name> -- redis-cli进入Redis命令行,输入config get requirepass,返回的结果就是当前Redis要求的密码。
    • 同时检查Redis的部署配置(Deployment/StatefulSet的YAML文件),看看是不是通过REDIS_PASSWORD环境变量或者配置文件设置了密码,确保这个值和你预期的一致。

2. 检查Vote应用的Redis密码传递是否正确

  • 看你的app.py代码,Redis连接部分需要手动添加密码参数,原示例代码默认没带密码逻辑,你需要修改成:
    import os
    import redis
    
    redis_conn = redis.Redis(
        host=os.getenv('REDIS_HOST', 'new-redis'),
        port=6379,
        password=os.getenv('REDIS_PASSWORD')  # 从环境变量读取Redis密码
    )
    
  • 然后确保Vote应用的K8s Deployment里,已经把Redis的密码通过环境变量注入进去了。比如在Deployment的spec.template.spec.containers[0].env里添加:
    - name: REDIS_PASSWORD
      valueFrom:
        secretKeyRef:
          name: redis-secret  # 替换成你的Redis密码所在的Secret名称
          key: password       # 替换成Secret中存储密码的key
    

3. 理解Redis连接的懒加载特性

  • 你看到的Redis<ConnectionPool<Connection<host=new-redis,port=6379,db=0>>>只是连接对象初始化完成,但Redis-Py的连接是懒加载的——只有当你执行第一个命令(比如rpush)时,才会真正和Redis服务器建立连接并发起认证请求。所以之前的连接对象创建成功不代表认证没问题,执行命令时才会暴露错误。
  • 可以在代码里连接后立刻加个ping()测试,提前发现问题:
    try:
        redis_conn.ping()
        print("Redis认证成功")
    except redis.AuthenticationError:
        print("Redis认证失败,请检查密码")
    

4. 排查密码的特殊字符问题

  • 如果你的Redis密码包含特殊字符(比如@$!这类),要注意:
    • 在K8s Secret中存储时,用kubectl create secret generic redis-secret --from-literal=password=your-special-password命令创建,避免手动base64编码出错。
    • 进入Vote应用的Pod执行echo $REDIS_PASSWORD,看看输出的密码是不是完整正确的,防止特殊字符被shell截断或转义。

内容的提问来源于stack exchange,提问作者ME-N7

火山引擎 最新活动