Post

[Kubernetes] ๐Ÿ” ์ธ์ฆ์„œ์™€ cert-manager: ๋‘ ๊ฐˆ๋ž˜ PKI์™€ TLS ์ž๋™ํ™”

keyยทcertยทCAยทTLS ์šฉ์–ด๋ฅผ ์‹ ๋ถ„์ฆ ๋น„์œ ๋กœ ์ •๋ฆฌํ•˜๊ณ , ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์˜ ๋‘ ๊ฐˆ๋ž˜ PKI(ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด๋ถ€ vs ์•ฑ/์ธ๊ทธ๋ ˆ์Šค)์™€ cert-manager์˜ ์ธ์ฆ์„œ ๋ฐœ๊ธ‰ยท๊ฐฑ์‹  ์ž๋™ํ™”๋ฅผ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

[Kubernetes] ๐Ÿ” ์ธ์ฆ์„œ์™€ cert-manager: ๋‘ ๊ฐˆ๋ž˜ PKI์™€ TLS ์ž๋™ํ™”

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋ฅผ ๋‹ค๋ฃจ๋‹ค ๋ณด๋ฉด kubeadm๋กœ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์„ธ์šธ ๋•Œ๋„ ์ธ์ฆ์„œ๊ฐ€ ๋‚˜์˜ค๊ณ , IngressยทGateway์—๋„ ์ธ์ฆ์„œ๊ฐ€ ๋‚˜์˜ต๋‹ˆ๋‹ค. ๊ฐ™์€ ๊ฑธ๊นŒ์š”? ์ด ๊ธ€์—์„œ๋Š” keyยทcertยทCAยทTLS ์šฉ์–ด๋ฅผ ์‹ ๋ถ„์ฆ ๋น„์œ ๋กœ ์ •๋ฆฌํ•˜๊ณ , ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์— PKI๊ฐ€ ๋‘ ๊ฐˆ๋ž˜(ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด๋ถ€ mTLS vs ์•ฑ/์ธ๊ทธ๋ ˆ์Šค TLS)๋กœ ๋ณ„๊ฐœ๋ผ๋Š” ์ , ๊ทธ๋ฆฌ๊ณ  cert-manager๊ฐ€ โ€œ๋ฐ›์€ ์ธ์ฆ์„œ๋ฅผ ๋„ฃ๋Š”โ€ ๊ฒŒ ์•„๋‹ˆ๋ผ ๋ฐœ๊ธ‰ยท๊ฐฑ์‹  ํ–‰์œ„๋ฅผ ์ž๋™ํ™”ํ•œ๋‹ค๋Š” ํ•ต์‹ฌ์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

์ด ์‹œ๋ฆฌ์ฆˆ๋Š” ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค gRPC ์‚ฝ์งˆ์—์„œ ์ถœ๋ฐœํ•ด HTTP/2ยทTLSยท๋กœ๋“œ๋ฐธ๋Ÿฐ์„œยทGateway APIยท์ธ์ฆ์„œ๊นŒ์ง€ ํ’€์–ด๊ฐ€๋Š” ๊ธฐ๋ก์ž…๋‹ˆ๋‹ค. ์ด๋ฒˆ 6ํŽธ์€ ์ธ์ฆ์„œ์™€ cert-manager ํŽธ์ž…๋‹ˆ๋‹ค. ์•ž์„  2ํŽธ(h2 vs h2c), 5ํŽธ(Gateway API)์„ ๋จผ์ € ๋ณด๋ฉด ์ข‹์Šต๋‹ˆ๋‹ค.


๐Ÿชช ์šฉ์–ด 4๊ฐœ โ€” ๊ฒฝ์Ÿ ๊ด€๊ณ„๊ฐ€ ์•„๋‹ˆ๋ผ ํ•œ ์‹œ์Šคํ…œ์˜ ์—ญํ• ๋“ค

keyยทCAยทcertificateยทTLS๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ์„ ํƒ์ง€๊ฐ€ ์•„๋‹ˆ๋ผ, ํ•˜๋‚˜์˜ ์‹ ๋ถ„์ฆ ์‹œ์Šคํ…œ์„ ์ด๋ฃจ๋Š” ์—ญํ• ๋“ค์ž…๋‹ˆ๋‹ค.

