๋ณด์•ˆ ์ „๋ฌธ๊ฐ€๋ฅผ ์œ„ํ•œ Kubernetes ๋„คํŠธ์›Œํฌ ์ •์ฑ… ์†Œ๊ฐœ

๋ณด์•ˆ ์ „๋ฌธ๊ฐ€๋ฅผ ์œ„ํ•œ Kubernetes ๋„คํŠธ์›Œํฌ ์ •์ฑ… ์†Œ๊ฐœ

๋ฉ”๋ชจ. ๋ฒˆ์—ญ: ๊ธฐ์‚ฌ์˜ ์ €์ž์ธ Reuven Harrison์€ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ ๋ถ„์•ผ์—์„œ 20๋…„ ์ด์ƒ์˜ ๊ฒฝ๋ ฅ์„ ๊ฐ–๊ณ  ์žˆ์œผ๋ฉฐ, ํ˜„์žฌ๋Š” ๋ณด์•ˆ ์ •์ฑ… ๊ด€๋ฆฌ ์†”๋ฃจ์…˜์„ ๋งŒ๋“œ๋Š” ํšŒ์‚ฌ์ธ Tufin์˜ CTO์ด์ž ๊ณต๋™ ์ฐฝ์—…์ž์ž…๋‹ˆ๋‹ค. ๊ทธ๋Š” Kubernetes ๋„คํŠธ์›Œํฌ ์ •์ฑ…์„ ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋„คํŠธ์›Œํฌ ๋ถ„ํ• ์„ ์œ„ํ•œ ์ƒ๋‹นํžˆ ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ๋กœ ๋ณด๊ณ  ์žˆ์ง€๋งŒ ์‹ค์ œ๋กœ ๊ตฌํ˜„ํ•˜๊ธฐ๊ฐ€ ์‰ฝ์ง€ ์•Š๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด ์ž๋ฃŒ(์ƒ๋‹นํžˆ ๋ฐฉ๋Œ€ํ•จ)๋Š” ์ „๋ฌธ๊ฐ€์˜ ์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ์ธ์‹์„ ๋†’์ด๊ณ  ํ•„์š”ํ•œ ๊ตฌ์„ฑ์„ ๋งŒ๋“œ๋Š” ๋ฐ ๋„์›€์„ ์ฃผ๊ธฐ ์œ„ํ•ด ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์˜ค๋Š˜๋‚  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰์„ ์œ„ํ•ด Kubernetes๋ฅผ ์„ ํƒํ•˜๋Š” ๊ธฐ์—…์ด ์ ์  ๋Š˜์–ด๋‚˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์†Œํ”„ํŠธ์›จ์–ด์— ๋Œ€ํ•œ ๊ด€์‹ฌ์ด ๋„ˆ๋ฌด ๋†’์•„์„œ ์ผ๋ถ€์—์„œ๋Š” Kubernetes๋ฅผ "๋ฐ์ดํ„ฐ ์„ผํ„ฐ๋ฅผ ์œ„ํ•œ ์ƒˆ๋กœ์šด ์šด์˜ ์ฒด์ œ"๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค. ์ ์ฐจ์ ์œผ๋กœ Kubernetes(๋˜๋Š” k8s)๋Š” ๋„คํŠธ์›Œํฌ ๋ณด์•ˆ์„ ํฌํ•จํ•˜์—ฌ ์„ฑ์ˆ™ํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ํ”„๋กœ์„ธ์Šค์˜ ๊ตฌ์„ฑ์ด ํ•„์š”ํ•œ ๋น„์ฆˆ๋‹ˆ์Šค์˜ ์ค‘์š”ํ•œ ๋ถ€๋ถ„์œผ๋กœ ์ธ์‹๋˜๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.

Kubernetes ์ž‘์—…์— ์–ด๋ฆฌ๋‘ฅ์ ˆํ•ดํ•˜๋Š” ๋ณด์•ˆ ์ „๋ฌธ๊ฐ€์—๊ฒŒ ์ง„์งœ ๊นจ๋‹ฌ์Œ์€ ํ”Œ๋žซํผ์˜ ๊ธฐ๋ณธ ์ •์ฑ…์ธ ๋ชจ๋“  ๊ฒƒ์„ ํ—ˆ์šฉํ•˜๋Š” ๊ฒƒ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๊ฐ€์ด๋“œ๋Š” ๋„คํŠธ์›Œํฌ ์ •์ฑ…์˜ ๋‚ด๋ถ€ ๊ตฌ์กฐ๋ฅผ ์ดํ•ดํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜ ๋ฐฉํ™”๋ฒฝ ๊ทœ์น™๊ณผ ์–ด๋–ป๊ฒŒ ๋‹ค๋ฅธ์ง€ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ๋ช‡ ๊ฐ€์ง€ ํ•จ์ •์„ ๋‹ค๋ฃจ๊ณ  Kubernetes์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ณดํ˜ธํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๋Š” ๊ถŒ์žฅ ์‚ฌํ•ญ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

Kubernetes ๋„คํŠธ์›Œํฌ ์ •์ฑ…

Kubernetes ๋„คํŠธ์›Œํฌ ์ •์ฑ… ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์‚ฌ์šฉํ•˜๋ฉด ๋„คํŠธ์›Œํฌ ๊ณ„์ธต(OSI ๋ชจ๋ธ์˜ ์„ธ ๋ฒˆ์งธ ๊ณ„์ธต)์—์„œ ํ”Œ๋žซํผ์— ๋ฐฐํฌ๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ƒํ˜ธ ์ž‘์šฉ์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋„คํŠธ์›Œํฌ ์ •์ฑ…์—๋Š” OSI ๋ ˆ์ด์–ด 7 ์‹œํ–‰ ๋ฐ ์œ„ํ˜‘ ํƒ์ง€์™€ ๊ฐ™์€ ์ตœ์‹  ๋ฐฉํ™”๋ฒฝ์˜ ์ผ๋ถ€ ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ์ด ๋ถ€์กฑํ•˜์ง€๋งŒ ์ข‹์€ ์ถœ๋ฐœ์ ์ด ๋˜๋Š” ๊ธฐ๋ณธ ์ˆ˜์ค€์˜ ๋„คํŠธ์›Œํฌ ๋ณด์•ˆ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๋„คํŠธ์›Œํฌ ์ •์ฑ…์€ ํฌ๋“œ ๊ฐ„์˜ ํ†ต์‹ ์„ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค.

Kubernetes์˜ ์›Œํฌ๋กœ๋“œ๋Š” ํ•จ๊ป˜ ๋ฐฐํฌ๋œ ํ•˜๋‚˜ ์ด์ƒ์˜ ์ปจํ…Œ์ด๋„ˆ๋กœ ๊ตฌ์„ฑ๋œ ํฌ๋“œ์— ๋ถ„์‚ฐ๋ฉ๋‹ˆ๋‹ค. Kubernetes๋Š” ๊ฐ Pod์— ๋‹ค๋ฅธ Pod์—์„œ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š” IP ์ฃผ์†Œ๋ฅผ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค. Kubernetes ๋„คํŠธ์›Œํฌ ์ •์ฑ…์€ ํด๋ผ์šฐ๋“œ์˜ ๋ณด์•ˆ ๊ทธ๋ฃน์ด ๊ฐ€์ƒ ๋จธ์‹  ์ธ์Šคํ„ด์Šค์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ์ œ์–ดํ•˜๋Š” โ€‹โ€‹๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ํฌ๋“œ ๊ทธ๋ฃน์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

๋„คํŠธ์›Œํฌ ์ •์ฑ… ์ •์˜

๋‹ค๋ฅธ Kubernetes ๋ฆฌ์†Œ์Šค์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋„คํŠธ์›Œํฌ ์ •์ฑ…์€ YAML์— ์ง€์ •๋ฉ๋‹ˆ๋‹ค. ์•„๋ž˜ ์˜ˆ์—์„œ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด balance ์•ก์„ธ์Šค postgres:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default.postgres
  namespace: default
spec:
  podSelector:
    matchLabels:
      app: postgres
  ingress:
  - from:
    - podSelector:
        matchLabels:
          app: balance
  policyTypes:
  - Ingress

๋ณด์•ˆ ์ „๋ฌธ๊ฐ€๋ฅผ ์œ„ํ•œ Kubernetes ๋„คํŠธ์›Œํฌ ์ •์ฑ… ์†Œ๊ฐœ

(๋ฉ”๋ชจ. ๋ฒˆ์—ญ: ์ด ์Šคํฌ๋ฆฐ์ƒท์€ ์ดํ›„์˜ ๋ชจ๋“  ์œ ์‚ฌํ•œ ์Šคํฌ๋ฆฐ์ƒท๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๊ธฐ๋ณธ Kubernetes ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์›๋ณธ ๊ธฐ์‚ฌ ์ž‘์„ฑ์ž์˜ ํšŒ์‚ฌ์—์„œ ๊ฐœ๋ฐœํ–ˆ์œผ๋ฉฐ ์ž๋ฃŒ ๋์— ์–ธ๊ธ‰๋œ Tufin Orca ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.)

์ž์ฒด ๋„คํŠธ์›Œํฌ ์ •์ฑ…์„ ์ •์˜ํ•˜๋ ค๋ฉด YAML์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ์ง€์‹์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด ์–ธ์–ด๋Š” ๋“ค์—ฌ์“ฐ๊ธฐ(ํƒญ์ด ์•„๋‹Œ ๊ณต๋ฐฑ์œผ๋กœ ์ง€์ •)๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค. ๋“ค์—ฌ์“ฐ๊ธฐ๋œ ์š”์†Œ๋Š” ๊ทธ ์œ„์— ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๋“ค์—ฌ์“ฐ๊ธฐ๋œ ์š”์†Œ์— ์†ํ•ฉ๋‹ˆ๋‹ค. ์ƒˆ ๋ชฉ๋ก ์š”์†Œ๋Š” ํ•˜์ดํ”ˆ์œผ๋กœ ์‹œ์ž‘ํ•˜๊ณ  ๋‹ค๋ฅธ ๋ชจ๋“  ์š”์†Œ๋Š” ๋‹ค์Œ ํ˜•์‹์„ ๊ฐ–์Šต๋‹ˆ๋‹ค. ํ•ต์‹ฌ ๊ฐ€์น˜.

