【K8s教程】Nginx Ingress 控制器 TLS/HTTPS 说明
参考:https://kubernetes.github.io/ingress-nginx/user-guide/tls/
TLS Secrets
每当我们引用 TLS Secrets时,我们指的是 PEM 编码的 X.509、RSA (2048) Secrets。
您可以使用以下命令生成自签名证书和私钥:
$ openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout ${KEY_FILE} -out ${CERT_FILE} -subj "/CN=${HOST}/O=${HOST}"
然后通过以下方式在集群中创建秘密:
kubectl create secret tls ${CERT_NAME} --key ${KEY_FILE} --cert ${CERT_FILE}
由此产生的秘密将是类型 kubernetes.io/tls.
主机名
确保相关Ingress规则指定匹配的主机名。
..
tls:
- hosts:
- www.example.com
secretName: example-tls
..
默认 SSL 证书
NGINX 提供了将服务器配置为带有包罗万象的选项, server_name 用于与任何配置的服务器名称都不匹配的请求。 此配置开箱即用,适用于 HTTP 流量。 对于HTTPS,自然需要证书。
为此,入口控制器提供了标志 --default-ssl-certificate. 此标志所指的Secret包含访问通用服务器时要使用的默认证书。 如果未提供此标志,NGINX 将使用自签名证书。
例如,如果您有一个 TLS Secret 在default命名空间里面的foo-tls,在 nginx-controller部署里面添加 --default-ssl-certificate=default/foo-tls。
默认证书也将用于入口 tls:没有secretName选项的部分。
通过重定向强制执行服务器端 HTTPS
默认情况下,如果为该 Ingress 启用了 TLS,控制器会使用 308 永久重定向响应将 HTTP 客户端重定向到 HTTPS 端口 443。
这可以使用全局禁用 ssl-redirect: "false"在 NGINX 配置映射中 ,或每个 Ingress 中 nginx.ingress.kubernetes.io/ssl-redirect: "false"特定资源中的注释。
在集群外使用 SSL 卸载(例如 AWS ELB)时,即使没有可用的 TLS 证书,强制重定向到 HTTPS 也可能很有用。 这可以通过使用 nginx.ingress.kubernetes.io/force-ssl-redirect: "true"特定资源中的注释。
默认 TLS 版本和Ciphers
为了提供最安全的基线配置,nginx-ingress 默认仅使用 TLS 1.2 和 1.3,以及一组 安全的 TLS Secrets。