【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。

posted @ 2021-08-12 11:51  Varden  阅读(1290)  评论(0编辑  收藏  举报