YAML์—์„œ ์ •์ฑ…์„ ์„ค๋ช…ํ•œ ํ›„ ๋‹ค์Œ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ฟ  ๋ฒ ํ‹€ํด๋Ÿฌ์Šคํ„ฐ์— ์ƒ์„ฑํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•˜์„ธ์š”.

kubectl create -f policy.yaml

๋„คํŠธ์›Œํฌ ์ •์ฑ… ์‚ฌ์–‘

Kubernetes ๋„คํŠธ์›Œํฌ ์ •์ฑ… ์‚ฌ์–‘์—๋Š” ๋‹ค์Œ ๋„ค ๊ฐ€์ง€ ์š”์†Œ๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

  1. podSelector: ์ด ์ •์ฑ…(๋Œ€์ƒ)์˜ ์˜ํ–ฅ์„ ๋ฐ›๋Š” ํฌ๋“œ๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. - ํ•„์ˆ˜์ž…๋‹ˆ๋‹ค.
  2. policyTypes: ์—ฌ๊ธฐ์— ํฌํ•จ๋œ ์ •์ฑ… ์œ ํ˜•์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์ˆ˜์‹  ๋ฐ/๋˜๋Š” ์†ก์‹  - ์„ ํƒ ์‚ฌํ•ญ์ด์ง€๋งŒ ๋ชจ๋“  ๊ฒฝ์šฐ์— ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.
  3. ingress: ํ—ˆ์šฉ ์ •์˜ ๋“ค์–ด์˜ค๋Š” ๋Œ€์ƒ ํฌ๋“œ์— ๋Œ€ํ•œ ํŠธ๋ž˜ํ”ฝ - ์„ ํƒ ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค.
  4. egress: ํ—ˆ์šฉ ์ •์˜ ๋‚˜๊ฐ€๋Š” ๋Œ€์ƒ Pod์˜ ํŠธ๋ž˜ํ”ฝ์€ ์„ ํƒ ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค.

Kubernetes ์›น์‚ฌ์ดํŠธ์—์„œ ๊ฐ€์ ธ์˜จ ์˜ˆ(์ €๋Š” role ์— app)๋Š” ๋„ค ๊ฐ€์ง€ ์š”์†Œ๊ฐ€ ๋ชจ๋‘ ์‚ฌ์šฉ๋˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: test-network-policy
  namespace: default
spec:
  podSelector:    # <<<
    matchLabels:
      app: db
  policyTypes:    # <<<
  - Ingress
  - Egress
  ingress:        # <<<
  - from:
    - ipBlock:
        cidr: 172.17.0.0/16
        except:
        - 172.17.1.0/24
    - namespaceSelector:
        matchLabels:
          project: myproject
    - podSelector:
        matchLabels:
          role: frontend
    ports:
    - protocol: TCP
      port: 6379
  egress:         # <<<
  - to:
    - ipBlock:
        cidr: 10.0.0.0/24
    ports:
    - protocol: TCP
      port: 5978

๋ณด์•ˆ ์ „๋ฌธ๊ฐ€๋ฅผ ์œ„ํ•œ Kubernetes ๋„คํŠธ์›Œํฌ ์ •์ฑ… ์†Œ๊ฐœ
๋ณด์•ˆ ์ „๋ฌธ๊ฐ€๋ฅผ ์œ„ํ•œ Kubernetes ๋„คํŠธ์›Œํฌ ์ •์ฑ… ์†Œ๊ฐœ

XNUMX๊ฐ€์ง€ ์š”์†Œ๋ฅผ ๋ชจ๋‘ ํฌํ•จํ•  ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค. ํ•„์ˆ˜์ผ ๋ฟ์ž…๋‹ˆ๋‹ค podSelector, ์›ํ•˜๋Š” ๋Œ€๋กœ ๋‹ค๋ฅธ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ƒ๋žตํ•˜๋Š” ๊ฒฝ์šฐ policyTypes, ์ •์ฑ…์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•ด์„๋ฉ๋‹ˆ๋‹ค.

  • ๊ธฐ๋ณธ์ ์œผ๋กœ ์ˆ˜์‹ ์ธก์„ ์ •์˜ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. ์ •์ฑ…์— ์ด๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ๋ช…์‹œํ•˜์ง€ ์•Š์œผ๋ฉด ์‹œ์Šคํ…œ์€ ๋ชจ๋“  ํŠธ๋ž˜ํ”ฝ์ด ๊ธˆ์ง€๋œ ๊ฒƒ์œผ๋กœ ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค.
  • ์†ก์‹  ์ธก์˜ ๋™์ž‘์€ ํ•ด๋‹น ์†ก์‹  ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ์œ ๋ฌด์— ๋”ฐ๋ผ ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค.

์‹ค์ˆ˜๋ฅผ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ๋‚˜๋Š” ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค ํ•ญ์ƒ ๋ช…์‹œ์ ์œผ๋กœ ํ•ด๋ผ policyTypes.

์œ„์˜ ๋…ผ๋ฆฌ์— ๋”ฐ๋ฅด๋ฉด, ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ingress ๋ฐ / ๋˜๋Š” egress ์ƒ๋žตํ•˜๋ฉด ์ •์ฑ…์ด ๋ชจ๋“  ํŠธ๋ž˜ํ”ฝ์„ ๊ฑฐ๋ถ€ํ•ฉ๋‹ˆ๋‹ค(์•„๋ž˜ "์ŠคํŠธ๋ฆฌํ•‘ ๊ทœ์น™" ์ฐธ์กฐ).

๊ธฐ๋ณธ ์ •์ฑ…์€ ํ—ˆ์šฉ์ž…๋‹ˆ๋‹ค.

์ •์ฑ…์ด ์ •์˜๋˜์ง€ ์•Š์œผ๋ฉด Kubernetes๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ชจ๋“  ํŠธ๋ž˜ํ”ฝ์„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ํฌ๋“œ๋Š” ์„œ๋กœ ์ž์œ ๋กญ๊ฒŒ ์ •๋ณด๋ฅผ ๊ตํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋ณด์•ˆ ๊ด€์ ์—์„œ ์ง๊ด€์— ๋ฐ˜ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ผ ์ˆ˜ ์žˆ์ง€๋งŒ Kubernetes๋Š” ์›๋ž˜ ๊ฐœ๋ฐœ์ž๊ฐ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒํ˜ธ ์šด์šฉ์„ฑ์„ ์ง€์›ํ•˜๋„๋ก ์„ค๊ณ„ํ–ˆ๋‹ค๋Š” ์ ์„ ๊ธฐ์–ตํ•˜์„ธ์š”. ๋„คํŠธ์›Œํฌ ์ •์ฑ…์€ ๋‚˜์ค‘์— ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋„ค์ž„์ŠคํŽ˜์ด์Šค

๋„ค์ž„์ŠคํŽ˜์ด์Šค๋Š” Kubernetes ํ˜‘์—… ๋ฉ”์ปค๋‹ˆ์ฆ˜์ž…๋‹ˆ๋‹ค. ๋…ผ๋ฆฌ์  ํ™˜๊ฒฝ์„ ์„œ๋กœ ๊ฒฉ๋ฆฌํ•˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ์œผ๋ฉฐ, ๊ณต๊ฐ„ ๊ฐ„ ํ†ต์‹ ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ํ—ˆ์šฉ๋ฉ๋‹ˆ๋‹ค.

๋Œ€๋ถ€๋ถ„์˜ Kubernetes ๊ตฌ์„ฑ ์š”์†Œ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋„คํŠธ์›Œํฌ ์ •์ฑ…์€ ํŠน์ • ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ์žˆ์Šต๋‹ˆ๋‹ค. ๋ธ”๋ก์—์„œ metadata ์ •์ฑ…์ด ์†ํ•˜๋Š” ๊ณต๊ฐ„์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: test-network-policy
  namespace: my-namespace  # <<<
spec:
...

๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์— ๋„ค์ž„์ŠคํŽ˜์ด์Šค๊ฐ€ ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ์‹œ์Šคํ…œ์€ kubectl์— ์ง€์ •๋œ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค(๊ธฐ๋ณธ์ ์œผ๋กœ). namespace=default):

kubectl apply -n my-namespace -f namespace.yaml

๋‚˜๋Š” ์ถ”์ฒœํ•œ๋‹ค ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •, ํ•œ ๋ฒˆ์— ์—ฌ๋Ÿฌ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•˜๋Š” ์ •์ฑ…์„ ์ž‘์„ฑํ•˜์ง€ ์•Š๋Š” ํ•œ.

์˜ˆ๋น„ ์„ ๊ฑฐ ์š”์†Œ podSelector ์ •์ฑ…์—์„œ๋Š” ์ •์ฑ…์ด ์†ํ•œ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์—์„œ ํฌ๋“œ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค(๋‹ค๋ฅธ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์˜ ํฌ๋“œ์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋Š” ๊ฑฐ๋ถ€๋จ).

๋งˆ์ฐฌ๊ฐ€์ง€๋กœ, podSelector ์ˆ˜์‹  ๋ฐ ์†ก์‹  ๋ธ”๋ก์—์„œ ๋ฌผ๋ก  Pod๋ฅผ ๋‹ค์Œ๊ณผ ๊ฒฐํ•ฉํ•˜์ง€ ์•Š๋Š” ํ•œ ์ž์ฒด ๋„ค์ž„์ŠคํŽ˜์ด์Šค์—์„œ๋งŒ Pod๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. namespaceSelector (์ด ๋‚ด์šฉ์€ "๋„ค์ž„์ŠคํŽ˜์ด์Šค ๋ฐ ํฌ๋“œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ•„ํ„ฐ๋ง" ์„น์…˜์—์„œ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.)

์ •์ฑ… ๋ช…๋ช… ๊ทœ์น™

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