์šฉ์–ด์‹ ๋ถ„์ฆ ๋น„์œ ์‹ค์ œ ์˜๋ฏธ
key(ํ‚ค)๋‚˜๋งŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์„œ๋ช…๊ฐœ์ธํ‚ค + ๊ฒ€์ฆ์šฉ ๊ณต๊ฐœํ‚ค. ๋ชจ๋“  ๊ฒƒ์˜ ํ† ๋Œ€
CA(์ธ์ฆ๊ธฐ๊ด€)์‹ ๋ถ„์ฆ ๋ฐœ๊ธ‰ ๊ธฐ๊ด€(์ •๋ถ€)์ž๊ธฐ ํ‚ค(CA key)๋กœ ์ธ์ฆ์„œ์— ๋„์žฅ์„ ์ฐ์Œ
certificate(cert/crt)์‹ ๋ถ„์ฆ ์นด๋“œ ๊ทธ ์ž์ฒด๊ณต๊ฐœํ‚ค + ์‹ ์› + CA์˜ ์„œ๋ช…
TLS๊ฒ€๋ฌธ์†Œ์—์„œ ์‹ ๋ถ„์ฆ ์ œ์‹œยท๊ฒ€์ฆ์œ„ ์žฌ๋ฃŒ๋ฅผ ์‹ค์ œ๋กœ ์“ฐ๋Š” ํ”„๋กœํ† ์ฝœ

์ •๋ฆฌํ•˜๋ฉด โ€œCA๊ฐ€ ์ž๊ธฐ ํ‚ค๋กœ ์ธ์ฆ์„œ(์‹ ๋ถ„์ฆ)์— ์„œ๋ช…ํ•˜๊ณ , TLS๊ฐ€ ์—ฐ๊ฒฐํ•  ๋•Œ ๊ทธ๊ฑธ ์ œ์‹œยท๊ฒ€์ฆํ•œ๋‹ค.โ€ ๋„ท์ด ํ•œ ํ๋ฆ„์˜ ๋ถ€ํ’ˆ์ด์ง€, ์„œ๋กœ ๋‹ค๋ฅธ ์„ ํƒ์ง€๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.


๐Ÿด ํ—ท๊ฐˆ๋ฆผ์˜ ํ•ต์‹ฌ: ๊ฐ™์€ ๊ธฐ์ˆ ์„ ์“ฐ๋Š” ๋ณ„๊ฐœ์˜ ๋‘ ์ฒด๊ณ„

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์—๋Š” ์™„์ „ํžˆ ๋ณ„๊ฐœ์ธ ๋‘ ์ข…๋ฅ˜์˜ ์ธ์ฆ์„œ ์ฒด๊ณ„๊ฐ€ ์žˆ๊ณ , ๋‘˜ ๋‹ค ๊ฐ™์€ ๊ธฐ์ˆ (X.509 + TLS)์„ ์จ์„œ ๋˜‘๊ฐ™์•„ ๋ณด์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ๊ฐ€ ์ง„์งœ ํ•จ์ •์ž…๋‹ˆ๋‹ค.

โ‘  ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด๋ถ€ PKI (kubeadm certs) โ€” ์ปดํฌ๋„ŒํŠธ๋ผ๋ฆฌ ์ธ์ฆ์šฉ

  • ํด๋Ÿฌ์Šคํ„ฐ์— ์ž์ฒด CA(ca.crt/ca.key)๊ฐ€ ์žˆ๊ณ , ๊ทธ๊ฒŒ API ์„œ๋ฒ„ยทetcdยทkubelet ๋“ฑ์˜ ์ธ์ฆ์„œ๋ฅผ ์„œ๋ช…ํ•ฉ๋‹ˆ๋‹ค.
  • ์ปดํฌ๋„ŒํŠธ๋“ค์€ โ€œ์ƒ๋Œ€ ์ธ์ฆ์„œ๊ฐ€ ์šฐ๋ฆฌ ํด๋Ÿฌ์Šคํ„ฐ CA๊ฐ€ ์„œ๋ช…ํ•œ ๊ฑฐ๋ƒโ€๋กœ ์„œ๋กœ๋ฅผ ๋ฏฟ์Šต๋‹ˆ๋‹ค(mTLS, ์ƒํ˜ธ ์ธ์ฆ).
  • ์ด๊ฒŒ ๋ณดํ†ต ๊ฐฑ์‹ ํ•˜๋Š” ๊ทธ ์ธ์ฆ์„œ์ž…๋‹ˆ๋‹ค. (์žŽ์‚ฌ๊ท€(leaf) ์ธ์ฆ์„œ๋Š” ๊ธฐ๋ณธ 1๋…„, CA ์ž์ฒด๋Š” ๋ณดํ†ต 10๋…„)
  • ๊ด€๋ฆฌ ๋„๊ตฌ: kubeadm (kubeadm certs renew ๋“ฑ). ์™ธ๋ถ€ ์„œ๋น„์Šค์™€ ๋ฌด๊ด€.

