๐น ๊ฐ์
์ด๋ฒ ๊ธ์์๋ 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์ ์๋ ์ธ์ฆ์ ๊ด๋ฆฌ ๊ธฐ๋ฅ์ ํ์ฉํ๋ฉด ์ด์ ๋ถ๋ด์ ์ค์ผ ์ ์์ผ๋ฉฐ, ์๋ ์ธ์ฆ์๋ ์ฃผ๊ธฐ์ ์ผ๋ก ๊ฐฑ์ ํด์ผ ํฉ๋๋ค.