配置Ingress的SSL/TLS證書全過程
在 Kubernetes 中為 Ingress 配置 SSL/TLS 證書,需要完成「準備證書 Secret」和「配置 Ingress 資源」兩個核心步驟,以下是詳細操作指南:
一、前提條件
已部署 Ingress Controller(如 NGINX、Traefik 等),確保其正常運行。
擁有有效的 SSL/TLS 證書文件:
- 公鑰證書(通常命名為
tls.crt) - 私鑰文件(通常命名為
tls.key)證書可通過 Let's Encrypt 免費獲取,或使用自簽名證書(僅用于測試)。
二、步驟 1:創(chuàng)建存儲證書的 Secret
Kubernetes 中需將證書存儲為 kubernetes.io/tls 類型的 Secret,供 Ingress 引用。
1. 準備證書文件
假設證書文件路徑為:
- 公鑰:
./tls.crt - 私鑰:
./tls.key
2. 創(chuàng)建 Secret
執(zhí)行以下命令,在目標命名空間(與 Ingress 相同)創(chuàng)建 Secret:
kubectl create secret tls my-tls-secret \ --cert=./tls.crt \ --key=./tls.key \ --namespace=default # 替換為實際命名空間
my-tls-secret:自定義 Secret 名稱(后續(xù) Ingress 需引用此名稱)--namespace:需與 Ingress 資源所在命名空間一致
3. 驗證 Secret
kubectl get secret my-tls-secret -n default -o yaml
輸出中應包含 tls.crt 和 tls.key 的 Base64 編碼內容,類型為 kubernetes.io/tls。
三、步驟 2:配置 Ingress 資源引用證書
在 Ingress YAML 中通過 tls 字段關聯(lián)上一步創(chuàng)建的 Secret,并指定證書對應的域名。
示例 Ingress 配置(啟用 HTTPS)
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: https-ingress
namespace: default
annotations:
# 可選:強制 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關鍵配置說明
tls.hosts:指定證書生效的域名,必須與證書中配置的域名(Common Name 或 Subject Alternative Name)完全一致。tls.secretName:關聯(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
- 驗證 Ingress 狀態(tài):
kubectl get ingress https-ingress -n default
輸出中 ADDRESS 字段為 Ingress Controller 的入口 IP(或域名)。
- 測試訪問:
curl https://example.com --resolve example.com:443:<INGRESS-IP>
若配置正確,會返回后端服務響應,且瀏覽器訪問時顯示「安全鎖」圖標。
五、擴展場景
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)
注意:自簽名證書會被瀏覽器標記為「不安全」,僅用于測試環(huán)境。
2. 多證書配置
若需為不同域名配置不同證書,可在 tls 字段中添加多個條目:
tls: - hosts: - example.com secretName: example-tls-secret # 對應 example.com 的證書 - hosts: - test.com secretName: test-tls-secret # 對應 test.com 的證書
3. 自動證書管理(生產推薦)
通過 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" 自動關聯(lián)證書。
六、常見問題排查
證書不生效:
- 檢查
tls.hosts與證書域名是否完全一致。 - 確認 Secret 與 Ingress 在同一命名空間。
- 查看 Ingress Controller 日志:
kubectl logs -n ingress-nginx <nginx-controller-pod>。
HTTP 無法重定向到 HTTPS:
確認 Ingress Controller 支持 ssl-redirect 注解(不同控制器注解可能不同,如 Traefik 使用 traefik.ingress.kubernetes.io/redirect-entry-point: https)。
通過以上步驟,即可為 Ingress 配置 SSL/TLS 證書,實現 HTTPS 加密訪問。
總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
kubernetes中pod的調度親和性affinity詳解
本文簡要介紹了Kubernetes中的三種親和性機制:節(jié)點親和性(控制Pod調度到指定節(jié)點)、Pod親和性(與特定Pod共處同一節(jié)點)和Pod反親和性(避免與特定Pod共處同一節(jié)點),并通過示例說明了其配置方式及實際調度效果2025-09-09
Kubernetes有狀態(tài)應用管理StatefulSet使用詳解
這篇文章主要為大家介紹了Kubernetes有狀態(tài)應用管理StatefulSet使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-11-11
阿里云kubernetes查找鏡像中jar包的方法(docker查看鏡像中的jar)
這篇文章主要給大家介紹了關于阿里云kubernetes查找鏡像中jar包的方法,也就是在docker查看鏡像中的jar,文中通過圖文介紹的非常詳細,需要的朋友可以參考下2022-09-09