โ‘ก ์•ฑ/์ธ๊ทธ๋ ˆ์Šค TLS (GatewayยทIngress + cert-manager) โ€” ์™ธ๋ถ€ ํด๋ผ์ด์–ธํŠธ์šฉ

  • ๊ณต์ธ CA(๋˜๋Š” ์‚ฌ๋‚ด CA)๊ฐ€ a.example.com ๊ฐ™์€ ๋„๋ฉ”์ธ ์ธ์ฆ์„œ๋ฅผ ์„œ๋ช…ํ•ฉ๋‹ˆ๋‹ค.
  • ์™ธ๋ถ€ ๋ธŒ๋ผ์šฐ์ €ยทํด๋ผ์ด์–ธํŠธ๊ฐ€ โ€œ์ด https ์„œ๋ฒ„ ๋ฏฟ์–ด๋„ ๋˜๋‚˜โ€๋ฅผ ํŒ๋‹จํ•˜๋Š” ์šฉ๋„์ž…๋‹ˆ๋‹ค.
  • ๊ด€๋ฆฌ ๋„๊ตฌ: cert-manager๋‚˜ ์ˆ˜๋™ Secret. ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด๋ถ€ ํ†ต์‹ ๊ณผ ๋ฌด๊ด€.

๐Ÿง  ๋‘˜์€ ๋ณ„๊ฐœ์˜ CA, ๋ณ„๊ฐœ์˜ ๋ชฉ์ , ๋ณ„๊ฐœ์˜ ์ˆ˜๋ช…ยท๊ด€๋ฆฌ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ํด๋Ÿฌ์Šคํ„ฐ CA๋Š” a.example.com ์ธ์ฆ์„œ์™€ ์•„๋ฌด ์ƒ๊ด€์ด ์—†๊ณ , ๋ธŒ๋ผ์šฐ์ €๋Š” ํด๋Ÿฌ์Šคํ„ฐ CA๋ฅผ ๋ชจ๋ฅด๋ฉฐ, ์ปดํฌ๋„ŒํŠธ๋“ค์€ Letโ€™s Encrypt๋ฅผ ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ธฐ์ˆ ์€ ๊ฐ™์ง€๋งŒ(X.509+TLS), ๋‹ค๋ฅธ ๊ฑด โ€œ๋ˆ„๊ตฌ๋ฅผ ์œ„ํ•œ ์‹ ๋ขฐ๋ƒโ€ โ€” โ‘ ์€ ํด๋Ÿฌ์Šคํ„ฐ ์‹๊ตฌ๋“ค๋ผ๋ฆฌ, โ‘ก๋Š” ๋ฐ”๊นฅ ์†๋‹˜์—๊ฒŒ์ž…๋‹ˆ๋‹ค.

๊ตฌ๋ถ„โ‘  ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด๋ถ€ PKIโ‘ก ์•ฑ/์ธ๊ทธ๋ ˆ์Šค TLS
๋ชฉ์ ์ปดํฌ๋„ŒํŠธ ์ƒํ˜ธ ์ธ์ฆ(mTLS)์™ธ๋ถ€ ํด๋ผ์ด์–ธํŠธ ์‹ ๋ขฐ
CAํด๋Ÿฌ์Šคํ„ฐ ์ž์ฒด CA๊ณต์ธ/์‚ฌ๋‚ด CA (Letโ€™s Encrypt ๋“ฑ)
์ˆ˜๋ช…leaf 1๋…„, CA 10๋…„๋ฐœ๊ธ‰์ฒ˜๋ณ„(Letโ€™s Encrypt 90์ผ)
๊ด€๋ฆฌkubeadmcert-manager / ์ˆ˜๋™ Secret

