新訊:在TwitterMastodon取得專案更新

Cloudflare

若要使用 Cloudflare,您可以使用兩種權杖類型之一。API 權杖允許將應用程式範圍的金鑰繫結到特定區域和權限,而 API 金鑰則是全域範圍的金鑰,擁有與您的帳戶相同的權限。

為了更高的安全性,建議使用API 權杖,因為它們具有更嚴格的權限,而且更容易撤銷。

API 權杖

可以在使用者設定檔 > API 權杖 > API 權杖中建立權杖。建議使用以下設定

  • 權限
    • 網域 - DNS - 編輯
    • 網域 - 網域 - 讀取
  • 網域資源
    • 包含 - 所有網域

要建立新的 Issuer,首先建立一個包含您的新 API 權杖的 Kubernetes 密鑰

apiVersion: v1
kind: Secret
metadata:
name: cloudflare-api-token-secret
type: Opaque
stringData:
api-token: <API Token>

然後在您的 Issuer 清單中

apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
name: example-issuer
spec:
acme:
...
solvers:
- dns01:
cloudflare:
apiTokenSecretRef:
name: cloudflare-api-token-secret
key: api-token

API 金鑰

API 金鑰可以在使用者設定檔 > API 權杖 > API 金鑰 > 全域 API 金鑰 > 檢視中取得。

要建立新的 Issuer,首先建立一個包含您的 API 金鑰的 Kubernetes 密鑰

apiVersion: v1
kind: Secret
metadata:
name: cloudflare-api-key-secret
type: Opaque
stringData:
api-key: <API Key>

然後在您的 Issuer 清單中

apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
name: example-issuer
spec:
acme:
...
solvers:
- dns01:
cloudflare:
email: my-cloudflare-acc@example.com
apiKeySecretRef:
name: cloudflare-api-key-secret
key: api-key

疑難排解

角色 com.cloudflare.api.token.xxxx 需要 com.cloudflare.api.account.zone.list 權限才能列出網域

如果您收到錯誤訊息指出您的權杖沒有列出網域的正確權限,則可能有兩種原因。

  1. 權杖缺少 網域 - 網域 - 讀取 權限
  2. cert-manager 因為 DNS 問題而識別了網域的錯誤網域名稱。

在第二個問題的情況下,您會看到如下的錯誤

Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Started 6s cert-manager Challenge scheduled for processing
Warning PresentError 3s (x2 over 3s) cert-manager Error presenting challenge: Cloudflare API Error for GET "/zones?name=<TLD>"
Error: 0: Actor 'com.cloudflare.api.token.xxxx' requires permission 'com.cloudflare.api.account.zone.list' to list zones

在這種情況下,我們建議變更您的 DNS01 自我檢查名稱伺服器

Cloudflare API error for POST "/zones/<id>/dns_records 通用錯誤

您可能會遇到此問題,因為 Cloudflare 會阻止使用 API 來更新以下 TLD 的 DNS 記錄:.cf.ga.gq.ml.tk。這在Cloudflare 社群中討論過。我們建議在使用這些 TLD 時使用替代的 DNS 提供者。