cert-manager 1.0 ์ถœ์‹œ

๊ฒฝํ—˜ ๋งŽ๊ณ  ํ˜„๋ช…ํ•œ ์—”์ง€๋‹ˆ์–ด์—๊ฒŒ cert-manager์— ๋Œ€ํ•œ ์ƒ๊ฐ๊ณผ ๋ชจ๋‘๊ฐ€ ๊ทธ๊ฒƒ์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋ฅผ ๋ฌป๋Š”๋‹ค๋ฉด ์ „๋ฌธ๊ฐ€๋Š” ํ•œ์ˆจ์„ ์‰ฌ๊ณ  ๊ทธ๋ฅผ ์•ˆ์•„์ฃผ๊ณ  ํ”ผ๊ณคํ•˜๊ฒŒ ๋งํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ ์ƒ์ฅ๋Š” ์šธ๊ณ  ์ฐŒ๋ฅด์ง€ ๋งŒ์ด ์„ ์ธ์žฅ๊ณผ ํ•จ๊ป˜ ๊ณ„์† ์‚ด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์™œ ์‚ฌ๋ž‘ํ•ฉ๋‹ˆ๊นŒ? ์ž‘๋™ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์™œ ์‚ฌ๋ž‘ํ•˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ? ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋Š” ์ƒˆ ๋ฒ„์ „์ด ๊ณ„์†ํ•ด์„œ ๋‚˜์˜ค๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๊ณ„์†ํ•ด์„œ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด์ „ ๋ฒ„์ „์€ ์ž‘๋™์„ ๋ฉˆ์ถฅ๋‹ˆ๋‹ค. ์Œ๋ชจ์™€ ์œ„๋Œ€ํ•œ ์‹ ๋น„ํ•œ ์ƒค๋จธ๋‹ˆ์ฆ˜์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ๊ฐœ๋ฐœ์ž๋“ค์€ ์ด๋ ‡๊ฒŒ ์ฃผ์žฅํ•ฉ๋‹ˆ๋‹ค. ์ธ์ฆ์„œ ๊ด€๋ฆฌ์ž 1.0 ๋ชจ๋“  ๊ฒƒ์ด ๋ฐ”๋€” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ฏฟ์–ด?

cert-manager 1.0 ์ถœ์‹œ

Cert-manager๋Š” ๊ธฐ๋ณธ Kubernetes ์ธ์ฆ์„œ ๊ด€๋ฆฌ ์ปจํŠธ๋กค๋Ÿฌ์ž…๋‹ˆ๋‹ค. Let's Encrypt, HashiCorp Vault, Venafi, ์„œ๋ช… ๋ฐ ์ž์ฒด ์„œ๋ช… ํ‚ค ์Œ๊ณผ ๊ฐ™์€ ๋‹ค์–‘ํ•œ ์†Œ์Šค์—์„œ ์ธ์ฆ์„œ๋ฅผ ๋ฐœ๊ธ‰ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๋งŒ๋ฃŒ ๋‚ ์งœ๊นŒ์ง€ ํ‚ค๋ฅผ ์ตœ์‹  ์ƒํƒœ๋กœ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋งŒ๋ฃŒ๋˜๊ธฐ ์ „์— ์ง€์ •๋œ ์‹œ๊ฐ„์— ์ธ์ฆ์„œ๋ฅผ ์ž๋™์œผ๋กœ ๊ฐฑ์‹ ํ•˜๋ ค๊ณ  ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค. Cert-manager๋Š” kube-lego๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋ฉฐ kube-cert-manager์™€ ๊ฐ™์€ ๋‹ค๋ฅธ ์œ ์‚ฌํ•œ ํ”„๋กœ์ ํŠธ์˜ ์ผ๋ถ€ ํŠธ๋ฆญ๋„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ฆด๋ฆฌ์ฆˆ ๋…ธํŠธ