์ด์ œ๋ถ€ํ„ฐ๋Š” โ‘ก(์•ฑ/์ธ๊ทธ๋ ˆ์Šค TLS) ์–˜๊ธฐ์ž…๋‹ˆ๋‹ค.


๐Ÿข Gateway์—์„œ TLS๋ฅผ ์ค‘์•™ํ™”ํ•˜๊ธฐ

Gateway API์—์„œ๋Š” TLS ์„ค์ •์ด Gateway์˜ listener๋กœ ์˜ฌ๋ผ๊ฐ€, TLS ๊ฐœ์ธํ‚ค๊ฐ€ ํ”Œ๋žซํผํŒ€ ํ•œ ๊ณณ์— ๋ชจ์ž…๋‹ˆ๋‹ค. 5ํŽธ์—์„œ ๋ณธ ์—ญํ•  ๋ถ„๋ฆฌ๊ฐ€ ์—ฌ๊ธฐ์„œ ๋ณด์•ˆ ์ด์ ์œผ๋กœ ์ด์–ด์ง‘๋‹ˆ๋‹ค.

์˜ˆ์ „ Ingress ๋ฐฉ์‹์˜ ์•ฝ์ : Ingress์˜ TLS Secret์€ Ingress์™€ ๊ฐ™์€ ๋„ค์ž„์ŠคํŽ˜์ด์Šค, ์ฆ‰ ์•ฑํŒ€ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ์žˆ์–ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ TLS ๊ฐœ์ธํ‚ค๊ฐ€ ํŒ€๋งˆ๋‹ค ํฉ์–ด์กŒ๊ณ , ๊ด€๋ฆฌยท๊ฐ์‚ฌ ๋ฒ”์œ„๊ฐ€ ์ปธ์Šต๋‹ˆ๋‹ค.

Gateway API์—์„œ๋Š” Gateway(ํ”Œ๋žซํผํŒ€ ๋ฆฌ์†Œ์Šค)์˜ listener์— TLS๋ฅผ ๋‘๋ฏ€๋กœ, ๊ฐœ์ธํ‚ค๊ฐ€ ํ”Œ๋žซํผํŒ€ ํ•œ ๊ณณ์— ๋ชจ์ด๊ณ  ์•ฑํŒ€์€ Route๋งŒ ๋ถ™์ž…๋‹ˆ๋‹ค.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
kind: Gateway
metadata:
  name: shared-gateway
  namespace: gateway-system          # ํ”Œ๋žซํผํŒ€ ์†Œ์œ 
spec:
  listeners:
    - name: team-a
      port: 443
      protocol: HTTPS
      hostname: "a.example.com"        # ํ”„๋กœ์ ํŠธ๋ณ„ ๋„๋ฉ”์ธ
      tls:
        mode: Terminate
        certificateRefs:
          - name: team-a-tls            # ํ”„๋กœ์ ํŠธ๋ณ„ ์ธ์ฆ์„œ
      allowedRoutes:
        namespaces:
          from: Selector
          selector:
            matchLabels:
              team: a
  • ํ”„๋กœ์ ํŠธ๋ณ„๋กœ ๋‹ค๋ฅธ ์ธ์ฆ์„œ๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. listener๋ฅผ ๋„๋ฉ”์ธ๋ณ„๋กœ ๋‚˜๋ˆ„๋ฉด TLS์˜ SNI(์ ‘์†ํ•˜๋ ค๋Š” ๋„๋ฉ”์ธ)๋กœ ์ธ์ฆ์„œ๊ฐ€ ์ž๋™ ์„ ํƒ๋ฉ๋‹ˆ๋‹ค.
  • ์ถ”๊ฐ€ ํ†ต์ œ ์žฅ์น˜: allowedRoutes๋กœ ์–ด๋А ๋„ค์ž„์ŠคํŽ˜์ด์Šค์˜ Route๋งŒ ๋ถ™์„์ง€ ์ œํ•œํ•˜๊ณ , ๋‹ค๋ฅธ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์˜ Secret์„ ์ฐธ์กฐํ•˜๋ ค๋ฉด ReferenceGrant๋กœ ๋ช…์‹œ์  ํ—ˆ์šฉ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค(ํฌ๋กœ์Šค ๋„ค์ž„์ŠคํŽ˜์ด์Šค ์ ‘๊ทผ ๊ธฐ๋ณธ ์ฐจ๋‹จ = ๋ณด์•ˆ ๊ธฐ๋Šฅ).
  • HTTPRoute๊ฐ€ ์–ด๋А listener์— ๋ถ™์„์ง€๋Š” hostname ๊ต์ง‘ํ•ฉ์œผ๋กœ ์ž๋™ ๋งค์นญ๋˜๊ณ , ๋ช…ํ™•ํžˆ ํ•˜๋ ค๋ฉด sectionName(listener ์ด๋ฆ„)์„ ์ ์–ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

