[Istio ๊ฐ์ด๋ ep.38] 6๋ถ ํธ๋ฌ๋ธ์ํ #3 | mTLS ์ธ์ฆ ์คํจ ๋ฌธ์ ํด๊ฒฐ
๐น ๊ฐ์
์ด๋ฒ ๊ธ์์๋ Istio์์ ๋ฐ์ํ๋ mTLS(Mutual TLS) ์ธ์ฆ ์คํจ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
Istio๋ ์๋น์ค ๊ฐ ํธ๋ํฝ์ ๋ณดํธํ๊ธฐ ์ํด mTLS๋ฅผ ํ์ฉํ์ฌ ๋ณด์ ํต์ ์ ์ํํ์ง๋ง,
์๋ชป๋ ์ค์ ์ผ๋ก ์ธํด ์๋น์ค ๊ฐ ์ธ์ฆ ์คํจ, ์ฐ๊ฒฐ ๊ฑฐ๋ถ, 503 ์ค๋ฅ ๋ฑ์ด ๋ฐ์ํ ์ ์์ต๋๋ค.
์ด ๊ธ์์๋ mTLS ์ธ์ฆ ์คํจ์ ์ฃผ์ ์์ธ, ๋๋ฒ๊น ๋ฐฉ๋ฒ ๋ฐ ํด๊ฒฐ์ฑ ์ ์ค๋ช ํ๊ฒ ์ต๋๋ค.
๐น 1. mTLS ์ธ์ฆ ์คํจ์ ์ฃผ์ ์์ธ
์ค๋ฅ ์ ํ | ์ค๋ช |
503 ์ค๋ฅ (Service Unavailable) | ์ธ์ฆ ์คํจ๋ก ์ธํด Envoy Proxy๊ฐ ์์ฒญ์ ๊ฑฐ๋ถํ๋ ๊ฒฝ์ฐ |
TLS handshake ์คํจ | ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ TLS ํธ๋์ ฐ์ดํฌ๊ฐ ์ด๋ฃจ์ด์ง์ง ์๋ ๊ฒฝ์ฐ |
Peer ์ธ์ฆ ์คํจ | ์ธ์ฆ์๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์ค์ ๋์ง ์์ ๊ฒฝ์ฐ |
์๋ mTLS ์ค์ ๋ถ์ผ์น | ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ ๋ณด์ ์ ์ฑ ์ด ๋ค๋ฅผ ๊ฒฝ์ฐ ๋ฐ์ |
๐ก Istio์ ์ธ์ฆ ์ ์ฑ ์ด ์ฌ๋ฐ๋ฅด๊ฒ ์ค์ ๋์๋์ง ํ์ธํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
๐น 2. mTLS ์ธ์ฆ ์คํจ ๋๋ฒ๊น ๋ฐฉ๋ฒ
โ 2.1 ํ์ฌ mTLS ์ค์ ํ์ธ (PeerAuthentication ์กฐํ)
Istio์์ ์ ์ฉ๋ mTLS ์ ์ฑ ์ ํ์ธํ๋ ค๋ฉด ๋ค์ ๋ช ๋ น์ด๋ฅผ ์คํํฉ๋๋ค.
kubectl get peerauthentication -n istio-system
์ถ๋ ฅ ์์ :
NAME MODE AGE
default STRICT 20m
๐ก STRICT ๋ชจ๋์ผ ๊ฒฝ์ฐ, ๋ชจ๋ ์๋น์ค ๊ฐ ํธ๋ํฝ์ด mTLS๋ฅผ ํตํด ๋ณดํธ๋์ด์ผ ํฉ๋๋ค.
โ 2.2 Envoy Proxy ๋ก๊ทธ ํ์ธ (mTLS ์ธ์ฆ ๋ฌธ์ ๋ถ์)
mTLS ์ธ์ฆ ์คํจ๊ฐ ๋ฐ์ํ๋ฉด Envoy Proxy ๋ก๊ทธ๋ฅผ ํ์ธํ์ฌ ์์ธ์ ํ์ ํ ์ ์์ต๋๋ค.
kubectl logs <pod-name> -c istio-proxy -n default | grep "TLS"
์ถ๋ ฅ ์์ :
[2024-03-18T12:30:00.123Z] TLS error: 336134278: SSL routines:SSL3_READ_BYTES:tlsv1 alert unknown ca
๐ก "unknown ca" ์ค๋ฅ๋ ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ์ CA ์ธ์ฆ์๊ฐ ์ผ์นํ์ง ์์์ ์๋ฏธํฉ๋๋ค.
โ 2.3 ๋์ ์๋น์ค์ ์ธ์ฆ ์ ์ฑ ํ์ธ (DestinationRule ์กฐํ)
DestinationRule์์ mTLS๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์ค์ ๋์๋์ง ํ์ธํด์ผ ํฉ๋๋ค.
kubectl get destinationrule my-service -n default -o yaml
์ถ๋ ฅ ์์ :
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: my-service
namespace: default
spec:
host: my-service.default.svc.cluster.local
trafficPolicy:
tls:
mode: ISTIO_MUTUAL # mTLS๋ฅผ ์ฌ์ฉํ์ฌ ํต์
๐ก mode: ISTIO_MUTUAL ์ค์ ์ด ๋น ์ ธ ์์ผ๋ฉด mTLS๊ฐ ์ ์ฉ๋์ง ์์ ์ ์์ต๋๋ค.
โ 2.4 ์๋น์ค ๊ฐ ํต์ ์ํ ํ์ธ
mTLS ์ธ์ฆ ์คํจ ์ ์๋น์ค ๊ฐ ํต์ ์ด ์ฐจ๋จ๋ ์ ์์ผ๋ฏ๋ก, ๋คํธ์ํฌ ์ฐ๊ฒฐ ์ํ๋ฅผ ์ ๊ฒํด์ผ ํฉ๋๋ค.
kubectl exec -it -n default -- curl -v https://my-service.default.svc.cluster.local:443
์ถ๋ ฅ ์์ :
* SSL certificate problem: unable to get local issuer certificate
๐ก "SSL certificate problem" ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด, ์ธ์ฆ์ ์ค์ ์ ์ ๊ฒํด์ผ ํฉ๋๋ค.
๐น 3. mTLS ์ธ์ฆ ์คํจ ํธ๋ฌ๋ธ์ํ ์ค์ ์์
โ 3.1 503 ์ค๋ฅ (Service Unavailable) ํด๊ฒฐ
๐ ๏ธ ํด๊ฒฐ ๋ฐฉ๋ฒ:
- DestinationRule ๋ฐ PeerAuthentication ์ค์ ์ด ์ฌ๋ฐ๋ฅธ์ง ํ์ธ
์ฌ๋ฐ๋ฅธ DestinationRule ์ค์
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: my-service-dr
namespace: default
spec:
host: my-service.default.svc.cluster.local
trafficPolicy:
tls:
mode: ISTIO_MUTUAL # mTLS ํ์ฑํ
์ฌ๋ฐ๋ฅธ PeerAuthentication ์ค์
apiVersion: security.istio.io/v1beta1
kind: PeerAuthentication
metadata:
name: default
namespace: istio-system
spec:
mtls:
mode: STRICT # mTLS๋ฅผ ๊ฐ์ ์ ์ฉ
๐ก PeerAuthentication์ด STRICT ๋ชจ๋์ผ ๊ฒฝ์ฐ, ๋ชจ๋ ์๋น์ค๊ฐ mTLS๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
โ 3.2 TLS Handshake ์คํจ ํด๊ฒฐ
๐ ๏ธ ํด๊ฒฐ ๋ฐฉ๋ฒ:
- ํด๋ผ์ด์ธํธ์ ์๋ฒ์ ์ธ์ฆ์๊ฐ ์ผ์นํ๋์ง ํ์ธ
ํด๋ผ์ด์ธํธ ์ธก DestinationRule ์ค์
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: client-dr
namespace: default
spec:
host: my-service.default.svc.cluster.local
trafficPolicy:
tls:
mode: ISTIO_MUTUAL # ํด๋ผ์ด์ธํธ๋ mTLS ์ฌ์ฉ
๐ก ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ ๋ชจ๋ ISTIO_MUTUAL์ ์ค์ ํด์ผ ์ ์์ ์ธ mTLS ํต์ ์ด ๊ฐ๋ฅํฉ๋๋ค.
โ 3.3 ์๋ mTLS ์ค์ ์ถฉ๋ ํด๊ฒฐ
๐ ๏ธ ํด๊ฒฐ ๋ฐฉ๋ฒ:
- Istio์ autoMTLS ์ค์ ์ ํ์ธํ๊ณ , ๋ถํ์ํ ์๋ ์ค์ ์ ์ ๊ฑฐ
kubectl get meshconfig -n istio-system -o yaml | grep autoMTLS
์ถ๋ ฅ ์์ :
autoMTLS: enabled
์๋ ์ค์ ์ ์ ๊ฑฐํ๊ณ ์๋ mTLS ์ ์ฉ
apiVersion: security.istio.io/v1beta1
kind: PeerAuthentication
metadata:
name: default
namespace: istio-system
spec:
mtls:
mode: PERMISSIVE # ์๋ mTLS ํ์ฑํ
๐ก PERMISSIVE ๋ชจ๋๋ mTLS์ ์ผ๋ฐ HTTP ํธ๋ํฝ์ ๋ชจ๋ ํ์ฉํ๋ ์ค์ ์ ๋๋ค.
๐ ๊ฒฐ๋ก
- Istio์ mTLS ์ธ์ฆ ์คํจ๋ PeerAuthentication, DestinationRule ๋ฐ ์ธ์ฆ์ ์ค์ ์ ์ ๊ฒํด์ผ ํฉ๋๋ค.
- 503 ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด DestinationRule ๋ฐ PeerAuthentication ์ค์ ์ ํ์ธํด์ผ ํฉ๋๋ค.
- TLS Handshake ์คํจ๊ฐ ๋ฐ์ํ๋ฉด ํด๋ผ์ด์ธํธ์ ์๋ฒ์ ์ธ์ฆ์๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์ค์ ๋์๋์ง ํ์ธํด์ผ ํฉ๋๋ค.
- Istio์ autoMTLS ์ค์ ์ ํ์ธํ์ฌ ๋ถํ์ํ ์ถฉ๋์ ๋ฐฉ์งํ ์ ์์ต๋๋ค.