๋ฒ„์ „ 1.0์œผ๋กœ ์šฐ๋ฆฌ๋Š” cert-manager ํ”„๋กœ์ ํŠธ์˜ 16๋…„ ๊ฐœ๋ฐœ์— ๋Œ€ํ•œ ์‹ ๋ขฐ๋ฅผ ํ‘œ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ธฐ๊ฐ„ ๋™์•ˆ ๊ธฐ๋Šฅ๊ณผ ์•ˆ์ •์„ฑ ๋ฉด์—์„œ ํฌ๊ฒŒ ๋ฐœ์ „ํ–ˆ์ง€๋งŒ ๋ฌด์—‡๋ณด๋‹ค ์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ ๋ฐœ์ „ํ–ˆ์Šต๋‹ˆ๋‹ค. ์˜ค๋Š˜๋‚  ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Kubernetes ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋ณดํ˜ธํ•˜๊ณ  ์ƒํƒœ๊ณ„์˜ ๋‹ค์–‘ํ•œ ๋ถ€๋ถ„์— ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ง€๋‚œ 1500๊ฐœ ๋ฆด๋ฆฌ์Šค์—์„œ ๋งŽ์€ ๋ฒ„๊ทธ๊ฐ€ ์ˆ˜์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊นจ์ ธ์•ผ ํ•  ๊ฒƒ์ด ๊นจ์กŒ์Šต๋‹ˆ๋‹ค. API ์ž‘์—…์„ ์œ„ํ•ด ์—ฌ๋Ÿฌ ๋ฒˆ ๋ฐฉ๋ฌธํ•˜์—ฌ ์‚ฌ์šฉ์ž์™€์˜ ์ƒํ˜ธ ์ž‘์šฉ์ด ๊ฐœ์„ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” 253๋ช…์˜ ์ปค๋ฎค๋‹ˆํ‹ฐ ํšŒ์›์œผ๋กœ๋ถ€ํ„ฐ ๋” ๋งŽ์€ ํ’€ ์š”์ฒญ์„ ๋ฐ›์•„ GitHub์—์„œ XNUMX๊ฐœ์˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.

1.0 ๋ฆด๋ฆฌ์Šค์™€ ํ•จ๊ป˜ ์šฐ๋ฆฌ๋Š” cert-manager๊ฐ€ ์„ฑ์ˆ™ํ•œ ํ”„๋กœ์ ํŠธ์ž„์„ ๊ณต์‹์ ์œผ๋กœ ์„ ์–ธํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ API ํ˜ธํ™˜์„ฑ์„ ์œ ์ง€ํ•  ๊ฒƒ์„ ์•ฝ์†ํ•ฉ๋‹ˆ๋‹ค. v1.

1.0๋…„ ๋™์•ˆ cert-manager๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐ ๋„์›€์„ ์ฃผ์‹  ๋ชจ๋“  ๋ถ„๋“ค๊ป˜ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค! ๋ฒ„์ „ XNUMX์ด ์•ž์œผ๋กœ ๋‹ค๊ฐ€์˜ฌ ๋งŽ์€ ํฐ ์ผ๋“ค ์ค‘ ์ฒซ ๋ฒˆ์งธ๊ฐ€ ๋˜๋„๋ก ํ•˜์‹ญ์‹œ์˜ค.

๋ฆด๋ฆฌ์Šค 1.0์€ ๋ช‡ ๊ฐ€์ง€ ์šฐ์„  ์ˆœ์œ„ ์˜์—ญ์ด ์žˆ๋Š” ์•ˆ์ •์ ์ธ ๋ฆด๋ฆฌ์Šค์ž…๋‹ˆ๋‹ค.

  • v1 ๋ถˆ;

  • ํŒ€ kubectl cert-manager status, ๋ฌธ์ œ ๋ถ„์„์„ ๋•๊ธฐ ์œ„ํ•ด;

  • ์•ˆ์ •์ ์ธ ์ตœ์‹  Kubernetes API ์‚ฌ์šฉ

  • ํ–ฅ์ƒ๋œ ๋กœ๊น…;

  • ์• ํฌ๋ฏธ ๊ฐœ์„ .

์—…๊ทธ๋ ˆ์ด๋“œํ•˜๊ธฐ ์ „์— ์—…๊ทธ๋ ˆ์ด๋“œ ๋…ธํŠธ๋ฅผ ๋ฐ˜๋“œ์‹œ ์ฝ์œผ์‹ญ์‹œ์˜ค.

API v1