ํŠนํžˆ ์ด๋ฆ„ ์ง€์ • ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜๊ฐ€ ๋งˆ์Œ์— ๋“ญ๋‹ˆ๋‹ค. ๋„ค์ž„์ŠคํŽ˜์ด์Šค ์ด๋ฆ„๊ณผ ๋Œ€์ƒ Pod๋ฅผ ๊ฒฐํ•ฉํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default.postgres  # <<<
  namespace: default
spec:
  podSelector:
    matchLabels:
      app: postgres
  ingress:
  - from:
    - podSelector:
        matchLabels:
          app: admin
  policyTypes:
  - Ingress

๋ณด์•ˆ ์ „๋ฌธ๊ฐ€๋ฅผ ์œ„ํ•œ Kubernetes ๋„คํŠธ์›Œํฌ ์ •์ฑ… ์†Œ๊ฐœ

๋ ˆ์ด๋ธ”

Pod ๋ฐ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์™€ ๊ฐ™์€ Kubernetes ๊ฐœ์ฒด์— ์‚ฌ์šฉ์ž ์ง€์ • ๋ ˆ์ด๋ธ”์„ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ผ๋ฒจ(๋ผ๋ฒจ - ํƒœ๊ทธ)๋Š” ํด๋ผ์šฐ๋“œ์˜ ํƒœ๊ทธ์™€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. Kubernetes ๋„คํŠธ์›Œํฌ ์ •์ฑ…์€ ๋ผ๋ฒจ์„ ์‚ฌ์šฉํ•˜์—ฌ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ๊ผฌํˆฌ๋ฆฌ์ ์šฉ ๋Œ€์ƒ:

podSelector:
  matchLabels:
    role: db

โ€ฆ ๋˜๋Š” ๋„ค์ž„์ŠคํŽ˜์ด์Šค์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด ์˜ˆ์‹œ์—์„œ๋Š” ํ•ด๋‹น ๋ผ๋ฒจ์ด ์žˆ๋Š” ๋„ค์ž„์ŠคํŽ˜์ด์Šค์˜ ๋ชจ๋“  Pod๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

namespaceSelector:
  matchLabels:
    project: myproject

ํ•œ ๊ฐ€์ง€ ์ฃผ์˜ ์‚ฌํ•ญ: ์‚ฌ์šฉ ์‹œ namespaceSelector ์„ ํƒํ•œ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ์˜ฌ๋ฐ”๋ฅธ ๋ ˆ์ด๋ธ”์ด ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”.. ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‚ด์žฅ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๊ฐ€ ์žˆ๋‹ค๋Š” ์ ์— ์œ ์˜ํ•˜์„ธ์š”. default ะธ kube-system, ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ผ๋ฒจ์„ ํฌํ•จํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ŠคํŽ˜์ด์Šค์— ๋ผ๋ฒจ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

kubectl label namespace default namespace=default

๋™์‹œ์— ์„น์…˜์˜ ๋„ค์ž„์ŠคํŽ˜์ด์Šค metadata ๋ ˆ์ด๋ธ”์ด ์•„๋‹Œ ์‹ค์ œ ๊ณต๊ฐ„ ์ด๋ฆ„์„ ์ฐธ์กฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: test-network-policy
  namespace: default   # <<<
spec:
...

์†Œ์Šค ๋ฐ ๋Œ€์ƒ

๋ฐฉํ™”๋ฒฝ ์ •์ฑ…์€ ์†Œ์Šค์™€ ๋Œ€์ƒ์ด ํฌํ•จ๋œ ๊ทœ์น™์œผ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. Kubernetes ๋„คํŠธ์›Œํฌ ์ •์ฑ…์€ ์ ์šฉ๋˜๋Š” ํฌ๋“œ ์„ธํŠธ์ธ ๋Œ€์ƒ์— ๋Œ€ํ•ด ์ •์˜๋œ ๋‹ค์Œ ์ˆ˜์‹  ๋ฐ/๋˜๋Š” ์†ก์‹  ํŠธ๋ž˜ํ”ฝ์— ๋Œ€ํ•œ ๊ทœ์น™์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด ์˜ˆ์‹œ์—์„œ ์ •์ฑ…์˜ ๋Œ€์ƒ์€ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์˜ ๋ชจ๋“  ํฌ๋“œ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. default ์—ด์‡ ๊ฐ€ ์žˆ๋Š” ๋ผ๋ฒจ ํฌํ•จ app ๊ทธ๋ฆฌ๊ณ  ์˜๋ฏธ db:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: test-network-policy
  namespace: default
spec:
  podSelector:
    matchLabels:
      app: db   # <<<
  policyTypes:
  - Ingress
  - Egress
  ingress:
  - from:
    - ipBlock:
        cidr: 172.17.0.0/16
        except:
        - 172.17.1.0/24
    - namespaceSelector:
        matchLabels:
          project: myproject
    - podSelector:
        matchLabels:
          role: frontend
    ports:
    - protocol: TCP
      port: 6379
  egress:
  - to:
    - ipBlock:
        cidr: 10.0.0.0/24
    ports:
    - protocol: TCP
      port: 5978

๋ณด์•ˆ ์ „๋ฌธ๊ฐ€๋ฅผ ์œ„ํ•œ Kubernetes ๋„คํŠธ์›Œํฌ ์ •์ฑ… ์†Œ๊ฐœ
๋ณด์•ˆ ์ „๋ฌธ๊ฐ€๋ฅผ ์œ„ํ•œ Kubernetes ๋„คํŠธ์›Œํฌ ์ •์ฑ… ์†Œ๊ฐœ

์ผ๋ถ€ ingress ์ด ์ •์ฑ…์—์„œ๋Š” ๋Œ€์ƒ Pod๋กœ ๋“ค์–ด์˜ค๋Š” ํŠธ๋ž˜ํ”ฝ์„ ์—ฝ๋‹ˆ๋‹ค. ์ฆ‰, ์ˆ˜์‹ ์€ ์†Œ์Šค์ด๊ณ  ๋Œ€์ƒ์€ ํ•ด๋‹น ๋Œ€์ƒ์ž…๋‹ˆ๋‹ค. ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์†ก์‹ ์€ ๋Œ€์ƒ์ด๊ณ  ๋Œ€์ƒ์€ ์†Œ์Šค์ž…๋‹ˆ๋‹ค.

๋ณด์•ˆ ์ „๋ฌธ๊ฐ€๋ฅผ ์œ„ํ•œ Kubernetes ๋„คํŠธ์›Œํฌ ์ •์ฑ… ์†Œ๊ฐœ

์ด๋Š” Ingress โ†’ Target์˜ ๋‘ ๊ฐ€์ง€ ๋ฐฉํ™”๋ฒฝ ๊ทœ์น™๊ณผ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. ๋ชฉํ‘œ โ†’ ์ถœ๊ตฌ.

์†ก์‹  ๋ฐ DNS(์ค‘์š”!)

๋‚˜๊ฐ€๋Š” ํŠธ๋ž˜ํ”ฝ์„ ์ œํ•œํ•จ์œผ๋กœ์จ, DNS์— ํŠน๋ณ„ํ•œ ์ฃผ์˜๋ฅผ ๊ธฐ์šธ์ด์„ธ์š” - Kubernetes๋Š” ์ด ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋น„์Šค๋ฅผ IP ์ฃผ์†Œ์— ๋งคํ•‘ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋‹ค์Œ ์ •์ฑ…์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. balance DNS์— ์•ก์„ธ์Šค:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default.balance
  namespace: default
spec:
  podSelector:
    matchLabels:
      app: balance
  egress:
  - to:
    - podSelector:
        matchLabels:
          app: postgres
  policyTypes:
  - Egress

๋ณด์•ˆ ์ „๋ฌธ๊ฐ€๋ฅผ ์œ„ํ•œ Kubernetes ๋„คํŠธ์›Œํฌ ์ •์ฑ… ์†Œ๊ฐœ

DNS ์„œ๋น„์Šค์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ์—ด์–ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default.balance
  namespace: default
spec:
  podSelector:
    matchLabels:
      app: balance
  egress:
  - to:
    - podSelector:
        matchLabels:
          app: postgres
  - to:               # <<<
    ports:            # <<<
    - protocol: UDP   # <<<
      port: 53        # <<<
  policyTypes:
  - Egress

๋ณด์•ˆ ์ „๋ฌธ๊ฐ€๋ฅผ ์œ„ํ•œ Kubernetes ๋„คํŠธ์›Œํฌ ์ •์ฑ… ์†Œ๊ฐœ

๋งˆ์ง€๋ง‰ ์š”์†Œ to ๋น„์–ด ์žˆ์œผ๋ฏ€๋กœ ๊ฐ„์ ‘์ ์œผ๋กœ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ๋„ค์ž„์ŠคํŽ˜์ด์Šค์˜ ๋ชจ๋“  ํฌ๋“œ, ํ—ˆ์šฉ balance ์ ์ ˆํ•œ Kubernetes ์„œ๋น„์Šค(์ผ๋ฐ˜์ ์œผ๋กœ ํ•ด๋‹น ๊ณต๊ฐ„์—์„œ ์‹คํ–‰๋จ)์— DNS ์ฟผ๋ฆฌ๋ฅผ ๋ณด๋ƒ…๋‹ˆ๋‹ค. kube-system).

์ด ์ ‘๊ทผ ๋ฐฉ์‹์€ ํšจ๊ณผ์ ์ด์ง€๋งŒ ์ง€๋‚˜์น˜๊ฒŒ ๊ด€๋Œ€ํ•˜๊ณ  ๋ถˆ์•ˆํ•˜๋‹ค, DNS ์ฟผ๋ฆฌ๊ฐ€ ํด๋Ÿฌ์Šคํ„ฐ ์™ธ๋ถ€๋กœ ์ „๋‹ฌ๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์„ธ ๊ฐ€์ง€ ์—ฐ์† ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์ณ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

1. DNS ์ฟผ๋ฆฌ๋งŒ ํ—ˆ์šฉ ์ด๋‚ด ์ถ”๊ฐ€ํ•˜์—ฌ ํด๋Ÿฌ์Šคํ„ฐ namespaceSelector:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default.balance
  namespace: default
