使用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截断或转义。
- 在K8s Secret中存储时,用
内容的提问来源于stack exchange,提问作者ME-N7




