Kubernetes入口TLS

5

我使用以下命令在本地生成了一个密钥。

openssl genrsa -out testsvc.testns.ing.lb.xyz.io.key.pem 2048

然后使用以下命令生成证书签名请求(CSR)。

openssl req -new -sha256 -key testsvc.testns.ing.lb.xyz.io.key.pem -subj "/CN=testsvc.testns.ing.lb.xyz.io"

使用上面的CSR文件生成了证书链文件,最终得到了以下文件。

testsvc.testns.ing.lb.xyz.io.chain.pem

我正试图将它们用于 ingress tls,下面是 ingress tls 的命令。

kubectl create secret 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文件。
谢谢。

1
嗨,您可以尝试使用以下文件执行相同的命令: kubectl create secret tls NAME --cert=path/to/cert/chain.pem --key=path/to/key/key.pem - Suresh Vishnoi
1个回答

17

首先,让我们澄清一下什么是密钥、CSR和证书。

key - 本地生成的秘密文件,不向任何人显示/发送 (key.pem)
csr - 由key.pem生成的文件 (request.pem),需要发送到CA(证书颁发机构)(你可以拥有自己的CA,但通常由别人管理)。
cert - 由CA基于request.pem和其自己的CA私钥创建的文件 (cert.pem)

现在,您可以使用这两个文件 - key.pemcert.pem - 来在您的服务与客户端之间创建安全连接。

我假设您只创建了一个密钥和一个请求。所以,您需要再前进一步,从CA获取证书。

为了测试目的,您可以使用一个命令创建一个新密钥和自签名证书:

openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes -subj "/C=US/ST=Florida/L=Miami/O=SomeCompany/OU=ITdepartment/CN=www.mydomain.com"

(根据您的需求调整主题)

有不同类型的密钥和证书,很容易找到将一个格式转换为另一个格式的方法。

在创建密钥时,使用PEM格式的证书和密钥应该可以正常工作。

只需将密钥和证书插入以下命令中:

kubectl create secret tls testsecret --key key.pem --cert cert.pem  

该命令创建一个Secret对象,并使用base64对key.pemcert.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

如何使用openssl创建自签名证书?

https://docs.bitnami.com/kubernetes/how-to/secure-kubernetes-services-with-ingress-tls-letsencrypt/

https://kubernetes.io/docs/concepts/configuration/secret/


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接