image.png最近,我试图为生产环境设置 Redis,我必须说这是一段坎坷的旅程。我在设置 TLS 时遇到了很多问题。

如果你不知道 什么是 Redis?

Redis 是一个开源(BSD 许可)的内存数据结构存储,用作数据库、缓存和消息代理。 - redis.io

在本指南中,我将向您展示如何使用 Docker 设置带 TLS 的 Redis。 TLS 部分可用于独立安装。但请记住,您需要从源代码构建 Redis 才能在独立模式下使用 TLS。

那么,让我们开始吧。

先决条件

  • 安装了 Docker。

  • Docker Compose 已安装。

  • 用于测试 Redis 安装的客户端。我推荐github.com/ekvedaras/redis-gui。它很简单,但可以随意使用任何你喜欢的东西。

运行Redis容器

让我们先在没有 TLS 的情况下运行 Redis 容器 -

创建一个文件compose.yml并粘贴下面的内容。

services:
  redis:
    image: docker.io/bitnami/redis:6.2
    user: "${UID}:${GID}"
    environment:
      - ALLOW_EMPTY_PASSWORD=false 
      - REDIS_PASSWORD=the-stronge-one
      - REDIS_DISABLE_COMMANDS=FLUSHDB,FLUSHALL
    ports:
      - '6379:6379'
    volumes:
      - 'redis_data:/bitnami/redis/data'

volumes:
  redis_data:
    driver: local

在我们正在做的compose.yml文件中

  1. 指定要运行的图像。这里我选择了binami镜像而不是官方的 docker 镜像,因为它能够使用 TLS 运行而无需从源代码构建。

  2. 指定port6379 和一个 docker 卷来持久化数据。

3.设置一些环境变量

让我们运行容器

docker-compose up -d

您的容器应该已启动并正在运行。您应该能够使用Redis GUI或任何其他客户端连接到您的 Redis 实例。确保您没有指定任何 TLS 选项,因为我们将在本指南的后面部分介绍。

生成证书

为了使用 TLS 运行 Redis,我们需要提供自己的 SSL 证书。您可以购买一个,或者对于这个我们不需要购买的用例,但为我们的 Redis 实例和连接到它的客户端生成我们自己的自签名证书。这是对我来说最麻烦的部分。

这可能会令人困惑,但请耐心等待,应该没问题。

脚本

我们可以手动执行此步骤,但由于在 Redis GitHub 存储库中,有一个脚本可以为我们的用例生成一些证书,我们将使用它。

wget https://raw.githubusercontent.com/redis/redis/cc0091f0f9fe321948c544911b3ea71837cf86e3/utils/gen-test-certs.sh

下载脚本后,让我们运行它

sh gen-test-certs.sh

该脚本将创建一个tests/tls文件夹,其中包含我们需要的所有证书。

此外,您可以修改脚本以添加您的组织名称、fqdn 和 SSL 证书的其他重要参数。继续查看该目录中的文件。

我们对以下文件感兴趣 -

  • redis.crt

  • redis.key

  • 克拉

  • 客户端.crt

  • 客户端.key

让我们进入下一步,更新我们的compose.yml文件并包含这些证书文件以告诉 Redis 以 TLS 开始。

配置TLS

让我们通过将上述文件指定为环境变量来告诉 Redis 容器。在这里,bitnami映像最好的部分是您可以使用 TLS 启动容器,而无需再次构建原始 redis 映像。

更新您的compose.yml文件以匹配以下内容


services:
  redis:
    image: docker.io/bitnami/redis:6.2
    user: "${UID}:${GID}"
    environment:
      - ALLOW_EMPTY_PASSWORD=false
      - REDIS_PASSWORD=the-strong-one
      - REDIS_DISABLE_COMMANDS=FLUSHDB,FLUSHALL
      - REDIS_TLS_CERT_FILE=/tls/redis.crt
      - REDIS_TLS_KEY_FILE=/tls/redis.key
      - REDIS_TLS_CA_FILE=/tls/ca.crt
      - REDIS_TLS_ENABLED=yes
      - REDIS_TLS_PORT=6379
    ports:
      - '6379:6379'
    volumes:
      - 'redis_data:/bitnami/redis/data'
      - ./tests/tls:/tls

volumes:
  redis_data:
    driver: local

请注意,我们已经指定了环境变量并在容器内为证书文件指定了一个路径(即 /tls/*)。我们将 cert 文件夹(即 ./tests/tls)挂载到容器的同一路径(即 /tls*)上。

呸!而已。现在我们可以再次运行我们的容器,它将从启用 TLS 开始。

docker-compose up -d

现在,与您的客户一起测试。您需要配置您的客户端以使用我们的自签名客户端证书和 ca 证书进行连接。

快乐缓存。


随时询问您是否在途中遇到任何问题。

Logo

Redis社区为您提供最前沿的新闻资讯和知识内容

更多推荐