TLS/HTTPS
TLS Secrets
每当我们引用TLS机密时,我们指的是PEM编码的X.509,RSA(2048)机密。
您可以使用以下方法生成自签名证书和私钥:
然后通过以下方式在集群中创建密钥:
产生的秘密将类型为kubernetes.io/tls
.
Default SSL Certificate
NGINX提供了将服务器配置为包含所有功能的选项 服务器名称 用于与任何已配置的服务器名称都不匹配的请求。 此配置无需HTTP流量即可使用。 对于HTTPS,自然需要证书。
因此,Ingress控制器提供了标志--default-ssl-certificate
。 此标志引用的机密包含在以下情况下使用的默认证书: 访问通用服务器。 如果未提供此标志,NGINX将使用自签名证书。
例如,如果您在default
名称空间中有一个TLS秘密foo-tls
, 在nginx-controller部署中添加--default-ssl-certificate = default/foo-tls。
缺省证书还将用于不包含入口的tls:
部分 有一个secretName
选项。
SSL Passthrough
The --enable-ssl-passthrough
flag enables the SSL Passthrough feature, which is disabled by default. This is required to enable passthrough backends in Ingress objects.
!!! warning 通过拦截已配置的HTTPS端口(默认值:443)上的 所有流量并进行处理来实现此功能。 将其转移到本地TCP代理。 这完全绕开了NGINX,并引入了不可忽略的性能损失。
SSL Passthrough利用SNI并从TLS协商中读取虚拟域,这需要兼容 客户。 TLS侦听器接受连接后,该连接将由控制器本身处理并通过管道送回 在后端和客户端之间来回。
如果没有与请求的主机名匹配的主机名,该请求将被移交给已配置的NGINX 直通代理端口(默认:442),它将请求代理到默认后端。
!!! note 与HTTP后端不同,传递给Passthrough后端的流量被发送到支持服务的 clusterIP ,而不是各个端点。
HTTP Strict Transport Security
HTTP严格传输安全性(HSTS)是指定的可选安全性增强功能 通过使用特殊的响应头。 一旦支持的浏览器收到 该标头,浏览器将阻止通过它发送任何通信 HTTP到指定的域,并且将通过HTTPS发送所有通信。
默认情况下启用HSTS。
要禁用此行为,请在配置ConfigMap中使用hsts:"false"
。
Server-side HTTPS enforcement through redirect
默认情况下,控制器将HTTP客户端重定向到HTTPS端口 如果为该入口启用了TLS,则使用308永久重定向响应443。
可以使用nginx config map中的ssl-redirect:"false"
全局禁用它, 或使用nginx.ingress.kubernetes.io/ssl-redirect:"false"
的每次进入 特定资源中的注释。
!!! tip
Automated Certificate Management with Kube-Lego
!!! 小提示 Kube-Lego 已达到使用寿命,并且正在使用 cert-manager替换.
Kube-Lego 自动从Let's Encrypt以下位置请求丢失或过期的证书 通过监视ingress资源及其引用的secret。
要为入口资源启用此功能,您必须添加注释:
要设置Kube-Lego,您可以看一下这个完整示例。 完全支持Kube-Lego的第一个版本是nginx Ingress controller 0.8。
Default TLS Version and Ciphers
为了提供最安全的基准配置,
nginx-ingress默认仅使用TLS 1.2和安全的TLS密码集。
Legacy TLS
默认配置虽然安全,但不支持某些较旧的浏览器和操作系统。
例如,仅从Android 5.0起默认启用TLS 1.1+。 在撰写本文时, 2018年5月,大约占Android设备的15% 与nginx-ingress的默认配置不兼容。
要更改此默认行为,请使用ConfigMap。
允许这些旧客户端连接的示例ConfigMap片段可能类似于以下内容:
Last updated