【发布时间】:2017-08-21 11:32:53
【问题描述】:
文档没有说明如何添加中间 SSL 证书:https://kubernetes.io/docs/concepts/services-networking/ingress/#tls
我想下一步是阅读 Kubernetes 源代码。
【问题讨论】:
标签: kubernetes
文档没有说明如何添加中间 SSL 证书:https://kubernetes.io/docs/concepts/services-networking/ingress/#tls
我想下一步是阅读 Kubernetes 源代码。
【问题讨论】:
标签: kubernetes
如果您在 Kubernetes TLS 入口配置中的 tls.cert 键中添加多个证书。请这样做
-----BEGIN CERTIFICATE-----
<put your certificate value in a single line >
-----END CERTIFICATE-----
-----BEGIN INTERMEDIATE CERTIFICATE-----
<put your certificate value in a single line>
-----END INTERMEDIATE CERTIFICATE-----
否则,您将在 ssl 证书链验证中遇到错误。
始终将主证书放在首位。
【讨论】:
-----BEGIN INTERMEDIATE CERTIFICATE----- 我现在已经用谷歌搜索了一段时间,并且可以找到除您之外的任何其他示例。最重要的是,它对我不起作用。当我在底部使用-----BEGIN CERTIFICATE----- 作为中间人时,它确实有效。
它必须附加到证书值。就像nginx一样。
【讨论】:
.crt 文件的内容放在顶部,然后我粘贴了我的 .ca-bundle 文件的内容。
cat example_com.crt example_com.ca-bundle > full_example_com.crt 之类的操作,然后将full_example_com.crt 文件传递给kubectl --cert 参数;)
使用此命令创建证书
kubectl create secret generic tlscert_with_ca --from-file=tls.crt=your_cert.crt --from-file=tls.key=your_key.key --from-file=ca.crt=your_ca.crt
顺便说一句,your_ca.crt 也可以是中间证书
对我有用,nginx-inginx-controller 中的证书应该是这样的
-----BEGIN CERTIFICATE-----
your_cert
-----END CERTIFICATE-----
-----BEGIN RSA PRIVATE KEY-----
your_key
-----END RSA PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
your_intermediate
-----END CERTIFICATE-----
【讨论】:
中间 SSL 证书 (ca.intermediate.crt) 作为第二个证书包含在 k8s tls.crt 字段中。
tls.crt 包含三个由\n 分隔的文件:server.crt、ca.intermediate.crt 和ca.crt。
这是一个设置证书的 Ansible 任务:
- hosts: localhost
connection: local
vars:
wildcard_foo_com_ssl_tls_crt:
- "{{ lookup('file', './ssl_certs/star_foo_com/server.crt') }}"
- "{{ lookup('file', './ssl_certs/star_foo_com/ca.intermediate.crt') }}"
- "{{ lookup('file', './ssl_certs/star_foo_com/ca.crt') }}"
wildcard_foo_com_ssl_tls_key: "{{ lookup('file', './ssl_certs/star_foo_com/server.key') }}"
- name: Set up foo.com Certs
k8s:
state: present
definition:
apiVersion: v1
kind: Secret
metadata:
name: name-com-wildcard-foo-com
namespace: prod
type: kubernetes.io/tls
data:
tls.crt: "{{ wildcard_foo_com_ssl_tls_crt | join('\n') | b64encode }}"
tls.key: "{{ wildcard_foo_com_ssl_tls_key | b64encode }}"
# ca.crt: this key seems to be ignored
【讨论】:
Saran 提出的解决方案对我有用,但我必须在第二部分中删除“中间”
-----BEGIN CERTIFICATE-----
<put your certificate value in a single line >
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
<put your **intermediate** certificate value in a single line>
-----END CERTIFICATE-----
遵循 Saran 的指示 => 始终将主证书放在首位。
【讨论】:
假设: 你有三个文件:
openssl x509 -inform DER -in root_cert.cer -out root_cert.pem -outform PEM
openssl x509 -inform DER -in interm_cert.cer -out interm_cert.pem -outform PEM
如果命令 1 和 2 不起作用,证书文件可能已经是 pem 格式。在这种情况下,您可以跳过第 1 步和第 2 步。
cat root_cert.pem interm_cert.pem > full.pem
kubectl create secret tls tls-ssl-ingress -n ingress --cert=/path/to/full.pem --key=/path/to/privkey.pem
秘密(在步骤中称为 tls-ssl-ingress)名称应与 ingress 部署文件中指定的名称匹配。
【讨论】:
在您的 crt 文件中按以下顺序添加证书:
-----BEGIN CERTIFICATE-----
{Certificate issued to you}
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
{Intermediate certificate}
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
{Root certificate}
-----END CERTIFICATE-----
要立即应用更改,请重新启动 nginx 控制器(假设您正在使用此入口控制器):
kubectl rollout restart deployment ingress-nginx-controller -n ingress-nginx
【讨论】: