Nginx Ingress controller 私有证书不生效
测试在使用k8s创建ingress使用了自签的证书后,访问服务发现证书还是Kubernetes Ingress Controller Fake Certificate
。
问题分析
查看ingress controller
容器组的日志,发现有如下错误信息:
Unexpected error validating SSL certificate "test_ns/tls_example" for server "example.com": x509: certificate relies on legacy Common Name field, use SANs instead
我们之前签发的私有证书使用如下命令,是没有SAN
信息的:
openssl genrsa -out tls.key
openssl req -new -x509 -key tls.key -out tls.crt -subj /C=CN/ST=ShangHai/L=ShangHai/O=Ingress/CN=example.com
解决
重亲签发带有SAN
信息的证书即可。
如果只用的 OpenSSL ≥ 1.1.1
,可以使用 -addext
参数自签 example.com
和 example.net
带有SAN
信息的证书:
openssl req -x509 -newkey rsa:4096 -sha256 -days 3650 -nodes \
-keyout example.key -out example.crt -subj '/CN=example.com' \
-addext 'subjectAltName=DNS:example.com,DNS:example.net'
如果使用 OpenSSL ≤ 1.1.0
,比如在 Debian ≤ 9 or CentOS ≤ 7
,我们可以使用 -extensions
和 -config
参数(或者使用openssl.cnf配置文件的方式)。
openssl req -x509 -newkey rsa:4096 -sha256 -days 3650 -nodes \
-keyout example.key -out example.crt -subj '/CN=example.com' \
-extensions san \
-config <(echo '[req]'; echo 'distinguished_name=req';
echo '[san]'; echo 'subjectAltName=DNS:example.com,DNS:example.net')