使用 cert-manager 建立憑證

之前筆記 在 Kubernetes 上安裝 cert-manager 提到為什麼要使用 cert-manager 以及如何安裝 cert-manager,今天就來紀錄一下如何使用 cert-manager 來建立憑證

基本環境說明

  1. macOS Catalina 10.15.7
  2. docker desktop 3.1.0(51484)

    • docker engine 20.10.2
    • Kubernetes v1.19.3
  3. Helm chart

    • cert-manager v1.1.0

憑證建立方式

  1. 建立自簽憑證的 Issuer

    kubectl apply -f <(echo "
    apiVersion: cert-manager.io/v1
    kind: Issuer
    metadata:
      name: selfsigned-issuer
    spec:
      selfSigned: {}
    ")
    

    1issuer

  2. 使用自簽憑證 Issuer 來建立憑證

    要注意 Issue 的 Ready 變成 true 再執行建立憑證,否則憑證 Type 會變成 Opaque 而不是 kubernetes.io/tls

    ```bash
    kubectl apply -f <(echo '
    apiVersion: cert-manager.io/v1
    kind: Certificate
    metadata:
    name: yowko-tls
    spec:
    secretName: yowko-tls
    dnsNames:
    - "*.default.svc.cluster.local"
    - "*.testyowko.com"
    issuerRef:
        name: selfsigned-issuer
    ')
    ```
    

    2secret

  3. 檢查憑證有效性

    • 檢視憑證

      確認 .crt.key 都正確產生

      kubectl get secret yowko-tls -o yaml
      

      3describe

    • 確認 .crt 有效性

      kubectl get secrets/yowko-tls -o "jsonpath={.data['tls\.crt']}" | base64 -D | openssl x509 -text -noout
      

      4checkcrt

    • 確認 .key 有效性

      kubectl get secrets/yowko-tls -o "jsonpath={.data['tls\.key']}" | base64 -D | openssl rsa -check
      

      5checkkey

心得

不知道是不是因為 Self Signed 不是正統用法,官網上並沒有完整的使用方式,或者是因為太簡單,所以人家覺得不用寫XD

但除此之外,就我個人使用情境而言覺得官網的文件不是很好用,功能好像都有,文件就提那一、兩句,實際用法都要自己兜,覺得不是很方便,但或許這就是 open source 的常態吧

參考資訊

  1. SelfSigned
  2. Creating Self Signed Certificates on Kubernetes
  3. 在 Kubernetes 上安裝 cert-manager
  4. The Most Common OpenSSL Commands
  5. How To Check SSL Certificate Expiration with OpenSSL
  6. JSONpath fails to return keys containing dots in a map