๐Ÿค– cert-manager โ€” โ€œ๋ฐ›์€ ์ธ์ฆ์„œ๋ฅผ ๋„ฃ๋Š”โ€ ๊ฒŒ ์•„๋‹ˆ๋ผ โ€œ๋ฐ›๋Š” ํ–‰์œ„๋ฅผ ์ž๋™ํ™”โ€

cert-manager๋Š” ๋‹ด๋‹น์ž์—๊ฒŒ ๋ฐ›์€ ์ธ์ฆ์„œ๋ฅผ ๋„ฃ์–ด์ฃผ๋Š” ๋„๊ตฌ๊ฐ€ ์•„๋‹ˆ๋ผ, ์ง์ ‘ ๊ฐœ์ธํ‚ค๋ฅผ ๋งŒ๋“ค๊ณ  CA์— ์ธ์ฆ์„œ๋ฅผ ์š”์ฒญํ•ด ๋ฐ›์•„์˜ค๋Š” ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ์ž‘๋™ ๋ฐฉํ–ฅ์ด ๋ฐ˜๋Œ€๋ผ๋Š” ์ ์ด ํฐ ์˜คํ•ด ํฌ์ธํŠธ์ž…๋‹ˆ๋‹ค. ์ฆ‰ ์™„์„ฑ๋œ ์ธ์ฆ์„œ๋ฅผ ์‚ฌ๋žŒํ•œํ…Œ ๋ฐ›์•„ ๋„ฃ๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ, ์‚ฌ๋žŒ์˜ ์†์„ ๊ฑฐ์น˜๋Š” ๋‹จ๊ณ„ ์ž์ฒด๋ฅผ ์—†์•ฑ๋‹ˆ๋‹ค.

์ž๋™ํ™” ํ๋ฆ„

  1. cert-manager ์„ค์น˜ (ํด๋Ÿฌ์Šคํ„ฐ์— Pod๋กœ)
  2. Issuer/ClusterIssuer ์ •์˜ โ€” โ€œ์ธ์ฆ์„œ๋ฅผ ์–ด๋””์„œ ๋ฐ›์„์ง€โ€(Letโ€™s Encrypt, Vault, ์‚ฌ๋‚ด CA ๋“ฑ)
  3. Certificate ์ƒ์„ฑ(๋˜๋Š” ์• ๋„ˆํ…Œ์ด์…˜) โ€” โ€œa.example.com ์ธ์ฆ์„œ ํ•„์š”โ€
  4. cert-manager๊ฐ€ ๋ฐœ๊ธ‰์ฒ˜์™€ ํ†ต์‹ ํ•˜๊ณ  ๋„๋ฉ”์ธ ์†Œ์œ ๋ฅผ ์ฆ๋ช…(HTTP-01 / DNS-01 ์ฑŒ๋ฆฐ์ง€)
  5. ๋ฐ›์€ ์ธ์ฆ์„œ+ํ‚ค๋ฅผ Secret์— ์ž๋™ ์ €์žฅ โ†’ Gateway๊ฐ€ ๊ทธ Secret ์ฐธ์กฐ
  6. ๋งŒ๋ฃŒ ์ „ ์ž๋™ ๊ฐฑ์‹  (์˜ˆ: Letโ€™s Encrypt๋Š” 90์ผ)

ํ•ต์‹ฌ์€ ์‚ฌ๋žŒ์ด ๊ฐœ์ธํ‚ค๋ฅผ ๋งŒ๋“ค๊ฑฐ๋‚˜ secret.yaml์„ ์ฃผ๊ณ ๋ฐ›์„ ์ผ์ด ์‚ฌ๋ผ์ง„๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# ClusterIssuer (Let's Encrypt ACME)
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: letsencrypt-prod
spec:
  acme:
    server: https://acme-v02.api.letsencrypt.org/directory
    email: admin@example.com
    privateKeySecretRef:
      name: letsencrypt-prod-account-key
    solvers:
      - http01:
          ingress:
            class: nginx