spec:
  podSelector:
    matchLabels:
      app: balance
  egress:
  - to:
    - podSelector:
        matchLabels:
          app: postgres
  - to:
    - namespaceSelector: {} # <<<
    ports:
    - protocol: UDP
      port: 53
  policyTypes:
  - Egress

๋ณด์•ˆ ์ „๋ฌธ๊ฐ€๋ฅผ ์œ„ํ•œ Kubernetes ๋„คํŠธ์›Œํฌ ์ •์ฑ… ์†Œ๊ฐœ

2. ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๋‚ด์—์„œ๋งŒ DNS ์ฟผ๋ฆฌ๋ฅผ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. kube-system.

์ด๋ ‡๊ฒŒ ํ•˜๋ ค๋ฉด ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ๋ ˆ์ด๋ธ”์„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. kube-system: kubectl label namespace kube-system namespace=kube-system - ๊ทธ๋ฆฌ๊ณ  ์ด๋ฅผ ๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ •์ฑ…์— ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค. namespaceSelector:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default.balance
  namespace: default
spec:
  podSelector:
    matchLabels:
      app: balance
  egress:
  - to:
    - podSelector:
        matchLabels:
          app: postgres
  - to:
    - namespaceSelector:         # <<<
        matchLabels:             # <<<
          namespace: kube-system # <<<
    ports:
    - protocol: UDP
      port: 53
  policyTypes:
  - Egress

๋ณด์•ˆ ์ „๋ฌธ๊ฐ€๋ฅผ ์œ„ํ•œ Kubernetes ๋„คํŠธ์›Œํฌ ์ •์ฑ… ์†Œ๊ฐœ

3. ํŽธ์ง‘์ฆ์ ์ธ ์‚ฌ๋žŒ๋“ค์€ ๋” ๋‚˜์•„๊ฐ€ DNS ์ฟผ๋ฆฌ๋ฅผ ํŠน์ • DNS ์„œ๋น„์Šค๋กœ ์ œํ•œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. kube-system. "๋„ค์ž„์ŠคํŽ˜์ด์Šค ๋ฐ ํฌ๋“œ๋กœ ํ•„ํ„ฐ๋ง" ์„น์…˜์—์„œ๋Š” ์ด๋ฅผ ๋‹ฌ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

๋˜ ๋‹ค๋ฅธ ์˜ต์…˜์€ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ์ˆ˜์ค€์—์„œ DNS๋ฅผ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ๊ฐ ์„œ๋น„์Šค๋งˆ๋‹ค ์—ด ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default.dns
  namespace: default
spec:
  podSelector: {} # <<<
  egress:
  - to:
    - namespaceSelector: {}
    ports:
    - protocol: UDP
      port: 53
  policyTypes:
  - Egress

๋„ (null) podSelector ๋„ค์ž„์ŠคํŽ˜์ด์Šค์˜ ๋ชจ๋“  Pod๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

๋ณด์•ˆ ์ „๋ฌธ๊ฐ€๋ฅผ ์œ„ํ•œ Kubernetes ๋„คํŠธ์›Œํฌ ์ •์ฑ… ์†Œ๊ฐœ

์ฒซ ๋ฒˆ์งธ ์ผ์น˜ ๋ฐ ๊ทœ์น™ ์ˆœ์„œ

๊ธฐ์กด ๋ฐฉํ™”๋ฒฝ์—์„œ๋Š” ํŒจํ‚ท์— ๋Œ€ํ•œ ์ž‘์—…(ํ—ˆ์šฉ ๋˜๋Š” ๊ฑฐ๋ถ€)์ด ๋งŒ์กฑํ•˜๋Š” ์ฒซ ๋ฒˆ์งธ ๊ทœ์น™์— ๋”ฐ๋ผ ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค. Kubernetes์—์„œ๋Š” ์ •์ฑ…์˜ ์ˆœ์„œ๊ฐ€ ์ค‘์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ์ ์œผ๋กœ ์ •์ฑ…์ด ์„ค์ •๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ Pod ๊ฐ„ ํ†ต์‹ ์ด ํ—ˆ์šฉ๋˜๋ฉฐ ์ž์œ ๋กญ๊ฒŒ ์ •๋ณด๋ฅผ ๊ตํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ •์ฑ… ์ˆ˜๋ฆฝ์„ ์‹œ์ž‘ํ•˜๋ฉด ์ •์ฑ… ์ค‘ ํ•˜๋‚˜ ์ด์ƒ์˜ ์˜ํ–ฅ์„ ๋ฐ›๋Š” ๊ฐ ํฌ๋“œ๋Š” ์ด๋ฅผ ์„ ํƒํ•œ ๋ชจ๋“  ์ •์ฑ…์˜ ๋ถ„๋ฆฌ(๋…ผ๋ฆฌ์  OR)์— ๋”ฐ๋ผ ๊ฒฉ๋ฆฌ๋ฉ๋‹ˆ๋‹ค. ์ •์ฑ…์˜ ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๋Š” ํฌ๋“œ๋Š” ์—ด๋ฆฐ ์ƒํƒœ๋กœ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.

ํƒˆ์ง€ ๋ฃฐ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด ๋™์ž‘์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ŠคํŠธ๋ฆฌํ•‘ ๊ทœ์น™(โ€œ๊ฑฐ๋ถ€โ€)

๋ฐฉํ™”๋ฒฝ ์ •์ฑ…์€ ์ผ๋ฐ˜์ ์œผ๋กœ ๋ช…์‹œ์ ์œผ๋กœ ํ—ˆ์šฉ๋˜์ง€ ์•Š๋Š” ๋ชจ๋“  ํŠธ๋ž˜ํ”ฝ์„ ๊ฑฐ๋ถ€ํ•ฉ๋‹ˆ๋‹ค.

Kubernetes์—๋Š” ๊ฑฐ๋ถ€ ์ž‘์—…์ด ์—†์Šต๋‹ˆ๋‹ค.๊ทธ๋Ÿฌ๋‚˜ ๋นˆ ์†Œ์Šค ํฌ๋“œ ๊ทธ๋ฃน(์ˆ˜์‹ )์„ ์„ ํƒํ•˜์—ฌ ์ผ๋ฐ˜(ํ—ˆ์šฉ) ์ •์ฑ…์„ ์‚ฌ์šฉํ•˜์—ฌ ์œ ์‚ฌํ•œ ํšจ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: deny-all
  namespace: default
spec:
  podSelector: {}
  policyTypes:
  - Ingress

๋ณด์•ˆ ์ „๋ฌธ๊ฐ€๋ฅผ ์œ„ํ•œ Kubernetes ๋„คํŠธ์›Œํฌ ์ •์ฑ… ์†Œ๊ฐœ

์ด ์ •์ฑ…์€ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์˜ ๋ชจ๋“  ํฌ๋“œ๋ฅผ ์„ ํƒํ•˜๊ณ  ์ˆ˜์‹ ์„ ์ •์˜๋˜์ง€ ์•Š์€ ์ƒํƒœ๋กœ ์œ ์ง€ํ•˜์—ฌ ๋ชจ๋“  ์ˆ˜์‹  ํŠธ๋ž˜ํ”ฝ์„ ๊ฑฐ๋ถ€ํ•ฉ๋‹ˆ๋‹ค.

๋น„์Šทํ•œ ๋ฐฉ์‹์œผ๋กœ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์—์„œ ๋‚˜๊ฐ€๋Š” ๋ชจ๋“  ํŠธ๋ž˜ํ”ฝ์„ ์ œํ•œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: deny-all-egress
  namespace: default
spec:
  podSelector: {}
  policyTypes:
  - Egress

๋ณด์•ˆ ์ „๋ฌธ๊ฐ€๋ฅผ ์œ„ํ•œ Kubernetes ๋„คํŠธ์›Œํฌ ์ •์ฑ… ์†Œ๊ฐœ

์œ ์˜ ์‚ฌํ•ญ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์˜ Pod์— ๋Œ€ํ•œ ํŠธ๋ž˜ํ”ฝ์„ ํ—ˆ์šฉํ•˜๋Š” ์ถ”๊ฐ€ ์ •์ฑ…์€ ์ด ๊ทœ์น™๋ณด๋‹ค ์šฐ์„  ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. (๋ฐฉํ™”๋ฒฝ ๊ตฌ์„ฑ์—์„œ ๊ฑฐ๋ถ€ ๊ทœ์น™ ์•ž์— ํ—ˆ์šฉ ๊ทœ์น™์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ๊ณผ ์œ ์‚ฌ)

๋ชจ๋‘ ํ—ˆ์šฉ(Any-Any-Any-Allow)

๋ชจ๋‘ ํ—ˆ์šฉ ์ •์ฑ…์„ ์ƒ์„ฑํ•˜๋ ค๋ฉด ์œ„์˜ ๊ฑฐ๋ถ€ ์ •์ฑ…์„ ๋นˆ ์š”์†Œ๋กœ ๋ณด์™„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ingress:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-all
  namespace: default
spec:
  podSelector: {}
  ingress: # <<<
  - {}     # <<<
  policyTypes:
  - Ingress

๋ณด์•ˆ ์ „๋ฌธ๊ฐ€๋ฅผ ์œ„ํ•œ Kubernetes ๋„คํŠธ์›Œํฌ ์ •์ฑ… ์†Œ๊ฐœ

๋‹ค์Œ์—์„œ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ๋„ค์ž„์ŠคํŽ˜์ด์Šค(๋ฐ ๋ชจ๋“  IP)์˜ ๋ชจ๋“  ํฌ๋“œ๋ฅผ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์˜ ๋ชจ๋“  ํฌ๋“œ๋กœ default. ์ด ๋™์ž‘์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ํ™œ์„ฑํ™”๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ์ผ๋ฐ˜์ ์œผ๋กœ ์ถ”๊ฐ€๋กœ ์ •์˜ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋•Œ๋กœ๋Š” ๋ฌธ์ œ๋ฅผ ์ง„๋‹จํ•˜๊ธฐ ์œ„ํ•ด ์ผ๋ถ€ ํŠน์ • ๊ถŒํ•œ์„ ์ผ์‹œ์ ์œผ๋กœ ๋น„ํ™œ์„ฑํ™”ํ•ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์•ก์„ธ์Šค๋งŒ ํ—ˆ์šฉํ•˜๋„๋ก ๊ทœ์น™ ๋ฒ”์œ„๋ฅผ ์ขํž ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŠน์ • ํฌ๋“œ ์„ธํŠธ (app:balance) ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— default:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-all-to-balance
  namespace: default