๋ฒ„์ „ v0.16์€ API์™€ ํ•จ๊ป˜ ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค. v1beta1. ์ด๋กœ ์ธํ•ด ์ผ๋ถ€ ๊ตฌ์กฐ์  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์ถ”๊ฐ€๋˜์—ˆ์œผ๋ฉฐ API ํ•„๋“œ ๋ฌธ์„œ๋„ ๊ฐœ์„ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ฒ„์ „ 1.0์€ API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค. v1. ์ด API๋Š” ์šฐ๋ฆฌ์˜ ์ฒซ ๋ฒˆ์งธ ์•ˆ์ •์ ์ธ API์ด๋ฉฐ ๋™์‹œ์— ์ด๋ฏธ ํ˜ธํ™˜์„ฑ์„ ๋ณด์žฅํ–ˆ์ง€๋งŒ API๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. v1 ์šฐ๋ฆฌ๋Š” ์•ž์œผ๋กœ ๋ช‡ ๋…„ ๋™์•ˆ ํ˜ธํ™˜์„ฑ์„ ์œ ์ง€ํ•  ๊ฒƒ์„ ์•ฝ์†ํ•ฉ๋‹ˆ๋‹ค.

๋ณ€๊ฒฝ ์‚ฌํ•ญ(์ฐธ๊ณ : ๋ณ€ํ™˜ ๋„๊ตฌ๊ฐ€ ๋ชจ๋“  ๊ฒƒ์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค):

์ž๊ฒฉ์ฆ:

  • emailSANs ์ง€๊ธˆ ํ˜ธ์ถœ emailAddresses

  • uriSANs - uris

์ด๋Ÿฌํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ๋‹ค๋ฅธ SAN๊ณผ์˜ ํ˜ธํ™˜์„ฑ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค(์ œ๋ชฉ ๋Œ€์ฒด ์ด๋ฆ„, ์•ฝ. ์—ญ์ž), Go API์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. API์—์„œ ์ด ์šฉ์–ด๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์—…๋ฐ์ดํŠธ

Kubernetes 1.16 ์ด์ƒ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์›นํ›„ํฌ๋ฅผ ๋ณ€ํ™˜ํ•˜๋ฉด API ๋ฒ„์ „๊ณผ ๋™์‹œ์— ์›ํ™œํ•˜๊ฒŒ ์ž‘์—…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. v1alpha2, v1alpha3, v1beta1 ะธ v1. ์ด๋ฅผ ํ†ตํ•ด ์ด์ „ ๋ฆฌ์†Œ์Šค๋ฅผ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ์žฌ๋ฐฐํฌํ•˜์ง€ ์•Š๊ณ ๋„ ์ƒˆ ๋ฒ„์ „์˜ API๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งค๋‹ˆํŽ˜์ŠคํŠธ๋ฅผ API๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. v1, ์ด์ „ ๋ฒ„์ „์€ ๊ณง ์ง€์› ์ค‘๋‹จ๋  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž legacy cert-manager ๋ฒ„์ „์€ ์—ฌ์ „ํžˆ โ€‹โ€‹์•ก์„ธ์Šค ๊ถŒํ•œ๋งŒ ๊ฐ–์Šต๋‹ˆ๋‹ค. v1, ์—…๊ทธ๋ ˆ์ด๋“œ ๋‹จ๊ณ„๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—.

kubectl cert-manager ์ƒํƒœ ๋ช…๋ น

ํ™•์žฅ ๊ธฐ๋Šฅ์ด ์ƒˆ๋กญ๊ฒŒ ๊ฐœ์„ ๋˜์–ด kubectl ์ธ์ฆ์„œ ๋ฏธ๋ฐœ๊ธ‰๊ณผ ๊ด€๋ จ๋œ ๋ฌธ์ œ๋ฅผ ์กฐ์‚ฌํ•˜๊ธฐ๊ฐ€ ๋” ์‰ฌ์›Œ์กŒ์Šต๋‹ˆ๋‹ค. kubectl cert-manager status ์ด์ œ ์ธ์ฆ์„œ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์ธ์ฆ์„œ ๋ฐœ๊ธ‰ ๋‹จ๊ณ„๋„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ์„ ์„ค์น˜ํ•œ ํ›„ ๋‹ค์Œ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. kubectl cert-manager status certificate <ะธะผั-ัะตั€ั‚ะธั„ะธะบะฐั‚ะฐ>, ACME์˜ ์ธ์ฆ์„œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์ฃผ์–ด์ง„ ์ด๋ฆ„๊ณผ CertificateRequest, Secret, Issuer ๋ฐ Order and Challenges์™€ ๊ฐ™์€ ๊ด€๋ จ ๋ฆฌ์†Œ์Šค๋กœ ์ธ์ฆ์„œ๋ฅผ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.

