使用 Docker 使用 TLS 设置 Redis
最近,我试图为生产环境设置 Redis,我必须说这是一段坎坷的旅程。我在设置 TLS 时遇到了很多问题。 如果你不知道 什么是 Redis? Redis 是一个开源(BSD 许可)的内存数据结构存储,用作数据库、缓存和消息代理。 - redis.io 在本指南中,我将向您展示如何使用 Docker 设置带 TLS 的 Redis。 TLS 部分可用于独立安装。但请记住,您需要从源代码构建 Redi
最近,我试图为生产环境设置 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
文件中
-
指定要运行的图像。这里我选择了
binami
镜像而不是官方的 docker 镜像,因为它能够使用 TLS 运行而无需从源代码构建。 -
指定
port
6379 和一个 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 证书进行连接。
快乐缓存。
随时询问您是否在途中遇到任何问题。
更多推荐
所有评论(0)