spec:
  podSelector:
    matchLabels:
      app: balance
  ingress: 
  - {}
  policyTypes:
  - Ingress

๋ณด์•ˆ ์ „๋ฌธ๊ฐ€๋ฅผ ์œ„ํ•œ Kubernetes ๋„คํŠธ์›Œํฌ ์ •์ฑ… ์†Œ๊ฐœ

๋‹ค์Œ ์ •์ฑ…์€ ํด๋Ÿฌ์Šคํ„ฐ ์™ธ๋ถ€์˜ ๋ชจ๋“  IP์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ํฌํ•จํ•˜์—ฌ ๋ชจ๋“  ์ˆ˜์‹  ๋ฐ ์†ก์‹  ํŠธ๋ž˜ํ”ฝ์„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-all
spec:
  podSelector: {}
  ingress:
  - {}
  egress:
  - {}
  policyTypes:
  - Ingress
  - Egress

๋ณด์•ˆ ์ „๋ฌธ๊ฐ€๋ฅผ ์œ„ํ•œ Kubernetes ๋„คํŠธ์›Œํฌ ์ •์ฑ… ์†Œ๊ฐœ
๋ณด์•ˆ ์ „๋ฌธ๊ฐ€๋ฅผ ์œ„ํ•œ Kubernetes ๋„คํŠธ์›Œํฌ ์ •์ฑ… ์†Œ๊ฐœ

์—ฌ๋Ÿฌ ์ •์ฑ… ๊ฒฐํ•ฉ

์ •์ฑ…์€ ์„ธ ๊ฐ€์ง€ ์ˆ˜์ค€์—์„œ ๋…ผ๋ฆฌ์  OR์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒฐํ•ฉ๋ฉ๋‹ˆ๋‹ค. ๊ฐ ํฌ๋“œ์˜ ๊ถŒํ•œ์€ ํฌ๋“œ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ๋ชจ๋“  ์ •์ฑ…์˜ ๋ถ„๋ฆฌ์— ๋”ฐ๋ผ ์„ค์ •๋ฉ๋‹ˆ๋‹ค.

1. ๋“คํŒ์—์„œ from ะธ to ์„ธ ๊ฐ€์ง€ ์œ ํ˜•์˜ ์š”์†Œ๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(๋ชจ๋‘ OR๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒฐํ•ฉ๋จ).

  • namespaceSelector โ€” ์ „์ฒด ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  • podSelector โ€” ํฌ๋“œ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  • ipBlock โ€” ์„œ๋ธŒ๋„ท์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ ํ•˜์œ„ ์„น์…˜์˜ ์š”์†Œ ์ˆ˜(๋™์ผํ•œ ์š”์†Œ๋ผ๋„) from/to ์ œํ•œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ชจ๋‘ ๋…ผ๋ฆฌ์  OR๋กœ ๊ฒฐํ•ฉ๋ฉ๋‹ˆ๋‹ค.

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default.postgres
  namespace: default
spec:
  ingress:
  - from:
    - podSelector:
        matchLabels:
          app: indexer
    - podSelector:
        matchLabels:
          app: admin
  podSelector:
    matchLabels:
      app: postgres
  policyTypes:
  - Ingress

๋ณด์•ˆ ์ „๋ฌธ๊ฐ€๋ฅผ ์œ„ํ•œ Kubernetes ๋„คํŠธ์›Œํฌ ์ •์ฑ… ์†Œ๊ฐœ

2. ์ •์ฑ… ์„น์…˜ ๋‚ด๋ถ€ ingress ๋งŽ์€ ์š”์†Œ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค from (๋…ผ๋ฆฌ์  OR๋กœ ๊ฒฐํ•ฉ) ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์„น์…˜ egress ๋งŽ์€ ์š”์†Œ๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์žˆ์Œ to (๋˜ํ•œ ๋ถ„๋ฆฌ๋กœ ๊ฒฐํ•ฉ๋จ):

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default.postgres
  namespace: default
spec:
  ingress:
  - from:
    - podSelector:
        matchLabels:
          app: indexer
  - from:
    - podSelector:
        matchLabels:
          app: admin
  podSelector:
    matchLabels:
      app: postgres
  policyTypes:
  - Ingress

๋ณด์•ˆ ์ „๋ฌธ๊ฐ€๋ฅผ ์œ„ํ•œ Kubernetes ๋„คํŠธ์›Œํฌ ์ •์ฑ… ์†Œ๊ฐœ

3. ๋‹ค์–‘ํ•œ ์ •์ฑ…๋„ ๋…ผ๋ฆฌ์  OR๋กœ ๊ฒฐํ•ฉ๋ฉ๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์ด๋“ค์„ ๊ฒฐํ•ฉํ•  ๋•Œ ํ•œ ๊ฐ€์ง€ ์ œํ•œ ์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ง€์‹œ ๋œ ํฌ๋ฆฌ์Šค ์ฟ ๋‹ˆ: Kubernetes๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ์ •์ฑ…๋งŒ ๊ฒฐํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. policyTypes (Ingress ๋˜๋Š” Egress). ์ˆ˜์‹ (๋˜๋Š” ์†ก์‹ )์„ ์ •์˜ํ•˜๋Š” ์ •์ฑ…์€ ์„œ๋กœ ๋ฎ์–ด์“ฐ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๋„ค์ž„์ŠคํŽ˜์ด์Šค ๊ฐ„์˜ ๊ด€๊ณ„

๊ธฐ๋ณธ์ ์œผ๋กœ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๊ฐ„ ์ •๋ณด ๊ณต์œ ๊ฐ€ ํ—ˆ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋กœ ๋‚˜๊ฐ€๊ฑฐ๋‚˜ ๋“ค์–ด์˜ค๋Š” ํŠธ๋ž˜ํ”ฝ์„ ์ œํ•œํ•˜๋Š” ๊ฑฐ๋ถ€ ์ •์ฑ…์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์œ„์˜ "์ŠคํŠธ๋ฆฌํ•‘ ๊ทœ์น™" ์ฐธ์กฐ).

๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ์ฐจ๋‹จํ•œ ํ›„์—๋Š”(์œ„์˜ "์ŠคํŠธ๋ฆฌํ•‘ ๊ทœ์น™" ์ฐธ์กฐ) ๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์—ฌ ํŠน์ • ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋กœ๋ถ€ํ„ฐ์˜ ์—ฐ๊ฒฐ์„ ํ—ˆ์šฉํ•จ์œผ๋กœ์จ ๊ฑฐ๋ถ€ ์ •์ฑ…์— ๋Œ€ํ•œ ์˜ˆ์™ธ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. namespaceSelector:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: database.postgres
  namespace: database
spec:
  podSelector:
    matchLabels:
      app: postgres
  ingress:
  - from:
    - namespaceSelector: # <<<
        matchLabels:
          namespace: default
  policyTypes:
  - Ingress

๋ณด์•ˆ ์ „๋ฌธ๊ฐ€๋ฅผ ์œ„ํ•œ Kubernetes ๋„คํŠธ์›Œํฌ ์ •์ฑ… ์†Œ๊ฐœ

๊ฒฐ๊ณผ์ ์œผ๋กœ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์˜ ๋ชจ๋“  ํฌ๋“œ๋Š” default ํฌ๋“œ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. postgres ๋„ค์ž„์ŠคํŽ˜์ด์Šค์—์„œ database. ํ•˜์ง€๋งŒ ๋‹ค์Œ์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ๊ณต๊ฐœํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ๊นŒ์š”? postgres ๋„ค์ž„์ŠคํŽ˜์ด์Šค์˜ ํŠน์ • ํฌ๋“œ๋งŒ default?

๋„ค์ž„์ŠคํŽ˜์ด์Šค ๋ฐ Pod๋กœ ํ•„ํ„ฐ๋ง

Kubernetes ๋ฒ„์ „ 1.11 ์ด์ƒ์—์„œ๋Š” ์—ฐ์‚ฐ์ž๋ฅผ ๊ฒฐํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. namespaceSelector ะธ podSelector ๋…ผ๋ฆฌ AND๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: database.postgres
  namespace: database
spec:
  podSelector:
    matchLabels:
      app: postgres
  ingress:
  - from:
    - namespaceSelector:
        matchLabels:
          namespace: default
      podSelector: # <<<
        matchLabels:
          app: admin
  policyTypes:
  - Ingress

๋ณด์•ˆ ์ „๋ฌธ๊ฐ€๋ฅผ ์œ„ํ•œ Kubernetes ๋„คํŠธ์›Œํฌ ์ •์ฑ… ์†Œ๊ฐœ

์ด๊ฒƒ์ด ์ผ๋ฐ˜์ ์ธ OR ๋Œ€์‹  AND๋กœ ํ•ด์„๋˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์ฐธ๊ณ  podSelector ํ•˜์ดํ”ˆ์œผ๋กœ ์‹œ์ž‘ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. YAML์—์„œ ์ด๋Š” ๋‹ค์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. podSelector ๊ทธ๋ฆฌ๊ณ  ๊ทธ ์•ž์— ์„œ์„œ namespaceSelector ๋™์ผํ•œ ๋ชฉ๋ก ์š”์†Œ๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค. ๋”ฐ๋ผ์„œ ๋…ผ๋ฆฌ AND๋กœ ๊ฒฐํ•ฉ๋ฉ๋‹ˆ๋‹ค.