์•„์ง ์ค€๋น„๋˜์ง€ ์•Š์€ ์ธ์ฆ์„œ ๋””๋ฒ„๊น…์˜ ์˜ˆ:

$ kubectl cert-manager status certificate acme-certificate

Name: acme-certificate
Namespace: default
Created at: 2020-08-21T16:44:13+02:00
Conditions:
  Ready: False, Reason: DoesNotExist, Message: Issuing certificate as Secret does not exist
  Issuing: True, Reason: DoesNotExist, Message: Issuing certificate as Secret does not exist
DNS Names:
- example.com
Events:
  Type    Reason     Age   From          Message
  ----    ------     ----  ----          -------
  Normal  Issuing    18m   cert-manager  Issuing certificate as Secret does not exist
  Normal  Generated  18m   cert-manager  Stored new private key in temporary Secret resource "acme-certificate-tr8b2"
  Normal  Requested  18m   cert-manager  Created new CertificateRequest resource "acme-certificate-qp5dm"
Issuer:
  Name: acme-issuer
  Kind: Issuer
  Conditions:
    Ready: True, Reason: ACMEAccountRegistered, Message: The ACME account was registered with the ACME server
error when finding Secret "acme-tls": secrets "acme-tls" not found
Not Before: <none>
Not After: <none>
Renewal Time: <none>
CertificateRequest:
  Name: acme-certificate-qp5dm
  Namespace: default
  Conditions:
    Ready: False, Reason: Pending, Message: Waiting on certificate issuance from order default/acme-certificate-qp5dm-1319513028: "pending"
  Events:
    Type    Reason        Age   From          Message
    ----    ------        ----  ----          -------
    Normal  OrderCreated  18m   cert-manager  Created Order resource default/acme-certificate-qp5dm-1319513028
Order:
  Name: acme-certificate-qp5dm-1319513028
  State: pending, Reason:
  Authorizations:
    URL: https://acme-staging-v02.api.letsencrypt.org/acme/authz-v3/97777571, Identifier: example.com, Initial State: pending, Wildcard: false
Challenges:
- Name: acme-certificate-qp5dm-1319513028-1825664779, Type: DNS-01, Token: J-lOZ39yNDQLZTtP_ZyrYojDqjutMAJOxCL1AkOEZWw, Key: U_W3gGV2KWgIUonlO2me3rvvEOTrfTb-L5s0V1TJMCw, State: pending, Reason: error getting clouddns service account: secret "clouddns-accoun" not found, Processing: true, Presented: false

๋ช…๋ น์€ ๋˜ํ•œ ์ธ์ฆ์„œ์˜ ๋‚ด์šฉ์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณด๋Š” ๋ฐ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Letsencrypt์—์„œ ๋ฐœ๊ธ‰ํ•œ ์ธ์ฆ์„œ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์˜ˆ:

$ kubectl cert-manager status certificate example
Name: example
[...]
Secret:
  Name: example
  Issuer Country: US
  Issuer Organisation: Let's Encrypt
  Issuer Common Name: Let's Encrypt Authority X3
  Key Usage: Digital Signature, Key Encipherment
  Extended Key Usages: Server Authentication, Client Authentication
  Public Key Algorithm: RSA
  Signature Algorithm: SHA256-RSA
  Subject Key ID: 65081d98a9870764590829b88c53240571997862
  Authority Key ID: a84a6a63047dddbae6d139b7a64565eff3a8eca1
  Serial Number: 0462ffaa887ea17797e0057ca81d7ba2a6fb
  Events:  <none>
Not Before: 2020-06-02T04:29:56+02:00
Not After: 2020-08-31T04:29:56+02:00
Renewal Time: 2020-08-01T04:29:56+02:00
[...]

