新消息:在TwitterMastodon獲取專案更新

執行端對端測試

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 locally
make e2e-setup-certmanager
# An example of reinstalling something else; reinstall bind
make 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 tests
make e2e
# Set up a K8s 1.23 cluster and then run tests
make K8S_VERSION=1.23 e2e
# Run tests exactly as they're run in CI; usually not needed
make e2e-ci

如果您不想執行每個測試,您可以使用 GINKGO_FOCUS 語法來關注特定的測試,如 Ginkgo 文件中所述

make GINKGO_FOCUS=".*my test description" e2e

叢集 IP 詳細資訊

如上所述,端對端測試期望某些元件以特定方式部署,甚至部署在特定的 IP 位址上。

為了說明,以下叢集元件會使用特定的 IP 部署

元件 / Make 目標使用於IPDNS A 記錄
e2e-setup-bindDNS-01 測試10.0.0.16
e2e-setup-ingressnginxHTTP-01 Ingress 測試10.0.0.15*.ingress-nginx.db.http01.example.com
e2e-setup-projectcontourHTTP-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