์•ž์— ํ•˜์ดํ”ˆ ์ถ”๊ฐ€ podSelector ๊ฒฐ๊ณผ์ ์œผ๋กœ ์ด์ „ ๋ชฉ๋ก ์š”์†Œ์™€ ๊ฒฐํ•ฉ๋˜๋Š” ์ƒˆ๋กœ์šด ๋ชฉ๋ก ์š”์†Œ๊ฐ€ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค. namespaceSelector ๋…ผ๋ฆฌ์  OR์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

ํŠน์ • ๋ผ๋ฒจ์ด ์žˆ๋Š” ํฌ๋“œ๋ฅผ ์„ ํƒํ•˜๋ ค๋ฉด ๋ชจ๋“  ๋„ค์ž„์ŠคํŽ˜์ด์Šค์—์„œ, ๊ณต๋ฐฑ์„ ์ž…๋ ฅํ•˜์„ธ์š” namespaceSelector:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: database.postgres
  namespace: database
spec:
  podSelector:
    matchLabels:
      app: postgres
  ingress:
  - from:
    - namespaceSelector: {}
      podSelector:
        matchLabels:
          app: admin
  policyTypes:
  - Ingress

๋ณด์•ˆ ์ „๋ฌธ๊ฐ€๋ฅผ ์œ„ํ•œ Kubernetes ๋„คํŠธ์›Œํฌ ์ •์ฑ… ์†Œ๊ฐœ

์—ฌ๋Ÿฌ ๋ ˆ์ด๋ธ”์ด I์™€ ํŒ€์„ ์ด๋ฃน๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ ๊ฐœ์ฒด(ํ˜ธ์ŠคํŠธ, ๋„คํŠธ์›Œํฌ, ๊ทธ๋ฃน)๊ฐ€ ์žˆ๋Š” ๋ฐฉํ™”๋ฒฝ์— ๋Œ€ํ•œ ๊ทœ์น™์€ ๋…ผ๋ฆฌ์  OR์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒฐํ•ฉ๋ฉ๋‹ˆ๋‹ค. ํŒจํ‚ท ์†Œ์Šค๊ฐ€ ์ผ์น˜ํ•˜๋ฉด ๋‹ค์Œ ๊ทœ์น™์ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. Host_1 ๋˜๋Š” Host_2:

| Source | Destination | Service | Action |
| ----------------------------------------|
| Host_1 | Subnet_A    | HTTPS   | Allow  |
| Host_2 |             |         |        |
| ----------------------------------------|

๋ฐ˜๋Œ€๋กœ Kubernetes์—์„œ๋Š” podSelector ๋˜๋Š” namespaceSelector ๋…ผ๋ฆฌ์  AND๋กœ ๊ฒฐํ•ฉ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ ๊ทœ์น™์€ ๋‘ ๋ผ๋ฒจ์ด ๋ชจ๋‘ ์žˆ๋Š” ํฌ๋“œ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. role=db ะ˜ version=v2:

podSelector:
  matchLabels:
    role: db
    version: v2

์ •์ฑ… ๋Œ€์ƒ ์„ ํƒ๊ธฐ, ํฌ๋“œ ์„ ํƒ๊ธฐ, ๋„ค์ž„์ŠคํŽ˜์ด์Šค ์„ ํƒ๊ธฐ ๋“ฑ ๋ชจ๋“  ์œ ํ˜•์˜ ์—ฐ์‚ฐ์ž์— ๋™์ผํ•œ ๋…ผ๋ฆฌ๊ฐ€ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

์„œ๋ธŒ๋„ท ๋ฐ IP ์ฃผ์†Œ(IPBlock)

๋ฐฉํ™”๋ฒฝ์€ VLAN, IP ์ฃผ์†Œ ๋ฐ ์„œ๋ธŒ๋„ท์„ ์‚ฌ์šฉํ•˜์—ฌ ๋„คํŠธ์›Œํฌ๋ฅผ ๋ถ„ํ• ํ•ฉ๋‹ˆ๋‹ค.

Kubernetes์—์„œ IP ์ฃผ์†Œ๋Š” ํฌ๋“œ์— ์ž๋™์œผ๋กœ ํ• ๋‹น๋˜๊ณ  ์ž์ฃผ ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋ ˆ์ด๋ธ”์€ ๋„คํŠธ์›Œํฌ ์ •์ฑ…์—์„œ ํฌ๋“œ์™€ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ์„ ํƒํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

์„œ๋ธŒ๋„ท(ipBlocks)์€ ์ˆ˜์‹ (ingress) ๋˜๋Š” ์†ก์‹ (egress) ์™ธ๋ถ€(North-South) ์—ฐ๊ฒฐ์„ ๊ด€๋ฆฌํ•  ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ด ์ •์ฑ…์€ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์˜ ๋ชจ๋“  ํฌ๋“œ์— ์—ด๋ฆฝ๋‹ˆ๋‹ค. default Google DNS ์„œ๋น„์Šค์— ์•ก์„ธ์Šค:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: egress-dns
  namespace: default
spec:
  podSelector: {}
  policyTypes:
  - Egress
  egress:
  - to:
    - ipBlock:
        cidr: 8.8.8.8/32
    ports:
    - protocol: UDP
      port: 53

๋ณด์•ˆ ์ „๋ฌธ๊ฐ€๋ฅผ ์œ„ํ•œ Kubernetes ๋„คํŠธ์›Œํฌ ์ •์ฑ… ์†Œ๊ฐœ

์ด ์˜ˆ์—์„œ ๋นˆ ํฌ๋“œ ์„ ํƒ๊ธฐ๋Š” "๋„ค์ž„์ŠคํŽ˜์ด์Šค์˜ ๋ชจ๋“  ํฌ๋“œ ์„ ํƒ"์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

์ด ์ •์ฑ…์€ 8.8.8.8์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋งŒ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ IP์— ๋Œ€ํ•œ ์ ‘๊ทผ์€ ๊ธˆ์ง€๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ณธ์งˆ์ ์œผ๋กœ ๋‚ด๋ถ€ Kubernetes DNS ์„œ๋น„์Šค์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๊ฐ€ ์ฐจ๋‹จ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜๋„ ์—ด๊ณ  ์‹ถ๋‹ค๋ฉด ์ด๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •ํ•˜์„ธ์š”.

๋ณดํ†ต ipBlocks ะธ podSelectors ํฌ๋“œ์˜ ๋‚ด๋ถ€ IP ์ฃผ์†Œ๋Š” ํฌ๋“œ์—์„œ ์‚ฌ์šฉ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์ƒํ˜ธ ๋ฐฐํƒ€์ ์ž…๋‹ˆ๋‹ค. ipBlocks. ํ‘œ์‹œํ•จ์œผ๋กœ์จ ๋‚ด๋ถ€ IP ํฌ๋“œ, ์‹ค์ œ๋กœ ์ด๋Ÿฌํ•œ ์ฃผ์†Œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํฌ๋“œ์™€์˜ ์—ฐ๊ฒฐ์„ ํ—ˆ์šฉํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ๋Š” ์–ด๋–ค IP ์ฃผ์†Œ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ• ์ง€ ์•Œ ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ํฌ๋“œ๋ฅผ ์„ ํƒํ•˜๋Š” ๋ฐ ์ด๋ฅผ ์‚ฌ์šฉํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค.

๋ฐ˜๋Œ€ ์˜ˆ๋กœ ๋‹ค์Œ ์ •์ฑ…์€ ๋ชจ๋“  IP๋ฅผ ํฌํ•จํ•˜๋ฏ€๋กœ ๋‹ค๋ฅธ ๋ชจ๋“  Pod์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: egress-any
  namespace: default
spec:
  podSelector: {}
  policyTypes:
  - Egress
  egress:
  - to:
    - ipBlock:
        cidr: 0.0.0.0/0

๋ณด์•ˆ ์ „๋ฌธ๊ฐ€๋ฅผ ์œ„ํ•œ Kubernetes ๋„คํŠธ์›Œํฌ ์ •์ฑ… ์†Œ๊ฐœ

ํฌ๋“œ์˜ ๋‚ด๋ถ€ IP ์ฃผ์†Œ๋ฅผ ์ œ์™ธํ•˜๊ณ  ์™ธ๋ถ€ IP์—๋งŒ ์•ก์„ธ์Šค๋ฅผ ์—ด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ํฌ๋“œ์˜ ์„œ๋ธŒ๋„ท์ด 10.16.0.0/14์ธ ๊ฒฝ์šฐ:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: egress-any
  namespace: default
spec:
  podSelector: {}
  policyTypes:
  - Egress
  egress:
  - to:
    - ipBlock:
        cidr: 0.0.0.0/0
        except:
        - 10.16.0.0/14

๋ณด์•ˆ ์ „๋ฌธ๊ฐ€๋ฅผ ์œ„ํ•œ Kubernetes ๋„คํŠธ์›Œํฌ ์ •์ฑ… ์†Œ๊ฐœ

ํฌํŠธ ๋ฐ ํ”„๋กœํ† ์ฝœ

์ผ๋ฐ˜์ ์œผ๋กœ ํฌ๋“œ๋Š” ํ•˜๋‚˜์˜ ํฌํŠธ๋ฅผ ์ˆ˜์‹ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์ •์ฑ…์—์„œ ํฌํŠธ ๋ฒˆํ˜ธ๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š๊ณ  ๋ชจ๋“  ๊ฒƒ์„ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ๋‘˜ ์ˆ˜ ์—†์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ •์ฑ…์„ ์ตœ๋Œ€ํ•œ ์ œํ•œ์ ์œผ๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์–ด๋–ค ๊ฒฝ์šฐ์—๋Š” ์—ฌ์ „ํžˆ ํฌํŠธ๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default.postgres
  namespace: default
spec:
  ingress:
  - from:
    - podSelector:
        matchLabels:
          app: indexer
    - podSelector:
        matchLabels:
          app: admin
    ports:             # <<<
      - port: 443      # <<<
        protocol: TCP  # <<<
      - port: 80       # <<<
        protocol: TCP  # <<<
  podSelector:
    matchLabels:
      app: postgres
  policyTypes:
  - Ingress