---
# Certificate โ€” cert-manager๊ฐ€ ๋ฐœ๊ธ‰ยท๊ฐฑ์‹ ยทSecret ์ €์žฅ์„ ์ž๋™ ์ฒ˜๋ฆฌ
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
  name: team-a-tls
  namespace: gateway-system
spec:
  secretName: team-a-tls            # Gateway๊ฐ€ ์ฐธ์กฐํ•˜๋Š” Secret ์ด๋ฆ„
  dnsNames:
    - a.example.com
  issuerRef:
    name: letsencrypt-prod
    kind: ClusterIssuer

๋ฐœ๊ธ‰์ฒ˜(issuer) ์ข…๋ฅ˜๋„ ๋‹ค์–‘ํ•ฉ๋‹ˆ๋‹ค: ACME(Letโ€™s Encrypt ๋“ฑ), HashiCorp Vault, Venafi, ์‚ฌ๋‚ด CA, self-signed. ํ•ต์‹ฌ์€ โ€œ์‚ฌ๋žŒ์ด ์•„๋‹ˆ๋ผ ํ”„๋กœ๊ทธ๋žจ์ด ์ž๋™์œผ๋กœ ์š”์ฒญยท์ˆ˜๋ นํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐœ๊ธ‰์ฒ˜โ€๋ผ๋Š” ์ ์ž…๋‹ˆ๋‹ค.

โš ๏ธ cert-manager๊ฐ€ ์ˆ˜๋™ ๋ฐœ๊ธ‰์„ ๋Œ€์ฒดํ•˜๋ ค๋ฉด ํšŒ์‚ฌ CA๊ฐ€ ์ž๋™ ์—ฐ๋™(ACME/Vault ๋“ฑ) ๊ฐ€๋Šฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ˆœ์ˆ˜ ์ˆ˜๋™ ๋ฐœ๊ธ‰๋ฟ์ด๋ฉด cert-manager๊ฐ€ ๊ทธ ๋ฐœ๊ธ‰์„ ์ž๋™ํ™”ํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.

์ˆ˜๋™ ๋ฐœ๊ธ‰์„ ์œ ์ง€ํ•ด์•ผ ํ•œ๋‹ค๋ฉด ์ ์–ด๋„ secret.yaml์„ ์†์œผ๋กœ ์“ฐ๋Š” ๋Œ€์‹  ์ด๋ ‡๊ฒŒ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

1
2
kubectl create secret tls my-tls \
  --cert=tls.crt --key=tls.key -n my-namespace

๐Ÿ“ ํ•œ ์ค„ ์š”์•ฝ

  • keyยทcertยทCAยทTLS๋Š” ํ•œ ์‹ ๋ถ„์ฆ ์‹œ์Šคํ…œ์˜ ์—ญํ• ๋“ค์ž…๋‹ˆ๋‹ค.
  • ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์—” PKI๊ฐ€ ๋‘ ๊ฐˆ๋ž˜ โ€” ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด๋ถ€(kubeadm, mTLS)์™€ ์•ฑ/์ธ๊ทธ๋ ˆ์Šค TLS โ€” ๋กœ ์™„์ „ํžˆ ๋ณ„๊ฐœ์ž…๋‹ˆ๋‹ค.
  • cert-manager๋Š” โ€œ๋ฐ›์€ ์ธ์ฆ์„œ๋ฅผ ๋„ฃ๋Š”โ€ ๊ฒŒ ์•„๋‹ˆ๋ผ โ€œ๋ฐ›๋Š” ํ–‰์œ„(๋ฐœ๊ธ‰ยท๊ฐฑ์‹ )๋ฅผ ์ž๋™ํ™”โ€ ํ•˜๋Š” ๋„๊ตฌ์ด๋ฉฐ, ์ž๋™ ์—ฐ๋™ ๊ฐ€๋Šฅํ•œ CA๊ฐ€ ์ „์ œ์ž…๋‹ˆ๋‹ค.

โ“ ์ž์ฃผ ๋ฌป๋Š” ์งˆ๋ฌธ

Q. kubeadm ์ธ์ฆ์„œ์™€ Ingress TLS ์ธ์ฆ์„œ๋Š” ๊ฐ™์€ ๊ฑด๊ฐ€์š”?