์•ˆ์ •์ ์ธ ์ตœ์‹  Kubernetes API ์‚ฌ์šฉ

Cert-manager๋Š” Kubernetes CRD๋ฅผ ์ตœ์ดˆ๋กœ ๊ตฌํ˜„ํ•œ ์—…์ฒด ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ๊ณผ 1.11๊นŒ์ง€์˜ Kubernetes ๋ฒ„์ „์— ๋Œ€ํ•œ ์šฐ๋ฆฌ์˜ ์ง€์›์€ ๋ ˆ๊ฑฐ์‹œ๋ฅผ ์ง€์›ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ–ˆ์Šต๋‹ˆ๋‹ค. apiextensions.k8s.io/v1beta1 CRD๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค. admissionregistration.k8s.io/v1beta1 ์›นํ›…์„ ์œ„ํ•ด. ์ด์ œ ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์œผ๋ฉฐ Kubernetes ๋ฒ„์ „ 1.22์—์„œ ์ œ๊ฑฐ๋ฉ๋‹ˆ๋‹ค. 1.0์—์„œ๋Š” ์ด์ œ ์™„์ „ํ•œ ์ง€์›์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. apiextensions.k8s.io/v1 ะธ admissionregistration.k8s.io/v1 Kubernetes 1.16(์ถ”๊ฐ€๋œ ์œ„์น˜) ์ด์ƒ์šฉ. ์ด์ „ ๋ฒ„์ „ ์‚ฌ์šฉ์ž์˜ ๊ฒฝ์šฐ ๊ณ„์†ํ•ด์„œ ์ง€์›์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. v1beta1 ์šฐ๋ฆฌ์˜ legacy ๋ฒ„์ „.

ํ–ฅ์ƒ๋œ ๋กœ๊น…

์ด ๋ฆด๋ฆฌ์Šค์—์„œ๋Š” ๋กœ๊น… ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋‹ค์Œ์œผ๋กœ ์—…๋ฐ์ดํŠธํ–ˆ์Šต๋‹ˆ๋‹ค. klog/v2, Kubernetes 1.19์—์„œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์ž‘์„ฑํ•˜๋Š” ๊ฐ ์ €๋„์„ ๊ฒ€ํ† ํ•˜์—ฌ ์ ์ ˆํ•œ ์ˆ˜์ค€์ด ์ง€์ •๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ด๊ฒƒ์— ์˜ํ•ด ์ธ๋„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์˜ ์ง€์นจ. XNUMX๊ฐ€์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค(์‹ค์ œ๋กœ๋Š” XNUMX๊ฐ€์ง€, ์•ฝ. ์—ญ์ž)๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋Š” ๋กœ๊น… ์ˆ˜์ค€ Error (์ˆ˜์ค€ 0), ์ค‘์š”ํ•œ ์˜ค๋ฅ˜๋งŒ ์ธ์‡„ํ•˜๊ณ  ๋‹ค์Œ์œผ๋กœ ๋๋‚ฉ๋‹ˆ๋‹ค. Trace (๋ ˆ๋ฒจ 5) ์ง„ํ–‰ ์ƒํ™ฉ์„ ์ •ํ™•ํžˆ ํŒŒ์•…ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. ์ด ๋ณ€๊ฒฝ์œผ๋กœ cert-manager๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ๋””๋ฒ„๊ทธ ์ •๋ณด๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ๋กœ๊ทธ ์ˆ˜๋ฅผ ์ค„์˜€์Šต๋‹ˆ๋‹ค.

ํŒ: cert-manager๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ ˆ๋ฒจ 2์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค(Info), ๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฅผ ์žฌ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. global.logLevel ํ—ฌ๋ฆ„์ฐจํŠธ์—์„œ.

์ฐธ๊ณ : ๋กœ๊ทธ ๋ณด๊ธฐ๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ ์‹œ ์ตœํ›„์˜ ์ˆ˜๋‹จ์ž…๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋‹น์‚ฌ๋ฅผ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค. ์•ˆ๋‚ด.

