配置Ingress的SSL/TLS證書全過程
在 Kubernetes 中為 Ingress 配置 SSL/TLS 證書,需要完成「準(zhǔn)備證書 Secret」和「配置 Ingress 資源」兩個核心步驟,以下是詳細(xì)操作指南:
一、前提條件
已部署 Ingress Controller(如 NGINX、Traefik 等),確保其正常運(yùn)行。
擁有有效的 SSL/TLS 證書文件:
- 公鑰證書(通常命名為
tls.crt) - 私鑰文件(通常命名為
tls.key)證書可通過 Let's Encrypt 免費(fèi)獲取,或使用自簽名證書(僅用于測試)。
二、步驟 1:創(chuàng)建存儲證書的 Secret
Kubernetes 中需將證書存儲為 kubernetes.io/tls 類型的 Secret,供 Ingress 引用。
1. 準(zhǔn)備證書文件
假設(shè)證書文件路徑為:
- 公鑰:
./tls.crt - 私鑰:
./tls.key
2. 創(chuàng)建 Secret
執(zhí)行以下命令,在目標(biāo)命名空間(與 Ingress 相同)創(chuàng)建 Secret:
kubectl create secret tls my-tls-secret \ --cert=./tls.crt \ --key=./tls.key \ --namespace=default # 替換為實(shí)際命名空間
my-tls-secret:自定義 Secret 名稱(后續(xù) Ingress 需引用此名稱)--namespace:需與 Ingress 資源所在命名空間一致
3. 驗(yàn)證 Secret
kubectl get secret my-tls-secret -n default -o yaml
輸出中應(yīng)包含 tls.crt 和 tls.key 的 Base64 編碼內(nèi)容,類型為 kubernetes.io/tls。
三、步驟 2:配置 Ingress 資源引用證書
在 Ingress YAML 中通過 tls 字段關(guān)聯(lián)上一步創(chuàng)建的 Secret,并指定證書對應(yīng)的域名。
示例 Ingress 配置(啟用 HTTPS)
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: https-ingress
namespace: default
annotations:
# 可選:強(qiáng)制 HTTP 重定向到 HTTPS(以 NGINX 為例)
nginx.ingress.kubernetes.io/ssl-redirect: "true"
spec:
ingressClassName: nginx # 匹配部署的 Ingress Controller 類型
tls:
- hosts:
- example.com # 證書綁定的域名(必須與證書中 CN 或 SAN 一致)
- api.example.com # 支持多個域名(需證書包含這些域名)
secretName: my-tls-secret # 引用之前創(chuàng)建的證書 Secret
rules:
- host: example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: web-service
port:
number: 80
- host: api.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: api-service
port:
number: 8080關(guān)鍵配置說明
tls.hosts:指定證書生效的域名,必須與證書中配置的域名(Common Name 或 Subject Alternative Name)完全一致。tls.secretName:關(guān)聯(lián)存儲證書的 Secret 名稱(與步驟 1 中創(chuàng)建的名稱一致)。annotations中的ssl-redirect: "true":自動將 HTTP 請求(80 端口)重定向到 HTTPS(443 端口),需 Ingress Controller 支持(如 NGINX)。
四、測試 HTTPS 訪問
- 部署 Ingress 資源:
kubectl apply -f ingress-https.yaml
- 驗(yàn)證 Ingress 狀態(tài):
kubectl get ingress https-ingress -n default
輸出中 ADDRESS 字段為 Ingress Controller 的入口 IP(或域名)。
- 測試訪問:
curl https://example.com --resolve example.com:443:<INGRESS-IP>
若配置正確,會返回后端服務(wù)響應(yīng),且瀏覽器訪問時顯示「安全鎖」圖標(biāo)。
五、擴(kuò)展場景
1. 自簽名證書(僅用于測試)
若沒有正式證書,可生成自簽名證書:
# 生成私鑰和證書(有效期 365 天) openssl req -x509 -nodes -days 365 -newkey rsa:2048 \ -keyout ./tls.key \ -out ./tls.crt \ -subj "/CN=example.com/O=example" # CN 為域名 # 后續(xù)步驟同正式證書(創(chuàng)建 Secret 并配置 Ingress)
注意:自簽名證書會被瀏覽器標(biāo)記為「不安全」,僅用于測試環(huán)境。
2. 多證書配置
若需為不同域名配置不同證書,可在 tls 字段中添加多個條目:
tls: - hosts: - example.com secretName: example-tls-secret # 對應(yīng) example.com 的證書 - hosts: - test.com secretName: test-tls-secret # 對應(yīng) test.com 的證書
3. 自動證書管理(生產(chǎn)推薦)
通過 Cert-Manager 工具可自動申請、續(xù)期 Let's Encrypt 證書,無需手動管理:
部署 Cert-Manager:
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.13.0/cert-manager.yaml
創(chuàng)建 Issuer 或 ClusterIssuer 資源定義證書來源。
在 Ingress 中添加注解 cert-manager.io/cluster-issuer: "letsencrypt-prod" 自動關(guān)聯(lián)證書。
六、常見問題排查
證書不生效:
- 檢查
tls.hosts與證書域名是否完全一致。 - 確認(rèn) Secret 與 Ingress 在同一命名空間。
- 查看 Ingress Controller 日志:
kubectl logs -n ingress-nginx <nginx-controller-pod>。
HTTP 無法重定向到 HTTPS:
確認(rèn) Ingress Controller 支持 ssl-redirect 注解(不同控制器注解可能不同,如 Traefik 使用 traefik.ingress.kubernetes.io/redirect-entry-point: https)。
通過以上步驟,即可為 Ingress 配置 SSL/TLS 證書,實(shí)現(xiàn) HTTPS 加密訪問。
總結(jié)
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Kubernetes中創(chuàng)建命名空間實(shí)現(xiàn)方法
這篇文章主要為大家介紹了Kubernetes中創(chuàng)建命名空間實(shí)現(xiàn)方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11
訪問k8s集群部署的微服務(wù)內(nèi)部服務(wù)接口問題
文章介紹了在Kubernetes集群中訪問微服務(wù)內(nèi)部服務(wù)接口的幾種方法,包括通過Pod的localhost訪問、使用服務(wù)名和DNS解析、以及通過注冊中心的地址訪問2026-02-02
kubernetes調(diào)度之NodeSelector使用解讀
本文介紹Kubernetes中兩種簡單調(diào)度策略:NodeName通過指定節(jié)點(diǎn)名稱強(qiáng)制調(diào)度,跳過調(diào)度器;NodeSelector基于節(jié)點(diǎn)標(biāo)簽匹配,需為節(jié)點(diǎn)打標(biāo)簽并在Pod定義中配置,兩者均為強(qiáng)制約束機(jī)制2025-08-08
k8s擴(kuò)展調(diào)度能力的三種實(shí)現(xiàn)方式
Kubernetes調(diào)度器擴(kuò)展主要通過調(diào)度框架和調(diào)度器擴(kuò)展器實(shí)現(xiàn),調(diào)度框架提供多種插件接口,如QueueSort、Filter、Score等,允許擴(kuò)展調(diào)度邏輯,調(diào)度器擴(kuò)展器通過HTTP服務(wù)擴(kuò)展調(diào)度功能,支持Filter、Prioritize等擴(kuò)展點(diǎn)2025-10-10

