Kubernetes Tools/Istio

[Istio ๊ฐ€์ด๋“œ ep.40] 6๋ถ€ ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ… #5 | Istio์™€ Kubernetes ๋„คํŠธ์›Œํฌ ์ •์ฑ… ์ถฉ๋Œ ๋ฌธ์ œ ํ•ด๊ฒฐ

ygtoken 2025. 3. 18. 12:12
728x90

๐Ÿ”น ๊ฐœ์š”

์ด๋ฒˆ ๊ธ€์—์„œ๋Š” 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์˜ ํŠธ๋ž˜ํ”ฝ ํ๋ฆ„์„ ๊ณ ๋ คํ•˜์—ฌ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.
728x90