ํŽธ์ง‘์ž์˜ n.b.: Kubernetes ๋‚ด๋ถ€์—์„œ ๋ชจ๋“  ๊ฒƒ์ด ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ์ž์„ธํžˆ ์•Œ์•„๋ณด๊ณ , ์‹ค๋ฌด ๊ต์‚ฌ๋กœ๋ถ€ํ„ฐ ๊ท€์ค‘ํ•œ ์กฐ์–ธ์„ ์–ป๊ณ , ํ’ˆ์งˆ ๊ธฐ์ˆ  ์ง€์› ์ง€์›์„ ๋ฐ›์œผ๋ ค๋ฉด ์˜จ๋ผ์ธ ์ง‘์ค‘ ๊ต์œก์— ์ฐธ์—ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋ฒ ์ด์Šค, 28์›” 30-XNUMX์ผ์— ๊ฐœ์ตœ๋˜๋ฉฐ, ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋ฉ”๊ฐ€14์›” 16~XNUMX์ผ ๊ฐœ์ตœ๋ฉ๋‹ˆ๋‹ค.

์• ํฌ๋ฏธ ๊ฐœ์„ 

cert-manager์˜ ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ์šฉ๋„๋Š” ์•„๋งˆ๋„ ACME๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Let's Encrypt์—์„œ ์ธ์ฆ์„œ๋ฅผ ๋ฐœ๊ธ‰ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ด€๋ จ์ด ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ฒ„์ „ 1.0์€ ์ปค๋ฎค๋‹ˆํ‹ฐ ํ”ผ๋“œ๋ฐฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ACME ๋ฐœํ–‰์ž์— ์ž‘์ง€๋งŒ ์ค‘์š”ํ•œ ๋‘ ๊ฐ€์ง€ ๊ฐœ์„  ์‚ฌํ•ญ์„ ์ถ”๊ฐ€ํ•œ ๊ฒƒ์œผ๋กœ ์œ ๋ช…ํ•ฉ๋‹ˆ๋‹ค.

๊ณ„์ • ํ‚ค ์ƒ์„ฑ ๋น„ํ™œ์„ฑํ™”

ACME ์ธ์ฆ์„œ๋ฅผ ๋Œ€๋Ÿ‰์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์—ฌ๋Ÿฌ ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ๋™์ผํ•œ ๊ณ„์ •์„ ์‚ฌ์šฉํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์œผ๋ฏ€๋กœ ์ธ์ฆ์„œ ๋ฐœ๊ธ‰ ์ œํ•œ์ด ๋ชจ๋“  ํด๋Ÿฌ์Šคํ„ฐ์— ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ์— ์ง€์ •๋œ ๋น„๋ฐ€์„ ๋ณต์‚ฌํ•  ๋•Œ cert-manager์—์„œ ์ด๋ฏธ ๊ฐ€๋Šฅํ–ˆ์Šต๋‹ˆ๋‹ค. privateKeySecretRef. ์ด ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” cert-manager๊ฐ€ ๋„์›€์ด ๋˜๋ ค๊ณ  ๋…ธ๋ ฅํ–ˆ๊ณ  ์ฐพ์ง€ ๋ชปํ•œ ๊ฒฝ์šฐ ๊ธฐ๊บผ์ด ์ƒˆ ๊ณ„์ • ํ‚ค๋ฅผ ์ƒ์„ฑํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ƒ๋‹นํžˆ ๋ฒ„๊ทธ๊ฐ€ ๋งŽ์•˜์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. disableAccountKeyGeneration์ด ์˜ต์…˜์„ ๋‹ค์Œ์œผ๋กœ ์„ค์ •ํ•˜๋ฉด ์ด ๋™์ž‘์œผ๋กœ๋ถ€ํ„ฐ ์‚ฌ์šฉ์ž๋ฅผ ๋ณดํ˜ธํ•ฉ๋‹ˆ๋‹ค. true - cert-manager๋Š” ํ‚ค๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š์œผ๋ฉฐ ๊ณ„์ • ํ‚ค๊ฐ€ ์ œ๊ณต๋˜์ง€ ์•Š์•˜์Œ์„ ๊ฒฝ๊ณ ํ•ฉ๋‹ˆ๋‹ค.

apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
  name: letsencrypt
spec:
  acme:
    privateKeySecretRef:
      name: example-issuer-account-key
    disableAccountKeyGeneration: false