๋ณด์•ˆ ์ „๋ฌธ๊ฐ€๋ฅผ ์œ„ํ•œ Kubernetes ๋„คํŠธ์›Œํฌ ์ •์ฑ… ์†Œ๊ฐœ

์ฐธ๊ณ ๋กœ ์„ ํƒ์ž๋Š” ports ๋ธ”๋ก์˜ ๋ชจ๋“  ์š”์†Œ์— ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. to ๋˜๋Š” from, ํฌํ•จํ•˜๋Š”. ์„œ๋กœ ๋‹ค๋ฅธ ์š”์†Œ ์ง‘ํ•ฉ์— ๋Œ€ํ•ด ์„œ๋กœ ๋‹ค๋ฅธ ํฌํŠธ๋ฅผ ์ง€์ •ํ•˜๋ ค๋ฉด ๋ถ„ํ• ํ•˜์„ธ์š”. ingress ๋˜๋Š” egress ์—ฌ๋Ÿฌ ํ•˜์œ„ ์„น์…˜์œผ๋กœ to ๋˜๋Š” from ๊ฐ ํฌํŠธ๋ฅผ ๋“ฑ๋กํ•  ๋•Œ:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default.postgres
  namespace: default
spec:
  ingress:
  - from:
    - podSelector:
        matchLabels:
          app: indexer
    ports:             # <<<
     - port: 443       # <<<
       protocol: TCP   # <<<
  - from:
    - podSelector:
        matchLabels:
          app: admin
    ports:             # <<<
     - port: 80        # <<<
       protocol: TCP   # <<<
  podSelector:
    matchLabels:
      app: postgres
  policyTypes:
  - Ingress

๋ณด์•ˆ ์ „๋ฌธ๊ฐ€๋ฅผ ์œ„ํ•œ Kubernetes ๋„คํŠธ์›Œํฌ ์ •์ฑ… ์†Œ๊ฐœ

๊ธฐ๋ณธ ํฌํŠธ ์ž‘๋™:

  • ํฌํŠธ ์ •์˜๋ฅผ ์™„์ „ํžˆ ์ƒ๋žตํ•˜๋Š” ๊ฒฝ์šฐ(ports), ์ด๋Š” ๋ชจ๋“  ํ”„๋กœํ† ์ฝœ๊ณผ ๋ชจ๋“  ํฌํŠธ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
  • ํ”„๋กœํ† ์ฝœ ์ •์˜(protocol), ์ด๋Š” TCP๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
  • ํฌํŠธ ์ •์˜๋ฅผ ์ƒ๋žตํ•˜๋Š” ๊ฒฝ์šฐ(port), ์ด๋Š” ๋ชจ๋“  ํฌํŠธ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋ฒ” ์‚ฌ๋ก€: ๊ธฐ๋ณธ๊ฐ’์— ์˜์กดํ•˜์ง€ ๋ง๊ณ  ํ•„์š”ํ•œ ์‚ฌํ•ญ์„ ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •ํ•˜์„ธ์š”.

์„œ๋น„์Šค ํฌํŠธ๊ฐ€ ์•„๋‹Œ ํฌ๋“œ ํฌํŠธ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค๋Š” ์ ์— ์œ ์˜ํ•˜์„ธ์š”(์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋‹ค์Œ ๋‹จ๋ฝ์—์„œ ์„ค๋ช…).

Pod ๋˜๋Š” ์„œ๋น„์Šค์— ๋Œ€ํ•œ ์ •์ฑ…์ด ์ •์˜๋˜์–ด ์žˆ๋‚˜์š”?

์ผ๋ฐ˜์ ์œผ๋กœ Kubernetes์˜ Pod๋Š” ์„œ๋น„์Šค(์„œ๋น„์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” Pod๋กœ ํŠธ๋ž˜ํ”ฝ์„ ๋ฆฌ๋””๋ ‰์…˜ํ•˜๋Š” ๊ฐ€์ƒ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ)๋ฅผ ํ†ตํ•ด ์„œ๋กœ ์•ก์„ธ์Šคํ•ฉ๋‹ˆ๋‹ค. ๋„คํŠธ์›Œํฌ ์ •์ฑ…์ด ์„œ๋น„์Šค์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ์ œ์–ดํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Kubernetes ๋„คํŠธ์›Œํฌ ์ •์ฑ…์€ ์„œ๋น„์Šค ํฌํŠธ๊ฐ€ ์•„๋‹Œ ํฌ๋“œ ํฌํŠธ์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ์„œ๋น„์Šค๊ฐ€ ํฌํŠธ 80์„ ์ˆ˜์‹ ํ•˜์ง€๋งŒ ํ•ด๋‹น Pod์˜ ํฌํŠธ 8080์œผ๋กœ ํŠธ๋ž˜ํ”ฝ์„ ๋ฆฌ๋””๋ ‰์…˜ํ•˜๋Š” ๊ฒฝ์šฐ ๋„คํŠธ์›Œํฌ ์ •์ฑ…์—์„œ ์ •ํ™•ํžˆ 8080์„ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๋ฉ”์ปค๋‹ˆ์ฆ˜์€ ์ฐจ์„ ์ฑ…์œผ๋กœ ๊ฐ„์ฃผ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์„œ๋น„์Šค์˜ ๋‚ด๋ถ€ ๊ตฌ์กฐ(ํŒŸ์ด ์ˆ˜์‹  ๋Œ€๊ธฐํ•˜๋Š” ํฌํŠธ)๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด ๋„คํŠธ์›Œํฌ ์ •์ฑ…์„ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Service Mesh๋ฅผ ์‚ฌ์šฉํ•œ ์ƒˆ๋กœ์šด ์•„ํ‚คํ…์ฒ˜ ์ ‘๊ทผ ๋ฐฉ์‹ (์˜ˆ๋ฅผ ๋“ค์–ด ์•„๋ž˜ Istio์— ๋Œ€ํ•ด ์ฐธ์กฐํ•˜์„ธ์š” - ๋Œ€๋žต์ ์ธ ๋ฒˆ์—ญ) ์ด ๋ฌธ์ œ์— ๋Œ€์ฒ˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Ingress์™€ Egress๋ฅผ ๋ชจ๋‘ ๋“ฑ๋กํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

์งง์€ ๋Œ€๋‹ต์€ '์˜ˆ'์ž…๋‹ˆ๋‹ค. Pod A๊ฐ€ Pod B์™€ ํ†ต์‹ ํ•˜๋ ค๋ฉด ๋‚˜๊ฐ€๋Š” ์—ฐ๊ฒฐ ์ƒ์„ฑ์ด ํ—ˆ์šฉ๋˜์–ด์•ผ ํ•˜๋ฉฐ(์ด๋ฅผ ์œ„ํ•ด์„œ๋Š” ์†ก์‹  ์ •์ฑ…์„ ๊ตฌ์„ฑํ•ด์•ผ ํ•จ) Pod B๊ฐ€ ๋“ค์–ด์˜ค๋Š” ์—ฐ๊ฒฐ์„ ์ˆ˜๋ฝํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค( ์ด๋ฅผ ์œ„ํ•ด์„œ๋Š” ์ˆ˜์‹  ์ •์ฑ…)์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์‹ค์ œ๋กœ๋Š” ๊ธฐ๋ณธ ์ •์ฑ…์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‹จ๋ฐฉํ–ฅ ๋˜๋Š” ์–‘๋ฐฉํ–ฅ ์—ฐ๊ฒฐ์„ ํ—ˆ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์–ด๋–ค ํฌ๋“œ๋ผ๋ฉด-์ถœ์ฒ˜ ํ•œ ๋ช… ์ด์ƒ์˜ ์‚ฌ๋žŒ์ด ์„ ํƒํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ถœ๊ตฌ-์ •์น˜์ธ์— ๋Œ€ํ•œ ์ œํ•œ์€ ๊ทธ๋“ค์˜ ๋ถ„๋ฆฌ์— ๋”ฐ๋ผ ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ Pod์— ๋Œ€ํ•œ ์—ฐ๊ฒฐ์„ ๋ช…์‹œ์ ์œผ๋กœ ํ—ˆ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.์ˆ˜์ทจ์ธ์—๊ฒŒ. ์ •์ฑ…์— ๋”ฐ๋ผ Pod๊ฐ€ ์„ ํƒ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ํ•ด๋‹น Pod์˜ ๋‚˜๊ฐ€๋Š”(์†ก์‹ ) ํŠธ๋ž˜ํ”ฝ์ด ๊ธฐ๋ณธ์ ์œผ๋กœ ํ—ˆ์šฉ๋ฉ๋‹ˆ๋‹ค.

๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ํฌ๋“œ์˜ ์šด๋ช…์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.์ˆ˜์‹ ์ธ, ํ•˜๋‚˜ ์ด์ƒ์˜ ์„ ํƒ๋จ ์ž…๊ตฌ-์ •์น˜์ธ๋“ค์€ ๊ทธ๋“ค์˜ ๋ถ„๋ฆฌ์— ์˜ํ•ด ๊ฒฐ์ •๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ์†Œ์Šค Pod์—์„œ ํŠธ๋ž˜ํ”ฝ์„ ์ˆ˜์‹ ํ•˜๋„๋ก ๋ช…์‹œ์ ์œผ๋กœ ํ—ˆ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ •์ฑ…์— ๋”ฐ๋ผ ํฌ๋“œ๊ฐ€ ์„ ํƒ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ํ•ด๋‹น ํฌ๋“œ์— ๋Œ€ํ•œ ๋ชจ๋“  ์ˆ˜์‹  ํŠธ๋ž˜ํ”ฝ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ํ—ˆ์šฉ๋ฉ๋‹ˆ๋‹ค.

์•„๋ž˜์˜ Stateful ๋˜๋Š” Stateless๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

๋กœ๊ทธ

