執行端對端測試
cert-manager 有一個廣泛的端對端 (e2e) 測試套件,可針對實際的 Kubernetes 叢集驗證功能。
完整的端對端測試套件可能需要很長時間才能完成,並且會針對對 cert-manager 專案所做的每個提取請求執行。
除非您對 cert-manager 程式碼庫或端對端測試本身進行了重大變更,否則您可能不需要在本地執行測試。但是,如果您確實想要執行測試,本文檔將說明如何執行。
master 分支上每個提交的狀態都會在 testgrid.k8s.io
上回報。加入 cert-manager-dev-alerts
Google 群組,以便在測試失敗時收到電子郵件通知。
需求
端對端測試沒有特殊要求。所有相依性都可以透過 make 建置系統自動配置。
設定端對端測試
建立叢集
您可以使用 Make 建立一個 kind 叢集
# Create a cluster using whatever K8s version is default, named "kind"make e2e-setup-kind# Create a cluster using K8s 1.23 named "keith"make K8S_VERSION=1.23 KIND_CLUSTER_NAME=keith e2e-setup-kind
重要: kind 叢集將使用特定的服務 CIDR 範圍進行設定,以啟用端對端測試中的某些功能。此 CIDR 範圍目前無法設定。
完成後,叢集可以透過 kubectl
存取,如您預期的那樣。
安裝測試相依性
端對端測試需要各種相依性,所有這些相依性也可以透過 Make 安裝。
make e2e-setup
如果您只需要更新或重新安裝測試叢集中的其中一個相依性,您可以改為明確安裝指定的元件,以節省一些時間。
最常見的使用案例是重新安裝 cert-manager 本身,例如,如果您在本地進行了變更,並且想要在叢集中測試該變更。
# Most important: reinstall cert-manager, including rebuilding changed containers locallymake e2e-setup-certmanager# An example of reinstalling something else; reinstall bindmake e2e-setup-bind# More generally, see make/e2e-setup.mk for different targets!
執行端對端測試
與設定一樣,執行測試可以透過 make 進行。事實上,您可以直接執行 make e2e
,而無需手動設定任何內容!
# Set up a cluster using the defaults if one's not already present, and then run the end-to-end testsmake e2e# Set up a K8s 1.23 cluster and then run testsmake K8S_VERSION=1.23 e2e# Run tests exactly as they're run in CI; usually not neededmake e2e-ci
如果您不想執行每個測試,您可以使用 GINKGO_FOCUS
語法來關注特定的測試,如 Ginkgo 文件中所述
make GINKGO_FOCUS=".*my test description" e2e
叢集 IP 詳細資訊
如上所述,端對端測試期望某些元件以特定方式部署,甚至部署在特定的 IP 位址上。
為了說明,以下叢集元件會使用特定的 IP 部署
元件 / Make 目標 | 使用於 | IP | DNS A 記錄 |
---|---|---|---|
e2e-setup-bind | DNS-01 測試 | 10.0.0.16 | |
e2e-setup-ingressnginx | HTTP-01 Ingress 測試 | 10.0.0.15 | *.ingress-nginx.db.http01.example.com |
e2e-setup-projectcontour | HTTP-01 GatewayAPI 測試 | 10.0.0.14 | *.gateway.db.http01.example.com |
如果您未正確設定這些元件,您可能會發現 ACME HTTP01(和其他)端對端測試失敗。
端對端測試結構
端對端測試由 2 個主要部分組成:發行者特定測試和一致性測試套件。
這兩個部分都使用 Ginkgo 在底層執行其測試。
一致性測試套件
RBAC
此套件測試授予 cert-manager 在叢集上的所有 RBAC 權限,以檢查其是否能夠正確運作。
憑證
此套件針對所有發行者測試憑證功能。
功能集
有些發行者不支援某些功能,例如簽發 Ed25519 憑證或將電子郵件地址新增至 X.509 SAN 副檔名。
每個測試都會使用 s.checkFeatures(feature)
來指定使用的功能,然後會根據發行者的 UnsupportedFeatures
清單進行檢查。對於不支援該功能的發行者,會跳過使用該功能的測試。
雲端供應商測試
cert-manager 的 master 分支也可以針對不同的雲端供應商進行測試。目前,存在針對 EKS 的測試,這些測試會每兩天以定期作業的方式執行一次。
擴充雲端供應商測試
用於在雲端供應商上執行端對端測試的基礎架構位於 cert-manager/test-infra 儲存庫中。可以使用 Terraform 為它們建立基礎架構,來新增更多的雲端供應商。
除此之外,可以透過編輯它們在 Jetstack testing 儲存庫中各自的 prow 作業,來自訂現有基礎架構的測試。像 cert-manager 版本或雲端供應商版本之類的值會以 Terraform 中的變數形式存在,因此當在 prow 作業中使用 terraform apply
時,可以變更其值,例如,對於 EKS prow 作業,可以使用
terraform apply -var="cert_manager_version=v1.3.3" -auto-approve
若要查看特定基礎架構的所有可設定變數清單,您可以查看該雲端供應商的 基礎架構 的 variables.tf
檔案。
請注意,雲端供應商測試會在預定義的 cert-manager 版本(可以在 prow 作業中變更)上執行 cert-manager 的 master 分支中的端對端測試。目前,它們不測試 PR 中的程式碼,但我們有一個追蹤該要求的 issue。