์„ ํ˜ธํ•˜๋Š” ์ฒด์ธ

29์›” XNUMX์ผ Let's Encrypt ์ง€๋‚˜๊ฐˆ ๊ฒƒ์ด๋‹ค ์ž์‹ ์˜ ๋ฃจํŠธ CA์— ISRG Root. ๊ต์ฐจ ์„œ๋ช…๋œ ์ธ์ฆ์„œ๋Š” ๋‹ค์Œ์œผ๋กœ ๋Œ€์ฒด๋ฉ๋‹ˆ๋‹ค. Identrust. ์ด ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ cert-manager ์„ค์ •์„ ๋ณ€๊ฒฝํ•  ํ•„์š”๊ฐ€ ์—†์œผ๋ฉฐ ์ด ๋‚ ์งœ ์ดํ›„์— ๋ฐœ๊ธ‰๋œ ๋ชจ๋“  ์—…๋ฐ์ดํŠธ๋œ ์ธ์ฆ์„œ ๋˜๋Š” ์ƒˆ ์ธ์ฆ์„œ๋Š” ์ƒˆ ๋ฃจํŠธ CA๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

Let's Encrypt๋Š” ์ด๋ฏธ ์ด CA๋กœ ์ธ์ฆ์„œ์— ์„œ๋ช…ํ•˜๊ณ  ACME๋ฅผ ํ†ตํ•ด "๋Œ€์ฒด ์ธ์ฆ์„œ ์ฒด์ธ"์œผ๋กœ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฒ„์ „์˜ cert-manager์—์„œ๋Š” ๋ฐœ๊ธ‰์ž ์„ค์ •์—์„œ ์ด๋Ÿฌํ•œ ์ฒด์ธ์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งค๊ฐœ๋ณ€์ˆ˜์—์„œ preferredChain ์ธ์ฆ์„œ๊ฐ€ ๋ฐœ๊ธ‰๋  ์‚ฌ์šฉ ์ค‘์ธ CA์˜ ์ด๋ฆ„์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์š”์ฒญ๊ณผ ์ผ์น˜ํ•˜๋Š” CA ์ธ์ฆ์„œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ ์ธ์ฆ์„œ๋ฅผ ๋ฐœ๊ธ‰ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์„ ํ˜ธ๋˜๋Š” ์˜ต์…˜์ด๋ฉฐ ์•„๋ฌด๊ฒƒ๋„ ๋ฐœ๊ฒฌ๋˜์ง€ ์•Š์œผ๋ฉด ๊ธฐ๋ณธ ์ธ์ฆ์„œ๊ฐ€ ๋ฐœ๊ธ‰๋ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ACME ๋ฐœ๊ธ‰์ž ์ธก์—์„œ ๋Œ€์ฒด ์ฒด์ธ์„ ์‚ญ์ œํ•œ ํ›„์—๋„ ์ธ์ฆ์„œ๋ฅผ ๊ฐฑ์‹ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฏธ ์˜ค๋Š˜ ์„œ๋ช…๋œ ์ธ์ฆ์„œ๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ISRG Root, ๊ทธ๋ž˜์„œ:

apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
  name: letsencrypt
spec:
  acme:
    server: https://acme-v02.api.letsencrypt.org/directory
    preferredChain: "ISRG Root X1"

์ฒด์ธ์„ ๋– ๋‚˜๊ณ  ์‹ถ๋‹ค๋ฉด IdenTrust - ์ด ์˜ต์…˜์„ ๋‹ค์Œ์œผ๋กœ ์„ค์ • DST Root CA X3:

apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
  name: letsencrypt
spec:
  acme:
    server: https://acme-v02.api.letsencrypt.org/directory
    preferredChain: "DST Root CA X3"

์ด ๋ฃจํŠธ CA๋Š” ๊ณง ์‚ฌ์šฉ์ด ์ค‘๋‹จ๋  ์˜ˆ์ •์ด๋ฉฐ Let's Encrypt๋Š” ์ด ์ฒด์ธ์„ 29๋…„ 2021์›” XNUMX์ผ๊นŒ์ง€ ํ™œ์„ฑ ์ƒํƒœ๋กœ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€