我在 Azure Kubernetes 服务 (AKS) 环境中反复遇到与 Redis 身份验证和意外连接关闭相关的错误。这些错误是在不同的组件(coredns、echo-server 和代理)中生成的,并在 Datadog 日志中捕获。
以下是我看到的错误的一些示例:
Redis 身份验证错误
2024-10-27 07:45:08 UTC |核心|错误 | (pkg/collector/worker/check_logger.go:71 错误) |检查:redisdb |运行检查时出错:[{“message”:“需要身份验证。”,“traceback”:“回溯(最近一次调用):文件”/opt/datadog-agent/embedded/lib/python3.11/site-packages/ datadog_checks/base/checks/base.py",第 1228 行,运行 self.check(instance) ... redis.exceptions.AuthenticationError:需要身份验证。"}]
client.go:528]“远程连接EOF”connectionID=7018
[警告]没有与导入全局模式匹配的文件:自定义*/.override
我不确定 Redis 的身份验证错误是否与 AKS/Kubernetes 配置有关,或者与 Redis 本身的问题有关。此外,EOF 错误表明可能存在连接不稳定。
我尝试过的:
• 重新启动所有 Pod - 它们运行良好且正在运行。
• 检查 AKS 网络配置是否存在任何潜在的连接问题。最明显的是 client.go:528]“远程连接 EOF”connectionID=7018
• 检查 CoreDNS 配置是否存在潜在的错误配置。
环境详情:
• 云提供商:Azure
• 服务:Azure Kubernetes 服务 (AKS)
• 监控:Datadog
• 相关日志:通过 Datadog 的日志浏览器收集
任何有关如何解决 Redis 身份验证问题并防止连接 EOF 错误的见解将不胜感激!
要解决您遇到的身份验证和连接 EOF 错误,您可以执行一些故障排除步骤来查看问题所在。例如,部署Redis客户端并测试和验证Redis密码是否配置正确,然后检查或调整CoreDNS配置并交叉检查网络策略。如果您仍然遇到问题,请按照以下步骤操作 -
部署Redis(我使用helm)
helm repo add bitnami https://charts.bitnami.com/bitnami
helm install redis-release bitnami/redis \
--namespace redis \
--set auth.password=$REDIS_PASSWORD \
--set replica.replicaCount=1
检查 Redis Pod 是否已启动以及是否可以执行它们
kubectl get pods -n redis
我相信这是您遇到问题的地方。要测试 Redis 连接和身份验证,请部署 Redis 客户端。
apiVersion: v1
kind: Pod
metadata:
name: redis-client
namespace: redis
spec:
containers:
- name: redis-client
image: redis
env:
- name: REDIS_PASSWORD
valueFrom:
secretKeyRef:
name: redis-password
key: password
command: ["sh", "-c", "redis-cli -h redis-release-master -a $REDIS_PASSWORD ping && sleep 3600"]
检查客户端是否可以连接Redis并进行身份验证
kubectl logs redis-client -n redis
您应该看到
PONG
,表示 Redis 连接成功。
将 Datadog API 密钥存储为 Kubernetes 秘密
kubectl create secret generic datadog-secret --from-literal=api-key=<YOUR_DATADOG_API_KEY> -n redis
部署 Datadog 代理
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: datadog-agent
namespace: redis
spec:
selector:
matchLabels:
app: datadog-agent
template:
metadata:
labels:
app: datadog-agent
spec:
containers:
- name: datadog-agent
image: datadog/agent:latest
env:
- name: DD_API_KEY
valueFrom:
secretKeyRef:
name: datadog-secret
key: api-key
- name: DD_SITE
value: "us5.datadoghq.com"
- name: DD_HEALTH_PORT
value: "5555"
- name: KUBERNETES
value: "true"
ports:
- containerPort: 8125
- containerPort: 8126
Datadog 代理现在应该监控日志和指标,提供有关 Redis 连接和潜在问题的见解。
如您所见,Redis 设置在负载下表现良好,使用 50 个并行客户端,在 1 秒多一点的时间内完成了 10,000 个请求。
参考资料: