Kubernetes Tools/Istio

[Istio ๊ฐ€์ด๋“œ ep.18] 3๋ถ€ ๋ณด์•ˆ ๋ฐ ์ธ์ฆ #2 | Istio์—์„œ ์ธ์ฆ์„œ ๊ด€๋ฆฌ (์ž๋™ ๋ฐ ์ˆ˜๋™ ์„ค์ •)

ygtoken 2025. 3. 18. 11:42
728x90

๐Ÿ”น ๊ฐœ์š”

์ด๋ฒˆ ๊ธ€์—์„œ๋Š” Istio์—์„œ ์ธ์ฆ์„œ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
Istio๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ž๋™ ์ธ์ฆ์„œ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋ฉฐ,
ํ•„์š”์— ๋”ฐ๋ผ ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ์ธ์ฆ์„œ๋ฅผ ๋ฐœ๊ธ‰ํ•˜๊ณ  ๊ด€๋ฆฌํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๊ธ€์—์„œ๋Š” Istio์˜ ์ž๋™ ์ธ์ฆ์„œ ๊ด€๋ฆฌ ๋ฐฉ์‹,
๊ทธ๋ฆฌ๊ณ  ์ˆ˜๋™ ์ธ์ฆ์„œ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.


๐Ÿ”น 1. Istio์—์„œ ์ธ์ฆ์„œ๊ฐ€ ํ•„์š”ํ•œ ์ด์œ 

โœ… 1.1 ์„œ๋น„์Šค ๊ฐ„ mTLS ํ†ต์‹ ์„ ์œ„ํ•œ ์ธ์ฆ์„œ

Istio๋Š” ์„œ๋น„์Šค ๊ฐ„ ํ†ต์‹ ์„ ์•”ํ˜ธํ™”(mTLS)ํ•  ๋•Œ TLS ์ธ์ฆ์„œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
๊ฐ ์„œ๋น„์Šค๋Š” TLS ์ธ์ฆ์„œ๋ฅผ ๋ฐœ๊ธ‰๋ฐ›์•„ ์„œ๋กœ์˜ ์‹ ์›์„ ๊ฒ€์ฆํ•˜๊ณ  ์•”ํ˜ธํ™”๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

mTLS ์ธ์ฆ์„œ์˜ ์—ญํ• 

  • ์„œ๋น„์Šค ๊ฐ„ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ํ†ต์‹  ์ œ๊ณต
  • ๋„คํŠธ์›Œํฌ ๋‚ด์—์„œ ๋ฐ์ดํ„ฐ๊ฐ€ ์•”ํ˜ธํ™”๋˜์–ด ์ „์†ก๋จ
  • Zero Trust ํ™˜๊ฒฝ์—์„œ ์„œ๋น„์Šค ์ธ์ฆ ๊ฐ€๋Šฅ

โœ… 1.2 Istio์˜ ๊ธฐ๋ณธ ์ธ์ฆ์„œ ๊ด€๋ฆฌ ๋ฐฉ์‹

Istio๋Š” **Citadel(ํ˜„์žฌ๋Š” Istiod์—์„œ ์ œ๊ณต๋จ)**์„ ์‚ฌ์šฉํ•˜์—ฌ ์ž๋™์œผ๋กœ ์ธ์ฆ์„œ๋ฅผ ์ƒ์„ฑ ๋ฐ ๊ฐฑ์‹ ํ•ฉ๋‹ˆ๋‹ค.

Istio์˜ ์ž๋™ ์ธ์ฆ์„œ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ

  • ์„œ๋น„์Šค ๊ฐ„ TLS ์ธ์ฆ์„œ ์ž๋™ ๋ฐœ๊ธ‰ ๋ฐ ๊ฐฑ์‹ 
  • CSR(Certificate Signing Request) ์ž๋™ ์ฒ˜๋ฆฌ
  • ์ธ์ฆ์„œ ๋งŒ๋ฃŒ ์ „์— ์ž๋™ ๊ฐฑ์‹ 

๐Ÿ’ก Istio์˜ ๊ธฐ๋ณธ ์„ค์ •์—์„œ๋Š” ์ž๋™ ์ธ์ฆ์„œ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ์ด ํ™œ์„ฑํ™”๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.


๐Ÿ”น 2. Istio์˜ ์ž๋™ ์ธ์ฆ์„œ ๊ด€๋ฆฌ

โœ… 2.1 ์ธ์ฆ์„œ ์ž๋™ ๋ฐœ๊ธ‰ ๋ฐ ํ™•์ธ

Istio๋ฅผ ์„ค์น˜ํ•˜๋ฉด, ๊ฐ ์„œ๋น„์Šค๋Š” ์ž๋™์œผ๋กœ TLS ์ธ์ฆ์„œ๋ฅผ ๋ฐœ๊ธ‰๋ฐ›์•„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
์„œ๋น„์Šค ๊ฐ„ mTLS๋ฅผ ํ™œ์„ฑํ™”ํ•˜๋ฉด, Istio๊ฐ€ ์ธ์ฆ์„œ๋ฅผ ๊ด€๋ฆฌํ•˜๋ฉด์„œ ์ž๋™์œผ๋กœ ์•”ํ˜ธํ™”๋œ ํ†ต์‹ ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์„œ๋น„์Šค์˜ ์ž๋™ TLS ์ธ์ฆ์„œ ํ™•์ธ ๋ฐฉ๋ฒ•

kubectl exec -it <pod-name> -n <namespace> -- openssl s_client -showcerts -connect <service-name>:443

์ด ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋ฉด, ์„œ๋น„์Šค๊ฐ€ ์‚ฌ์šฉ ์ค‘์ธ TLS ์ธ์ฆ์„œ ์ •๋ณด๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ’ก ๊ธฐ๋ณธ์ ์œผ๋กœ Istio๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ ์ž๋™ ์ธ์ฆ์„œ๋ฅผ ์ƒ์„ฑํ•˜๋ฏ€๋กœ, ์ถ”๊ฐ€ ์„ค์ • ์—†์ด mTLS๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๐Ÿ”น 3. ์‚ฌ์šฉ์ž ์ •์˜ ์ธ์ฆ์„œ ์ ์šฉ (์ˆ˜๋™ ์„ค์ •)

โœ… 3.1 ์ธ์ฆ์„œ๋ฅผ ์ˆ˜๋™์œผ๋กœ ๋ฐœ๊ธ‰ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ

Istio์˜ ๊ธฐ๋ณธ ์ธ์ฆ์„œ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ ,
๊ธฐ์—… ๋‚ด๋ถ€์˜ ์ธ์ฆ์„œ(CA) ๋˜๋Š” Let's Encrypt์™€ ๊ฐ™์€ ๊ณต์ธ ์ธ์ฆ ๊ธฐ๊ด€์—์„œ ๋ฐœ๊ธ‰ํ•œ ์ธ์ฆ์„œ๋ฅผ ์ ์šฉํ•˜๋ ค๋Š” ๊ฒฝ์šฐ
์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ TLS ์ธ์ฆ์„œ๋ฅผ ๋ฐœ๊ธ‰ํ•˜๊ณ  Istio์— ๋“ฑ๋กํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


โœ… 3.2 ์‚ฌ์šฉ์ž ์ •์˜ ์ธ์ฆ์„œ ์ƒ์„ฑ ๋ฐ Secret ๋“ฑ๋ก

Istio์˜ Ingress Gateway์—์„œ HTTPS ํŠธ๋ž˜ํ”ฝ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ์ž ์ •์˜ TLS ์ธ์ฆ์„œ๋ฅผ ์ ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

โ‘  OpenSSL์„ ์‚ฌ์šฉํ•˜์—ฌ ์ธ์ฆ์„œ ์ƒ์„ฑ

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/CN=example.com"

โ‘ก ์ƒ์„ฑํ•œ ์ธ์ฆ์„œ๋ฅผ Kubernetes Secret์œผ๋กœ ์ €์žฅ

kubectl create -n istio-system secret tls my-custom-tls-secret --key=tls.key --cert=tls.crt

๐Ÿ’ก my-custom-tls-secret์ด๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ Secret์„ ์ƒ์„ฑํ•˜๋ฉฐ, Istio Gateway์—์„œ ์ด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


โœ… 3.3 Ingress Gateway์—์„œ ์‚ฌ์šฉ์ž ์ธ์ฆ์„œ ์ ์šฉ

์œ„์—์„œ ์ƒ์„ฑํ•œ TLS ์ธ์ฆ์„œ๋ฅผ Istio Gateway์—์„œ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: my-secure-gateway
spec:
  selector:
    istio: ingressgateway
  servers:
    - port:
        number: 443
        name: https
        protocol: HTTPS
      tls:
        mode: SIMPLE
        credentialName: my-custom-tls-secret  # ์‚ฌ์šฉ์ž ์ •์˜ ์ธ์ฆ์„œ ์ ์šฉ
      hosts:
        - "example.com"

์„ค๋ช…:

  • tls.mode: SIMPLE → HTTPS ํ™œ์„ฑํ™”
  • credentialName: my-custom-tls-secret → ์œ„์—์„œ ์ƒ์„ฑํ•œ Secret ์‚ฌ์šฉ
  • hosts: "example.com" → ํ•ด๋‹น ๋„๋ฉ”์ธ์—์„œ๋งŒ HTTPS ์ ์šฉ

๐Ÿ’ก ์ด ์„ค์ •์„ ์ ์šฉํ•˜๋ฉด, example.com์—์„œ HTTPS ์š”์ฒญ์„ ๋ฐ›์„ ๋•Œ ์‚ฌ์šฉ์ž๊ฐ€ ์ƒ์„ฑํ•œ ์ธ์ฆ์„œ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.


๐Ÿ”น 4. ์ธ์ฆ์„œ ๊ฐฑ์‹  ๋ฐ ๊ด€๋ฆฌ

โœ… 4.1 Istio์˜ ์ž๋™ ์ธ์ฆ์„œ ๊ฐฑ์‹  ๊ธฐ๋Šฅ

Istio์˜ Citadel(Istiod)์€ ๊ธฐ๋ณธ์ ์œผ๋กœ TLS ์ธ์ฆ์„œ๋ฅผ ์ž๋™ ๊ฐฑ์‹ ํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋Ÿฌ๋‚˜ ์ˆ˜๋™์œผ๋กœ ์ƒ์„ฑํ•œ ์ธ์ฆ์„œ๋Š” ์ž๋™ ๊ฐฑ์‹ ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ, ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ๊ด€๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ž๋™ ์ธ์ฆ์„œ ๊ฐฑ์‹ ์ด ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•˜๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•

kubectl get secret -n istio-system istio-ca-secret -o yaml

์ด ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋ฉด, ํ˜„์žฌ ์‚ฌ์šฉ ์ค‘์ธ ์ธ์ฆ์„œ ์ •๋ณด๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


โœ… 4.2 ์‚ฌ์šฉ์ž ์ธ์ฆ์„œ ๊ฐฑ์‹  ๋ฐฉ๋ฒ•

์ˆ˜๋™์œผ๋กœ ๋“ฑ๋กํ•œ ์ธ์ฆ์„œ๊ฐ€ ๋งŒ๋ฃŒ๋˜๋ฉด ์ƒˆ๋กœ์šด ์ธ์ฆ์„œ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๊ธฐ์กด Secret์„ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

โ‘  ์ƒˆ๋กœ์šด ์ธ์ฆ์„œ ์ƒ์„ฑ

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout new-tls.key -out new-tls.crt -subj "/CN=example.com"

โ‘ก ๊ธฐ์กด Secret ์—…๋ฐ์ดํŠธ

kubectl create -n istio-system secret tls my-custom-tls-secret --key=new-tls.key --cert=new-tls.crt --dry-run=client -o yaml | kubectl apply -f -

๐Ÿ’ก Secret์„ ์—…๋ฐ์ดํŠธํ•˜๋ฉด Istio๊ฐ€ ์ž๋™์œผ๋กœ ์ƒˆ ์ธ์ฆ์„œ๋ฅผ ๋กœ๋“œํ•˜์—ฌ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ“Œ ๊ฒฐ๋ก 

  • Istio๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ž๋™์œผ๋กœ TLS ์ธ์ฆ์„œ๋ฅผ ๋ฐœ๊ธ‰ํ•˜๊ณ  ๊ฐฑ์‹ ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • ๊ธฐ๋ณธ ์„ค์ •์„ ์œ ์ง€ํ•˜๋ฉด, ๋ชจ๋“  ์„œ๋น„์Šค ๊ฐ„ ํ†ต์‹ ์ด ์ž๋™์œผ๋กœ mTLS๋กœ ์•”ํ˜ธํ™”๋ฉ๋‹ˆ๋‹ค.
  • ์ˆ˜๋™ ์ธ์ฆ์„œ๋ฅผ ์ ์šฉํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ, OpenSSL์„ ์‚ฌ์šฉํ•˜์—ฌ ์ง์ ‘ ์ƒ์„ฑ ํ›„ Kubernetes Secret์œผ๋กœ ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Ingress Gateway์—์„œ ์‚ฌ์šฉ์ž ์ •์˜ ์ธ์ฆ์„œ๋ฅผ ์ ์šฉํ•˜์—ฌ HTTPS ํŠธ๋ž˜ํ”ฝ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Istio์˜ ์ž๋™ ์ธ์ฆ์„œ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•˜๋ฉด ์šด์˜ ๋ถ€๋‹ด์„ ์ค„์ผ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ˆ˜๋™ ์ธ์ฆ์„œ๋Š” ์ฃผ๊ธฐ์ ์œผ๋กœ ๊ฐฑ์‹ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

728x90