Kubernetes ๋„คํŠธ์›Œํฌ ์ •์ฑ…์€ ํŠธ๋ž˜ํ”ฝ์„ ๊ธฐ๋กํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ์ •์ฑ…์ด ์˜๋„ํ•œ ๋Œ€๋กœ ์ž‘๋™ํ•˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ํŒ๋‹จํ•˜๊ธฐ๊ฐ€ ์–ด๋ ต๊ณ  ๋ณด์•ˆ ๋ถ„์„์ด ๋งค์šฐ ๋ณต์žกํ•ด์ง‘๋‹ˆ๋‹ค.

์™ธ๋ถ€ ์„œ๋น„์Šค์— ๋Œ€ํ•œ ํŠธ๋ž˜ํ”ฝ ์ œ์–ด

Kubernetes ๋„คํŠธ์›Œํฌ ์ •์ฑ…์—์„œ๋Š” ์†ก์‹  ์„น์…˜์— ์ •๊ทœํ™”๋œ ๋„๋ฉ”์ธ ์ด๋ฆ„(DNS)์„ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด ์‚ฌ์‹ค์€ ๊ณ ์ • IP ์ฃผ์†Œ๊ฐ€ ์—†๋Š” ์™ธ๋ถ€ ๋Œ€์ƒ(์˜ˆ: aws.com)์œผ๋กœ ํŠธ๋ž˜ํ”ฝ์„ ์ œํ•œํ•˜๋ ค๊ณ  ํ•  ๋•Œ ์ƒ๋‹นํ•œ ๋ถˆํŽธ์„ ์ดˆ๋ž˜ํ•ฉ๋‹ˆ๋‹ค.

์ •์ฑ… ํ™•์ธ

๋ฐฉํ™”๋ฒฝ์€ ์ž˜๋ชป๋œ ์ •์ฑ…์— ๋Œ€ํ•ด ๊ฒฝ๊ณ ํ•˜๊ฑฐ๋‚˜ ๊ฑฐ๋ถ€ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. Kubernetes๋„ ๋ช‡ ๊ฐ€์ง€ ํ™•์ธ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. kubectl์„ ํ†ตํ•ด ๋„คํŠธ์›Œํฌ ์ •์ฑ…์„ ์„ค์ •ํ•  ๋•Œ Kubernetes๋Š” ํ•ด๋‹น ์ •์ฑ…์ด ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š๋‹ค๊ณ  ์„ ์–ธํ•˜๊ณ  ์ˆ˜๋ฝ์„ ๊ฑฐ๋ถ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๊ฒฝ์šฐ์—๋Š” Kubernetes๊ฐ€ ์ •์ฑ…์„ ๊ฐ€์ ธ์™€ ๋ˆ„๋ฝ๋œ ์„ธ๋ถ€์ •๋ณด๋กœ ์ฑ„์›๋‹ˆ๋‹ค. ๋‹ค์Œ ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

kubernetes get networkpolicy <policy-name> -o yaml

Kubernetes ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ์‹œ์Šคํ…œ์€ ์˜ค๋ฅ˜๊ฐ€ ์—†๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ฉฐ ์ผ๋ถ€ ์œ ํ˜•์˜ ์˜ค๋ฅ˜๋ฅผ ๋†“์น  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์„ ๋ช…์‹ฌํ•˜์„ธ์š”.

ะ˜ัะฟะพะปะฝะตะฝะธะต

Kubernetes๋Š” ๋„คํŠธ์›Œํฌ ์ •์ฑ… ์ž์ฒด๋ฅผ ๊ตฌํ˜„ํ•˜์ง€ ์•Š์œผ๋ฉฐ CNI(์ปจํ…Œ์ด๋„ˆ ๋„คํŠธ์›Œํ‚น ์ธํ„ฐํŽ˜์ด์Šค)๋ผ๋Š” ๊ธฐ๋ณธ ์‹œ์Šคํ…œ์— ์ œ์–ด ๋ถ€๋‹ด์„ ์œ„์ž„ํ•˜๋Š” API ๊ฒŒ์ดํŠธ์›จ์ด์ผ ๋ฟ์ž…๋‹ˆ๋‹ค. ์ ์ ˆํ•œ CNI๋ฅผ ํ• ๋‹นํ•˜์ง€ ์•Š๊ณ  Kubernetes ํด๋Ÿฌ์Šคํ„ฐ์— ์ •์ฑ…์„ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์€ ๋ฐฉํ™”๋ฒฝ์— ์ •์ฑ…์„ ์„ค์น˜ํ•˜์ง€ ์•Š๊ณ  ๋ฐฉํ™”๋ฒฝ ๊ด€๋ฆฌ ์„œ๋ฒ„์— ์ •์ฑ…์„ ๋งŒ๋“œ๋Š” ๊ฒƒ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ ์ ˆํ•œ CNI๋ฅผ ๋ณด์œ ํ•˜๊ณ  ์žˆ๋Š”์ง€ ๋˜๋Š” Kubernetes ํ”Œ๋žซํผ์˜ ๊ฒฝ์šฐ ํด๋ผ์šฐ๋“œ์—์„œ ํ˜ธ์ŠคํŒ…๋˜๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ์€ ๊ท€ํ•˜์—๊ฒŒ ๋‹ฌ๋ ค ์žˆ์Šต๋‹ˆ๋‹ค. (์ œ๊ณต์ž ๋ชฉ๋ก์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์— โ€” ๋Œ€๋žต. ํŠธ๋žœ์Šค.), CNI๋ฅผ ์„ค์ •ํ•˜๋Š” ๋„คํŠธ์›Œํฌ ์ •์ฑ…์„ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.

์ ์ ˆํ•œ ๋„์šฐ๋ฏธ CNI ์—†์ด ๋„คํŠธ์›Œํฌ ์ •์ฑ…์„ ์„ค์ •ํ•˜๋ฉด Kubernetes์—์„œ ๊ฒฝ๊ณ ๋ฅผ ํ‘œ์‹œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ƒํƒœ ์ €์žฅ ๋˜๋Š” ์ƒํƒœ ๋น„์ €์žฅ?

๋‚ด๊ฐ€ ๋งŒ๋‚œ ๋ชจ๋“  Kubernetes CNI๋Š” ์ƒํƒœ ์ €์žฅํ˜•์ž…๋‹ˆ๋‹ค(์˜ˆ: Calico๋Š” Linux conntrack์„ ์‚ฌ์šฉํ•จ). ์ด๋ฅผ ํ†ตํ•ด ํฌ๋“œ๋Š” ์žฌ์„ค์ •ํ•  ํ•„์š” ์—†์ด ์‹œ์ž‘๋œ TCP ์—ฐ๊ฒฐ์—์„œ ์‘๋‹ต์„ ์ˆ˜์‹ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” ์ƒํƒœ ์ €์žฅ์„ ๋ณด์žฅํ•˜๋Š” Kubernetes ํ‘œ์ค€์„ ์•Œ์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.

๊ณ ๊ธ‰ ๋ณด์•ˆ ์ •์ฑ… ๊ด€๋ฆฌ

Kubernetes์—์„œ ๋ณด์•ˆ ์ •์ฑ… ์‹œํ–‰์„ ๊ฐœ์„ ํ•˜๋Š” ๋ช‡ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. Service Mesh ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด์€ ์‚ฌ์ด๋“œ์นด ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋น„์Šค ์ˆ˜์ค€์—์„œ ์ƒ์„ธํ•œ ์›๊ฒฉ ์ธก์ • ๋ฐ ํŠธ๋ž˜ํ”ฝ ์ œ์–ด๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์šฐ๋ฆฌ๋Š” ์ด์Šค ํ‹ฐ์˜ค.
  2. ์ผ๋ถ€ CNI ๊ณต๊ธ‰์—…์ฒด๋Š” Kubernetes ๋„คํŠธ์›Œํฌ ์ •์ฑ…์„ ๋›ฐ์–ด๋„˜๋„๋ก ๋„๊ตฌ๋ฅผ ํ™•์žฅํ–ˆ์Šต๋‹ˆ๋‹ค.
  3. ํˆฌํ•€ ์˜ค๋ฅด์นด Kubernetes ๋„คํŠธ์›Œํฌ ์ •์ฑ…์— ๋Œ€ํ•œ ๊ฐ€์‹œ์„ฑ๊ณผ ์ž๋™ํ™”๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

Tufin Orca ํŒจํ‚ค์ง€๋Š” Kubernetes ๋„คํŠธ์›Œํฌ ์ •์ฑ…์„ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค(์œ„ ์Šคํฌ๋ฆฐ์ƒท์˜ ์†Œ์Šค์ด๊ธฐ๋„ ํ•จ).

์ถ”๊ฐ€ ์ •๋ณด

๊ฒฐ๋ก 

Kubernetes ๋„คํŠธ์›Œํฌ ์ •์ฑ…์€ ํด๋Ÿฌ์Šคํ„ฐ ๋ถ„ํ• ์„ ์œ„ํ•œ ์ข‹์€ ๋„๊ตฌ ์„ธํŠธ๋ฅผ ์ œ๊ณตํ•˜์ง€๋งŒ ์ง๊ด€์ ์ด์ง€ ์•Š๊ณ  ๋ฏธ๋ฌ˜ํ•œ ๋ถ€๋ถ„์ด ๋งŽ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ณต์žก์„ฑ์œผ๋กœ ์ธํ•ด ๋งŽ์€ ๊ธฐ์กด ํด๋Ÿฌ์Šคํ„ฐ ์ •์ฑ…์— ๋ฒ„๊ทธ๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ๊ฐ€๋Šฅํ•œ ํ•ด๊ฒฐ์ฑ…์—๋Š” ์ •์ฑ… ์ •์˜ ์ž๋™ํ™” ๋˜๋Š” ๊ธฐํƒ€ ๋ถ„ํ•  ๋„๊ตฌ ์‚ฌ์šฉ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

์ด ๊ฐ€์ด๋“œ๊ฐ€ ๋ช‡ ๊ฐ€์ง€ ์งˆ๋ฌธ์„ ํ•ด๊ฒฐํ•˜๊ณ  ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

๋ฒˆ์—ญ๊ฐ€์˜ ์ถ”์‹ 

๋ธ”๋กœ๊ทธ์—์„œ๋„ ์ฝ์–ด๋ณด์„ธ์š”.

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€