์•„๋‹™๋‹ˆ๋‹ค. kubeadm ์ธ์ฆ์„œ๋Š” ํด๋Ÿฌ์Šคํ„ฐ ์ปดํฌ๋„ŒํŠธ๋ผ๋ฆฌ์˜ mTLS์šฉ(ํด๋Ÿฌ์Šคํ„ฐ ์ž์ฒด CA), Ingress/Gateway TLS๋Š” ์™ธ๋ถ€ ํด๋ผ์ด์–ธํŠธ์šฉ(๊ณต์ธ/์‚ฌ๋‚ด CA)์ž…๋‹ˆ๋‹ค. CAยท๋ชฉ์ ยท์ˆ˜๋ช…ยท๊ด€๋ฆฌ ๋„๊ตฌ๊ฐ€ ๋ชจ๋‘ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

Q. cert-manager์— ํšŒ์‚ฌ์—์„œ ๋ฐ›์€ .pfx๋ฅผ ๋„ฃ์œผ๋ฉด ๊ด€๋ฆฌํ•ด์ฃผ๋‚˜์š”?

๊ทธ๊ฒŒ cert-manager์˜ ๋ฐฉ์‹์ด ์•„๋‹™๋‹ˆ๋‹ค. cert-manager๋Š” ์ง์ ‘ ํ‚ค๋ฅผ ๋งŒ๋“ค๊ณ  CA์— ๋ฐœ๊ธ‰์„ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค. ํšŒ์‚ฌ CA๊ฐ€ ACME/Vault ๋“ฑ์œผ๋กœ ์ž๋™ ์—ฐ๋™๋˜์ง€ ์•Š๊ณ  ์ˆœ์ˆ˜ ์ˆ˜๋™ ๋ฐœ๊ธ‰๋งŒ ํ•œ๋‹ค๋ฉด, cert-manager๋กœ ์ž๋™ํ™”ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

Q. Letโ€™s Encrypt ์ธ์ฆ์„œ ์œ ํšจ๊ธฐ๊ฐ„์€ ์–ผ๋งˆ์ธ๊ฐ€์š”?

90์ผ์ž…๋‹ˆ๋‹ค. cert-manager๋Š” ๋งŒ๋ฃŒ ์ „์— ์ž๋™์œผ๋กœ ๊ฐฑ์‹ ํ•˜๋ฏ€๋กœ ์ˆ˜๋™ ๊ฐœ์ž…์ด ํ•„์š” ์—†์Šต๋‹ˆ๋‹ค.

Q. HTTP-01๊ณผ DNS-01 ์ฑŒ๋ฆฐ์ง€์˜ ์ฐจ์ด๋Š”?

๋‘˜ ๋‹ค ๋„๋ฉ”์ธ ์†Œ์œ ๋ฅผ ์ฆ๋ช…ํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. HTTP-01์€ ๋„๋ฉ”์ธ์˜ ํŠน์ • ๊ฒฝ๋กœ์— ํ† ํฐ์„ ๋…ธ์ถœ(80 ํฌํŠธ ํ•„์š”), DNS-01์€ DNS TXT ๋ ˆ์ฝ”๋“œ๋กœ ์ฆ๋ช…ํ•ฉ๋‹ˆ๋‹ค. ์™€์ผ๋“œ์นด๋“œ ์ธ์ฆ์„œ(*.example.com)๋Š” DNS-01๋งŒ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

Q. Gateway API์—์„œ ๋‹ค๋ฅธ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์˜ ์ธ์ฆ์„œ Secret์„ ์ฐธ์กฐํ•˜๋ ค๋ฉด?

ReferenceGrant๋กœ ๋ช…์‹œ์  ํ—ˆ์šฉ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ํฌ๋กœ์Šค ๋„ค์ž„์ŠคํŽ˜์ด์Šค ์ ‘๊ทผ์€ ๊ธฐ๋ณธ ์ฐจ๋‹จ๋˜์–ด ์žˆ์–ด, ์ด ๋ณด์•ˆ ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ์–ด๋–ค ๋„ค์ž„์ŠคํŽ˜์ด์Šค๊ฐ€ ์–ด๋–ค ๋ฆฌ์†Œ์Šค๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ†ต์ œํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ“š ์ฐธ๊ณ 

</content>

This post is licensed under CC BY 4.0 by the author.