Kubernetes ยท Networking ยท

[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๋งŒ ๋ถ™์ž…๋‹ˆ๋‹ค.

 1kind: Gateway
 2metadata:
 3  name: shared-gateway
 4  namespace: gateway-system          # ํ”Œ๋žซํผํŒ€ ์†Œ์œ 
 5spec:
 6  listeners:
 7    - name: team-a
 8      port: 443
 9      protocol: HTTPS
10      hostname: "a.example.com"        # ํ”„๋กœ์ ํŠธ๋ณ„ ๋„๋ฉ”์ธ
11      tls:
12        mode: Terminate
13        certificateRefs:
14          - name: team-a-tls            # ํ”„๋กœ์ ํŠธ๋ณ„ ์ธ์ฆ์„œ
15      allowedRoutes:
16        namespaces:
17          from: Selector
18          selector:
19            matchLabels:
20              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# ClusterIssuer (Let's Encrypt ACME)
 2apiVersion: cert-manager.io/v1
 3kind: ClusterIssuer
 4metadata:
 5  name: letsencrypt-prod
 6spec:
 7  acme:
 8    server: https://acme-v02.api.letsencrypt.org/directory
 9    email: admin@example.com
10    privateKeySecretRef:
11      name: letsencrypt-prod-account-key
12    solvers:
13      - http01:
14          ingress:
15            class: nginx
16---
17# Certificate โ€” cert-manager๊ฐ€ ๋ฐœ๊ธ‰ยท๊ฐฑ์‹ ยทSecret ์ €์žฅ์„ ์ž๋™ ์ฒ˜๋ฆฌ
18apiVersion: cert-manager.io/v1
19kind: Certificate
20metadata:
21  name: team-a-tls
22  namespace: gateway-system
23spec:
24  secretName: team-a-tls            # Gateway๊ฐ€ ์ฐธ์กฐํ•˜๋Š” Secret ์ด๋ฆ„
25  dnsNames:
26    - a.example.com
27  issuerRef:
28    name: letsencrypt-prod
29    kind: ClusterIssuer

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

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

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

1kubectl create secret tls my-tls \
2  --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๋กœ ๋ช…์‹œ์  ํ—ˆ์šฉ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ํฌ๋กœ์Šค ๋„ค์ž„์ŠคํŽ˜์ด์Šค ์ ‘๊ทผ์€ ๊ธฐ๋ณธ ์ฐจ๋‹จ๋˜์–ด ์žˆ์–ด, ์ด ๋ณด์•ˆ ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ์–ด๋–ค ๋„ค์ž„์ŠคํŽ˜์ด์Šค๊ฐ€ ์–ด๋–ค ๋ฆฌ์†Œ์Šค๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ†ต์ œํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ“š ์ฐธ๊ณ  #

Advertisement