Azure AKS/Kubernetes 集群中的 Redis 身份验证和连接 EOF 错误问题

问题描述 投票:0回答:1

我在 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:需要身份验证。"}]

  1. 远程连接EOF

client.go:528]“远程连接EOF”connectionID=7018

  1. CoreDNS 警告

[警告]没有与导入全局模式匹配的文件:自定义*/.override

我不确定 Redis 的身份验证错误是否与 AKS/Kubernetes 配置有关,或者与 Redis 本身的问题有关。此外,EOF 错误表明可能存在连接不稳定。

我尝试过的:

• 重新启动所有 Pod - 它们运行良好且正在运行。

• 检查 AKS 网络配置是否存在任何潜在的连接问题。最明显的是 client.go:528]“远程连接 EOF”connectionID=7018

• 检查 CoreDNS 配置是否存在潜在的错误配置。

环境详情:

• 云提供商:Azure

• 服务:Azure Kubernetes 服务 (AKS)

• 监控:Datadog

• 相关日志:通过 Datadog 的日志浏览器收集

任何有关如何解决 Redis 身份验证问题并防止连接 EOF 错误的见解将不胜感激!

azure kubernetes redis
1个回答
0
投票

要解决您遇到的身份验证和连接 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

enter image description here

检查 Redis Pod 是否已启动以及是否可以执行它们

kubectl get pods -n redis

enter image description here

我相信这是您遇到问题的地方。要测试 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"]

enter image description here

检查客户端是否可以连接Redis并进行身份验证

kubectl logs redis-client -n redis

您应该看到

PONG
,表示 Redis 连接成功。

enter image description here

将 Datadog API 密钥存储为 Kubernetes 秘密

kubectl create secret generic datadog-secret --from-literal=api-key=<YOUR_DATADOG_API_KEY> -n redis

enter image description here

部署 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

enter image description here

Datadog 代理现在应该监控日志和指标,提供有关 Redis 连接和潜在问题的见解。

enter image description here

如您所见,Redis 设置在负载下表现良好,使用 50 个并行客户端,在 1 秒多一点的时间内完成了 10,000 个请求。

参考资料:

© www.soinside.com 2019 - 2024. All rights reserved.