0

每当我将 TLS 密钥添加到配置文件时,我的 Kraken(版本 2)部署都会崩溃。

第 1 步:我使用 OpenSSL 生成了一个公钥和私钥对。

> openssl genrsa -out private-key.pem 4096
> openssl rsa -in private-key.pem -pubout -out public-key.pem

第 2 步:我在容器中启动了 KrakenD,并安装了以下卷 /etc/krakend/run/desktop/mnt/host/c/apitest/conf

容器不会崩溃

第 3 步:我关闭容器并将以下内容添加到我的 kraken 配置文件中。

"tls": {
   "private_key": "/etc/krakend/private-key.pem",
   "public_key": "/etc/krakend/public-key.pem"
}

当我重新启动容器时,容器会崩溃。我已经检查过容器是否可以从该位置读取(毕竟它正在读取配置文件)。我使用 JSONLint.com 验证了我的 JSON 文件,它是有效的。

kubectl logs...显示此错误:“2022/02/15 16:06:51 错误:[tls:跳过以下类型的 PEM 块后,在证书输入中找不到“CERTIFICATE”PEM 块:[PUBLIC KEY]]”

为什么会崩溃?我不知道如何从这里调试它。

我应该使用私钥还是应该使用从私钥生成的自签名证书?

4

1 回答 1

0

尝试使用以下命令生成文件,生成后不要操作它们:

openssl req -newkey rsa:2048 -new -nodes -x509 -days 365 -out cert.pem -keyout key.pem -subj "/C=US/ST=California/L=Mountain View/O=Your Organization/OU=Your Unit/CN=localhost\"

在命令之后,您可以使用以下命令将文件复制到您的映像中Dockerfile

FROM devopsfaith/krakend

COPY krakend.json .
COPY key.pem .
COPY cert.pem .

并构建它,例如:

docker build -t test .

如果你只是运行镜像,你会在日志中看到权限错误:

❯ docker run test                
Parsing configuration file: /etc/krakend/krakend.json
....
2022/02/16 18:54:38  ERROR: [open ./key.pem: permission denied]
2022/02/16 18:54:38  INFO: [Router execution ended]

这是因为 krakendkrakend在运行时使用用户(不是 root),如果你只是复制/etc/krakend目录中的文件,它就无权访问它。

例如,如果您使用 root 用户运行 docker,问题就会消失:

docker run -p "443:8080" --user root test

您也可以复制 /tmp 中的文件,您根本不需要 root 用户。有更多的方法可以解决这个问题,这些只是一些例子。

于 2022-02-15T17:32:54.760 回答