Bitnami Redis 关于 Kubernetes 身份验证失败与现有密钥

Posted

技术标签:

【中文标题】Bitnami Redis 关于 Kubernetes 身份验证失败与现有密钥【英文标题】:Bitnami Redis on Kubernetes Authentication Failure with Existing Secret 【发布时间】:2021-10-27 18:53:51 【问题描述】:

我正在尝试使用Bitnami Redis HELM Chart 在 Kubernetes 环境中安装 Redis。我想使用定义的密码而不是随机生成的密码。但是当我想使用 redis-cli 连接到 redis 主服务器或副本时,我在下面遇到错误。

I have no name!@redis-client:/$ redis-cli -h redis-master -a $REDIS_PASSWORD 
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
Warning: AUTH failed

我创建了一个这样的 Kubernetes 机密。

---
apiVersion: v1
kind: Secret
metadata:
  name: redis-secret
  namespace: redis
type: Opaque
data:
  redis-password: YWRtaW4xMjM0Cg==

在 values.yaml 文件中,我更新了如下所示的身份验证规范。

auth:
  enabled: true
  sentinel: false
  existingSecret: "redis-secret"
  existingSecretPasswordKey: "redis-password"
  usePasswordFiles: false

如果我没有定义existingSecret 字段并使用随机生成的密码,那么我可以毫无问题地连接。在Warning: AUTH failed 错误之后,我也尝试了AUTH admin1234,但它也不起作用。

【问题讨论】:

【参考方案1】:

问题在于我如何使用 echo 命令对密码进行编码。我的密码末尾有一个换行符。我尝试使用 printf 命令而不是 echo 并创建了不同的结果。

printf admin1234 | base64

【讨论】:

【参考方案2】:

您可以通过更简单的方式实现它,即通过运行:

$ helm install my-release \
  --set auth.password="admin1234" \
    bitnami/redis

这将更新您的 "my-release-redis" 密码,因此当您运行时:

$ kubectl get secrets my-release-redis -o yaml

你会看到它包含你的密码,已经base64-encoded:

apiVersion: v1
data:
  redis-password: YWRtaW4xMjM0Cg==
kind: Secret
...

为了得到你的密码,你需要运行:

export REDIS_PASSWORD=$(kubectl get secret --namespace default my-release-redis -o jsonpath=".data.redis-password" | base64 --decode)

这将设置并导出包含您的 redis 密码的 REDIS_PASSWORD 环境变量。

然后你可以运行你的redis-client pod:

kubectl run --namespace default redis-client --restart='Never'  --env REDIS_PASSWORD=$REDIS_PASSWORD  --image docker.io/bitnami/redis:6.2.4-debian-10-r13 --command -- sleep infinity

这将在您的redis-client pod 中设置REDIS_PASSWORD 环境变量,方法是为其分配在上一步中本地设置的REDIS_PASSWORD 的值。

【讨论】:

你好@ÇağatayÇiftçi。这是answer your question吗? 我试图了解为什么我无法使用现有的秘密并尝试使用其他图表来查看它是否与 bitnami redis 图表相关。但问题在于我的 base64 编码。我的密码末尾有一个换行符,因为我是这样编码的; echo admin1234 | base64 当我尝试使用 printf 时,它产生了不同的结果,我现在可以使用现有的秘密。这是我这边的一个错误。将其发布为答案。谢谢回复。 printf admin1234 | base64 您仍然可以使用echo 命令:echo -n „password” | base64。只需添加-n 选项(不输出尾随换行符)。

以上是关于Bitnami Redis 关于 Kubernetes 身份验证失败与现有密钥的主要内容,如果未能解决你的问题,请参考以下文章

使用bitnamiredis-sentinel部署Redis 哨兵模式

使用Helm安装生产级别redis集群

如何插入托管在 Google Cloud (bitnami) 上的 Elasticsearch

无法连接到我本地 Spring Boot 中在 docker 上运行的 redis sentinel

关于redmine的备份和恢复该怎么做

.htaccess 关于 xampp 2 问题