我使用以下命令在本地生成密钥。
openssl genrsa -outtestsvc.testns.ing.lb.xyz.io.key.pem 2048
并使用以下命令生成 CSR(证书签名请求)。
openssl 请求-new-sha256-key测试vc.testns.ing.lb.xyz.io.key.pem -主题“/CN=testsvc.testns.ing.lb.xyz.io”
我使用上面的CSR文件生成了证书链文件,最终得到了下面的文件。
testsvc.testns.ing.lb.xyz.io.chain.pem
我正在尝试将它们用于 ingress tls,下面是 ingress tls 的命令。
kubectl 创建秘密 tls custom-tls-cert --key /path/to/tls.key --cert /path/to/tls.crt
如何通过上述命令使用 chain.pem 文件和 key.pem 文件?尝试从 chain.pem 生成 crt 并在 kubectl create Secret 上出现错误。
"error: failed to load key pair tls: failed to find any PEM data in certificate input"
我想创建以下秘密。
apiVersion: v1
data:
tls.crt: base64 encoded cert
tls.key: base64 encoded key
kind: Secret
metadata:
name: testsecret
namespace: default
type: Opaque
如何使用 chain.pem 文件生成 .crt 和 .key 文件?
首先,我们来澄清一下什么是密钥、CSR 和证书。
key
- 本地生成的秘密文件显示/发送给任何人(key.pem)csr
- key.pem生成的文件(request.pem),需要发送给CA(证书颁发机构)。 (您可以拥有自己的 CA,但通常由其他人管理)。cert
- CA 根据 request.pem 及其自己的 CA 私钥创建的文件 (cert.pem)
现在您可以使用这两个文件 -
key.pem
和 cert.pem
- 在您的服务和客户端之间创建安全连接。
我想您只创建了一个密钥和一个请求。因此,您需要更进一步,从 CA 获取证书。
出于测试目的,您可以使用一个命令创建新密钥和自签名证书:
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 第365章 “/C=US/ST=佛罗里达/L=迈阿密/O=SomeCompany/OU=ITdepartment/CN=www.mydomain.com”
(根据您的需要调整)
密钥和证书有不同类型,并且很容易找到将一种格式转换为另一种格式的方法。
创建 Secret 时使用 PEM 格式的证书和密钥应该可以正常工作。
只需将密钥和证书插入到该命令中,如下所示:
kubectl create secret tls testsecret --key key.pem --cert cert.pem
此命令创建一个 Secret 对象并使用 base64 对
key.pem
和 cert.pem
内容进行编码。
您可以使用以下命令检查创建的对象的内容:
kubectl get secret testsecret -o yaml
echo "tls.crt: content" | base64 --decode
例如:
echo "LS0t...tLS0tLQo=" | base64 --decode
在此处阅读有关使用和生成证书的更多信息:
https://www.sslshopper.com/article-most-common-openssl-commands.html
https://docs.bitnami.com/kubernetes/how-to/secure-kubernetes-services-with-ingress-tls-letsencrypt/