透過 Kubernetes 憑證保護工作負載 - Amazon EKS

協助改進此頁面

若要為本使用者指南貢獻內容,請點選每個頁面右側面板中的在 GitHub 上編輯此頁面連結。

透過 Kubernetes 憑證保護工作負載

Kubernetes 憑證 API 可實現 X.509 憑證佈建的自動化程序。該 API 具有一個命令行介面,供 Kubernetes API 用戶端從憑證認證機構 (CA) 請求和獲取 X.509 憑證。您可以使用 CertificateSigningRequest (CSR) 資源來請求受指示的簽署者簽署憑證。您的請求在被簽署之前會先被核准或拒絕。Kubernetes 支援內建簽署者和具有明確定義行為的自訂簽署者。透過這種方式,客戶可以預測其 CSR 會發生什麼情況。如需憑證簽署的相關資訊,請參閱 Certificate Signing Requests (憑證簽署請求)。

其中一個內建簽署者是 kubernetes.io/legacy-unknown。CSR 資源的 v1beta1 API 接受此傳統未知的簽署者。然而,穩定的 CSR v1 API 不允許將 signerName 設定為 kubernetes.io/legacy-unknown

如果您想使用 Amazon EKS CA 在叢集上產生憑證,則必須使用自訂簽署者。若要使用 CSR v1 API 版本並產生新憑證,您必須遷移任何現有清單檔案和 API 用戶端。使用現有 v1beta1 API 建立的現有憑證有效且可正常運作,直到憑證過期為止。這包含下列項目:

  • 信任分佈:無。在 Kubernetes 叢集中,此簽署者沒有標準的信任或分佈。

  • 允許的主體:任何

  • 允許的 x509 延伸項目:接受 subjectAltName 和金鑰使用方式延伸項目,並放棄其他延伸項目

  • 允許的金鑰使用方式:不得包括 [「金鑰加密」、「數位簽章」、「伺服器身分驗證」] 以外的用法

    注意

    不支援用戶端憑證簽署。

  • 到期/憑證生命週期:1 年 (預設和最長)

  • 允許/不允許 CA 位元:不允許

使用 signerName 產生 CSR 的範例

以下步驟將展示如何使用 signerName: beta.eks.amazonaws.com/app-serving 為 DNS 名稱 myserver.default.svc 產生服務憑證。將此作為您自己環境的指南。

  1. 執行 openssl genrsa -out myserver.key 2048 命令以產生 RSA 私有金鑰。

    openssl genrsa -out myserver.key 2048
  2. 執行下列命令來產生憑證請求。

    openssl req -new -key myserver.key -out myserver.csr -subj "/CN=myserver.default.svc"
  3. 產生 CSR 請求的 base64 值,並將其存放於變數中以供稍後步驟中使用。

    base_64=$(cat myserver.csr | base64 -w 0 | tr -d " ")
  4. 執行下列命令以建立名為 mycsr.yaml 的檔案。在下列範例中,beta.eks.amazonaws.com/app-servingsignerName

    cat >mycsr.yaml <<EOF apiVersion: certificates.k8s.io/v1 kind: CertificateSigningRequest metadata: name: myserver spec: request: $base_64 signerName: beta.eks.amazonaws.com/app-serving usages: - digital signature - key encipherment - server auth EOF
  5. 提交 CSR。

    kubectl apply -f mycsr.yaml
  6. 核准服務憑證。

    kubectl certificate approve myserver
  7. 驗證憑證已核發。

    kubectl get csr myserver

    範例輸出如下。

    NAME AGE SIGNERNAME REQUESTOR CONDITION myserver 3m20s beta.eks.amazonaws.com/app-serving kubernetes-admin Approved,Issued
  8. 匯出已核發的憑證。

    kubectl get csr myserver -o jsonpath='{.status.certificate}'| base64 -d > myserver.crt