๐น ๊ฐ์
์ด๋ฒ ๊ธ์์๋ Istio์ Kubernetes ๋คํธ์ํฌ ์ ์ฑ
(NetworkPolicy) ๊ฐ์ ์ถฉ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
Istio๋ ์๋น์ค ๋ฉ์ ๋ ์ด์ด์์ ํธ๋ํฝ์ ์ ์ดํ์ง๋ง, Kubernetes ์์ฒด ๋คํธ์ํฌ ์ ์ฑ
๊ณผ ์ถฉ๋ํ ๊ฒฝ์ฐ ์๊ธฐ์น ์์ ๋คํธ์ํฌ ์ฐจ๋จ, ์ ์ ๋ถ๊ฐ, ๋ผ์ฐํ
์ค๋ฅ ๋ฑ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
์ด ๊ธ์์๋ Istio์ Kubernetes ๋คํธ์ํฌ ์ ์ฑ ์ด ์ถฉ๋ํ๋ ์ฃผ์ ์์ธ, ๋๋ฒ๊น ๋ฐฉ๋ฒ ๋ฐ ํด๊ฒฐ์ฑ ์ ์ค๋ช ํ๊ฒ ์ต๋๋ค.
๐น 1. Istio์ Kubernetes ๋คํธ์ํฌ ์ ์ฑ ์ถฉ๋์ ์ฃผ์ ์์ธ
๋ฌธ์ ์ ํ | ์ค๋ช |
Pod ๊ฐ ํต์ ์ฐจ๋จ | Kubernetes ๋คํธ์ํฌ ์ ์ฑ ์ด Istio์ ํธ๋ํฝ ํ๋ฆ์ ์ฐจ๋จ |
Ingress ๋ฐ Egress ํธ๋ํฝ ์ ํ ๋ฌธ์ | Istio Ingress/Egress Gateway๊ฐ Kubernetes ๋คํธ์ํฌ ์ ์ฑ ์ผ๋ก ์ธํด ์ฐจ๋จ |
Envoy Proxy๊ฐ ๋คํธ์ํฌ ์ ์ฑ ์ ์ฉ์ ์ฐํ | Istio์ Sidecar Proxy(Envoy)๊ฐ ๋คํธ์ํฌ ์ ์ฑ ์ ์ฐํํ์ฌ ์ ์ฉ๋์ง ์๋ ๋ฌธ์ |
TLS ์ธ์ฆ ๋ฌธ์ | Istio์ mTLS์ Kubernetes ๋คํธ์ํฌ ์ ์ฑ ์ด ์ถฉ๋ํ์ฌ ์ธ์ฆ ์คํจ |
๐ก Istio์ Kubernetes ๋คํธ์ํฌ ์ ์ฑ ์ ํจ๊ป ์ฌ์ฉํ ๊ฒฝ์ฐ, ๊ฐ ์ ์ฑ ์ ๋์์ ๋ช ํํ๊ฒ ์ดํดํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
๐น 2. ๋คํธ์ํฌ ์ ์ฑ ์ถฉ๋ ๋ฌธ์ ๋๋ฒ๊น ๋ฐฉ๋ฒ
โ 2.1 ํ์ฌ ์ ์ฉ๋ Kubernetes ๋คํธ์ํฌ ์ ์ฑ ํ์ธ
๋คํธ์ํฌ ์ ์ฑ ์ด Pod ๊ฐ ํต์ ์ ์ฐจ๋จํ๊ณ ์๋์ง ํ์ธํ๋ ค๋ฉด ๋ค์ ๋ช ๋ น์ด๋ฅผ ์คํํฉ๋๋ค.
kubectl get networkpolicy -n default
์ถ๋ ฅ ์์ :
NAME POD-SELECTOR AGE
deny-all <none> 10m
allow-http app=frontend 5m
๋คํธ์ํฌ ์ ์ฑ ์ ์์ธ ๋ด์ฉ์ ํ์ธํ๋ ค๋ฉด ๋ค์ ๋ช ๋ น์ด๋ฅผ ์คํํฉ๋๋ค.
kubectl describe networkpolicy deny-all -n default
์ถ๋ ฅ ์์ :
Name: deny-all
Namespace: default
PodSelector: <none> (Allowing the specified traffic to all pods in this namespace)
PolicyTypes: Ingress, Egress
๐ก PodSelector: <none>์ ๋ชจ๋ Pod์ด ๋คํธ์ํฌ ์ ์ฑ ์ ์ํฅ์ ๋ฐ์์ ์๋ฏธํฉ๋๋ค.
โ 2.2 Istio Proxy์ ๋คํธ์ํฌ ํ๋ฆ ํ์ธ
Istio Proxy๊ฐ ํธ๋ํฝ์ ์ฐจ๋จํ๋์ง ํ์ธํ๋ ค๋ฉด ๋ค์ ๋ช ๋ น์ด๋ฅผ ์คํํฉ๋๋ค.
istioctl proxy-config endpoints <pod-name> -n default
์ถ๋ ฅ ์์ :
ENDPOINT STATUS
10.42.1.100 HEALTHY
10.42.1.101 UNHEALTHY
๐ก ๋คํธ์ํฌ ์ ์ฑ ์ผ๋ก ์ธํด ์ผ๋ถ ์๋ํฌ์ธํธ๊ฐ UNHEALTHY ์ํ๊ฐ ๋ ์ ์์ต๋๋ค.
โ 2.3 Istio Ingress ๋ฐ Egress Gateway ๋ฌธ์ ํ์ธ
Ingress ๋ฐ Egress ํธ๋ํฝ์ด ์ฐจ๋จ๋๋ ๊ฒฝ์ฐ, Istio Gateway ์ค์ ์ ์ ๊ฒํด์ผ ํฉ๋๋ค.
kubectl get gateway -n istio-system
์ถ๋ ฅ ์์ :
NAME AGE
istio-ingress 20m
istio-egress 20m
Gateway์ ์ํ๋ฅผ ํ์ธํ๋ ค๋ฉด ๋ค์ ๋ช ๋ น์ด๋ฅผ ์คํํฉ๋๋ค.
kubectl describe gateway istio-ingress -n istio-system
์ถ๋ ฅ ์์ :
Selector: istio=ingressgateway
๐ก ๋คํธ์ํฌ ์ ์ฑ ์ด Ingress/Egress Gateway์ ํธ๋ํฝ์ ์ฐจ๋จํ๊ณ ์๋์ง ํ์ธํด์ผ ํฉ๋๋ค.
๐น 3. ๋คํธ์ํฌ ์ ์ฑ ์ถฉ๋ ํด๊ฒฐ ๋ฐฉ๋ฒ
โ 3.1 Pod ๊ฐ ํต์ ์ด ์ฐจ๋จ๋ ๊ฒฝ์ฐ ํด๊ฒฐ ๋ฐฉ๋ฒ
๐ ๏ธ ํด๊ฒฐ ๋ฐฉ๋ฒ:
- Istio๊ฐ ์ ์ฉ๋ ๋ค์์คํ์ด์ค์์ Pod ๊ฐ ํธ๋ํฝ์ ํ์ฉํ๋ ๋คํธ์ํฌ ์ ์ฑ ์ถ๊ฐ
๋คํธ์ํฌ ์ ์ฑ ์์ (Pod ๊ฐ ํต์ ํ์ฉ)
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-istio-traffic
namespace: default
spec:
podSelector: {} # ๋ชจ๋ Pod์ ์ ์ฉ
policyTypes:
- Ingress
- Egress
ingress:
- from:
- namespaceSelector: {} # ๊ฐ์ ๋ค์์คํ์ด์ค ๋ด ๋ชจ๋ Pod์์์ ํธ๋ํฝ ํ์ฉ
egress:
- to:
- namespaceSelector: {} # ๋ชจ๋ ๋ค์์คํ์ด์ค๋ก์ ํธ๋ํฝ ํ์ฉ
๐ก Pod ๊ฐ ํต์ ์ ํ์ฉํ๋ฉด Istio์ Sidecar Proxy๊ฐ ์ ์์ ์ผ๋ก ์๋ํ ์ ์์ต๋๋ค.
โ 3.2 Istio Ingress/Egress Gateway๊ฐ ์ฐจ๋จ๋ ๊ฒฝ์ฐ ํด๊ฒฐ ๋ฐฉ๋ฒ
๐ ๏ธ ํด๊ฒฐ ๋ฐฉ๋ฒ:
- Ingress ๋ฐ Egress Gateway์ ๋คํธ์ํฌ ์ ์ฑ ์ ์์ ํ์ฌ ํธ๋ํฝ ํ์ฉ
๋คํธ์ํฌ ์ ์ฑ ์์ (Ingress ๋ฐ Egress Gateway ํ์ฉ)
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-ingress-egress
namespace: istio-system
spec:
podSelector:
matchLabels:
istio: ingressgateway # Istio Ingress Gateway ์ ํ
policyTypes:
- Ingress
- Egress
ingress:
- from:
- namespaceSelector: {} # ๋ชจ๋ ๋ค์์คํ์ด์ค์์์ ํธ๋ํฝ ํ์ฉ
egress:
- to:
- namespaceSelector: {} # ๋ชจ๋ ๋ค์์คํ์ด์ค๋ก์ ํธ๋ํฝ ํ์ฉ
๐ก Istio Gateway์ ํธ๋ํฝ์ ์ฐจ๋จํ์ง ์๋๋ก ๋คํธ์ํฌ ์ ์ฑ ์ ์ค์ ํด์ผ ํฉ๋๋ค.
โ 3.3 TLS ์ธ์ฆ ๋ฌธ์ ํด๊ฒฐ (mTLS์ ๋คํธ์ํฌ ์ ์ฑ ์ถฉ๋ ์)
๐ ๏ธ ํด๊ฒฐ ๋ฐฉ๋ฒ:
- PeerAuthentication์ PERMISSIVE ๋ชจ๋๋ก ๋ณ๊ฒฝํ์ฌ mTLS์ ์ผ๋ฐ HTTP ํธ๋ํฝ์ ๋ชจ๋ ํ์ฉ
PeerAuthentication ์ค์ ์์
apiVersion: security.istio.io/v1beta1
kind: PeerAuthentication
metadata:
name: default
namespace: istio-system
spec:
mtls:
mode: PERMISSIVE # mTLS๋ฅผ ๊ฐ์ ์ ์ฉํ์ง ์๊ณ ํด๋ผ์ด์ธํธ์ ์ ํ์ ๋ฐ๋ฆ
๐ก mTLS๋ฅผ ๊ฐ์ ์ ์ฉํ๋ฉด, Kubernetes ๋คํธ์ํฌ ์ ์ฑ ๊ณผ ์ถฉ๋ํ ์ ์์ผ๋ฏ๋ก ํ์์ ๋ฐ๋ผ PERMISSIVE๋ก ์ค์ ํด์ผ ํฉ๋๋ค.
๐ ๊ฒฐ๋ก
- Istio์ Kubernetes ๋คํธ์ํฌ ์ ์ฑ ์ด ์ถฉ๋ํ๋ฉด ์๋น์ค ๊ฐ ํธ๋ํฝ์ด ์ฐจ๋จ๋ ์ ์์ต๋๋ค.
- Pod ๊ฐ ํต์ ์ด ์ฐจ๋จ๋ ๊ฒฝ์ฐ, ๋คํธ์ํฌ ์ ์ฑ ์ ์์ ํ์ฌ Istio ํธ๋ํฝ์ ํ์ฉํด์ผ ํฉ๋๋ค.
- Ingress ๋ฐ Egress Gateway๊ฐ ์ฐจ๋จ๋ ๊ฒฝ์ฐ, ๋คํธ์ํฌ ์ ์ฑ ์์ ํธ๋ํฝ์ ํ์ฉํด์ผ ํฉ๋๋ค.
- mTLS๊ฐ ํ์ฑํ๋ ๊ฒฝ์ฐ, Kubernetes ๋คํธ์ํฌ ์ ์ฑ ๊ณผ์ ์ถฉ๋์ ๋ฐฉ์งํ๊ธฐ ์ํด PeerAuthentication ์ค์ ์ ์ ๊ฒํด์ผ ํฉ๋๋ค.
- ๋คํธ์ํฌ ์ ์ฑ ์ ์ ์ฉํ ๋, Istio์ ํธ๋ํฝ ํ๋ฆ์ ๊ณ ๋ คํ์ฌ ์ค์ ํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.