參考: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。
