๊ฒฝํ ๋ง๊ณ ํ๋ช ํ ์์ง๋์ด์๊ฒ 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์์ ์ฌ์ฉ๋ฉ๋๋ค. ๋ํ ์์ฑํ๋ ๊ฐ ์ ๋์ ๊ฒํ ํ์ฌ ์ ์ ํ ์์ค์ด ์ง์ ๋์๋์ง ํ์ธํฉ๋๋ค. ์ฐ๋ฆฌ๋ ์ด๊ฒ์ ์ํด ์ธ๋๋์์ต๋๋ค. Error
(์์ค 0), ์ค์ํ ์ค๋ฅ๋ง ์ธ์ํ๊ณ ๋ค์์ผ๋ก ๋๋ฉ๋๋ค. Trace
(๋ ๋ฒจ 5) ์งํ ์ํฉ์ ์ ํํ ํ์
ํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค. ์ด ๋ณ๊ฒฝ์ผ๋ก cert-manager๋ฅผ ์คํํ ๋ ๋๋ฒ๊ทธ ์ ๋ณด๊ฐ ํ์ํ์ง ์์ ๊ฒฝ์ฐ ๋ก๊ทธ ์๋ฅผ ์ค์์ต๋๋ค.
ํ: cert-manager๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ ๋ฒจ 2์์ ์คํ๋ฉ๋๋ค(Info
), ๋ค์์ ์ฌ์ฉํ์ฌ ์ด๋ฅผ ์ฌ์ ์ํ ์ ์์ต๋๋ค. global.logLevel
ํฌ๋ฆ์ฐจํธ์์.
์ฐธ๊ณ : ๋ก๊ทธ ๋ณด๊ธฐ๋ ๋ฌธ์ ํด๊ฒฐ ์ ์ตํ์ ์๋จ์
๋๋ค. ์์ธํ ๋ด์ฉ์ ๋น์ฌ๋ฅผ ํ์ธํ์ญ์์ค.
ํธ์ง์์ n.b.: Kubernetes ๋ด๋ถ์์ ๋ชจ๋ ๊ฒ์ด ์ด๋ป๊ฒ ์๋ํ๋์ง ์์ธํ ์์๋ณด๊ณ , ์ค๋ฌด ๊ต์ฌ๋ก๋ถํฐ ๊ท์คํ ์กฐ์ธ์ ์ป๊ณ , ํ์ง ๊ธฐ์ ์ง์ ์ง์์ ๋ฐ์ผ๋ ค๋ฉด ์จ๋ผ์ธ ์ง์ค ๊ต์ก์ ์ฐธ์ฌํ ์ ์์ต๋๋ค.
์ ํฌ๋ฏธ ๊ฐ์
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 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