[k8s] Network Policy

k8s๋ฅผ ํ†ตํ•œ ์ž์ฒด ํด๋ผ์šฐ๋“œ ๊ตฌ์ถ•์— ์žˆ์–ด์„œ ์ค‘์š”ํ•œ ๊ฒƒ ์ค‘ ํ•˜๋‚˜๋Š”, ๋‹น์—ฐํžˆ ๋ณด์•ˆ์ด๋‹ค.

network policy์€ Pod ๊ฐ„ ๋„คํŠธ์›Œํฌ ํ†ต์‹ ์— ์žˆ์–ด์„œ ์ธ๋ฐ”์šด๋“œ์™€ ์•„์›ƒ๋ฐ”์šด๋“œ ์ œํ•œ์„ ์„ค์ •ํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.
AWS๋ฅผ ์จ๋ดค๋‹ค๋ฉด, VPC์—์„œ ๋‹ค๋ฃจ๋Š” ๋ณด์•ˆ๊ทธ๋ฃน๊ณผ ๋™์น˜๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

https://medium.com/google-cloud/deep-dive-kubernetes-network-policy-in-gke-e9842ec6b1be
๋‹จ, networkpolicy๋Š” pod๋“ค ๊ฐ„์˜ ๋‚ด๋ถ€ ํ†ต์‹ ์—๋งŒ ๊ด€์—ฌํ•œ๋‹ค๋Š” ์ ์„ ์•Œ์•„๋‘๊ธธ ๋ฐ”๋ž€๋‹ค.
์™ธ๋ถ€ ํ†ต์‹ ์— ๋Œ€ํ•œ ์ œ์–ด๋Š” ์‹ ๊ฒฝ์“ฐ์ง€ ์•Š๋Š”๋‹ค.




๊ธฐ๋ณธ ๋™์ž‘

๋ณ„๋‹ค๋ฅธ ์„ค์ •์„ ํ•˜์ง€ ์•Š์œผ๋ฉด, Pod๋“ค๋ผ๋ฆฌ๋Š” ๋‚ด๋ถ€ IP๋ฅผ ํ†ตํ•œ ํ†ต์‹ ์ด ์ „๋ถ€ ๋šซ๋ ค์žˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ์ด๋ ‡๊ฒŒ Pod๋“ค์ด ์žˆ์„ ๋•Œ

nginx-pod์— ๋“ค์–ด๊ฐ€๋ฉด ๋‚˜๋จธ์ง€ test-deploy pod๋“ค์— ๋Œ€ํ•ด์„œ๋„ ์š”์ฒญ์„ ์˜๊ณ  ์‘๋‹ต์„ ๋ฐ›์•„๋ณผ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.


์ด๋ ‡๊ฒŒ ๋ง์ด๋‹ค.

network policy๋Š” ์‰ฝ๊ฒŒ ๋งํ•ด์„œ ๋ฐฉํ™”๋ฒฝ์„ ๊น”์•„์ฃผ๋Š” ๊ธฐ๋Šฅ์„ ํ•œ๋‹ค.




NetworkPolicy ํ™œ์„ฑํ™”

networkpolicy๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋จผ์ € ํด๋Ÿฌ์Šคํ„ฐ ๋‹จ์œ„์—์„œ ๊ธฐ๋Šฅ์„ ํ™œ์„ฑํ™”ํ•ด์•ผ ํ•œ๋‹ค.

๋ฐฉ๋ฒ•์€ ๋„คํŠธ์›Œํฌ ๊ตฌ์„ฑ ํ™˜๊ฒฝ์— ๋”ฐ๋ผ์„œ ๋‹ค๋ฅด๋ฉฐ, CNI ๊ตฌ์„ฑ์— ๋”ฐ๋ผ์„œ๋Š” ์•„์˜ˆ ์‚ฌ์šฉ์ด ๋ถˆ๊ฐ€๋Šฅํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
๋Œ€ํ‘œ์ ์œผ๋กœ flannel์€ Network Policy ๊ธฐ๋Šฅ์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š” CNI๋‹ค.

GKE๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ์—๋Š” ๋‹ค์Œ CLI ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜

gcloud container clusters create CLUSTER_NAME --enable-network-policy --region=๋ฆฌ์ „

์˜ˆ)
gcloud container clusters create cluster-1 --enable-network-policy --region=us-central1-c

์ฝ˜์†”์—์„œ ์ € ์˜ต์…˜์„ ์ผœ๋ฉด ๋œ๋‹ค.

์ดํ›„์—๋Š” ๊ฐ•์ œ ์—…๊ทธ๋ ˆ์ด๋“œ ๊ฐ™์€๊ฑธ ํ†ตํ•ด์„œ node๊ฐ€ ์žฌ๋ฐฐ์น˜๋˜๋„๋ก ์œ ๋„ํ•ด์•ผ ํ•œ๋‹ค.
node๋ฅผ ์ง€์šฐ๊ณ  ๋‹ค์‹œ ๋„์›Œ์•ผ ๋ฐ˜์˜์ด ๋œ๋‹ค.

gcloud container clusters upgrade CLUSTER_NAME --master --region=๋ฆฌ์ „




์ธ๋ฐ”์šด๋“œ ์ „๋ถ€ ๋ง‰๊ธฐ

์ถ”๊ฐ€์„ค์ •์„ ํ•˜์ง€ ์•Š์œผ๋ฉด, ๋ชจ๋“  pod๋“ค๋ผ๋ฆฌ๋Š” ์ œํ•œ์—†์ด ํ†ต์‹ ์„ ์ฃผ๊ณ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.

์ด๋ ‡๊ฒŒ ๋ง์ด๋‹ค.

๊ทผ๋ฐ ์ด๊ฑด ๋ณด์•ˆ์ ์ธ ๊ด€์ ์—์„œ ์ข‹์ง€ ์•Š์€ ๊ตฌ์กฐ๊ณ .. ๋ฐฉํ™”๋ฒฝ๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ณดํ†ต์€ ์ „๋ถ€ ๋‹ค ๋ง‰๋Š”๊ฒŒ ๊ธฐ๋ณธ์ด๋‹ค.
์ „๋ถ€ ๋ง‰์€ ๋‹ค์Œ์— ํ•„์š”ํ•œ ๊ฒƒ๋งŒ ์„ ํƒ์ ์œผ๋กœ ์—ฌ๋Š” ๊ฒƒ์ด๋‹ค.

๋ชจ๋“  ์ธ๋ฐ”์šด๋“œ๋ฅผ ๋ง‰์œผ๋ ค๋ฉด, ๋‹ค์Œ๊ณผ ๊ฐ™์ด NetworkPolicy๋ฅผ ์ •์˜ํ•ด์„œ ์ƒ์„ฑํ•œ๋‹ค.

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

podSelector๋ฅผ ๋น„์›Œ๋‘๋ฉด ๋ชจ๋“  default ๋„ค์ž„์ŠคํŽ˜์ด์Šค์˜ ํŒŒ๋“œ๋ฅผ ์กฐ๊ฑด์œผ๋กœ ๊ฑธ๊ฒŒ ๋˜๊ณ , ingress์— ๋Œ€ํ•œ ์ƒ์„ธ ์„ค์ •๊ฐ’์„ ์ฃผ์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋“  ํŒŒ๋“œ๊ฐ€ ๋ง‰ํžˆ๋Š” ๊ฒƒ์ด๋‹ค.

์—ฌ๊ธฐ์„œ ์œ ์˜ํ•  ์ ์€, NetworkPolicy๋Š” ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๋‹จ์œ„๋กœ๋งŒ ๋™์ž‘ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. default์— ๋งŒ๋“ค์—ˆ์œผ๋ฉด default์˜ Pod์— ๋Œ€ํ•ด์„œ๋งŒ ์ œ์•ฝ์„ ๊ฑด๋‹ค.
๋ฌผ๋ก  ๋‹ค๋ฅธ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์—์„œ default๋กœ ๋“ค์–ด์˜ค๋Š” ์š”์ฒญ์€ ํ†ต์ œํ•  ์ˆ˜ ์žˆ๋‹ค.

์•„๋ฌดํŠผ ์ €๋Œ€๋กœ policy๋ฅผ ๋„์šฐ๊ณ 

๋‹ค์‹œ ์š”์ฒญ์„ ์ด๋ณด๋ฉด

๋ง‰ํžŒ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.




์ธ๋ฐ”์šด๋“œ ํ—ˆ์šฉํ•˜๊ธฐ

์ด๋ฒˆ์—๋Š” ๋ถ€๋ถ„์ ์œผ๋กœ ์ธ๋ฐ”์šด๋“œ๋ฅผ ํ—ˆ์šฉํ•˜๋„๋ก ๊ตฌ์„ฑํ•ด๋ณด์ž
java-server์—์„œ๋งŒ node-server์— ํ†ต์‹ ์„ ํ•  ์ˆ˜ ์žˆ๊ณ , ๋‹ค๋ฅธ pod๋“ค์€ ์ ‘์†์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋„๋ก ๊ตฌ์„ฑํ•˜๋ ค ํ•œ๋‹ค.

๊ทธ๋Ÿผ ์ด๋Ÿฐ ์‹์œผ๋กœ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: test-network-policy
  namespace: default
spec:
  podSelector:
    matchLabels:
      app: node-server
  policyTypes:
    - Ingress
    - Egress
  ingress:
    - from:
        - podSelector:
            matchLabels:
              app: java-server
      ports:
        - protocol: TCP
          port: 80
  egress:
    - to:
        - podSelector:
            matchLabels:
              app: java-server
      ports:
        - protocol: TCP
          port: 80

๋ณดํ†ต์€ ์œ„์™€ ๊ฐ™์ด label์„ ์ด์šฉํ•ด ํŒŒ๋“œ๋ฅผ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.
java-server ๋ ˆ์ด๋ธ”์„ ๊ฐ€์ง„ ํŒŒ๋“œ์— ๋Œ€ํ•ด์„œ๋งŒ http ์ธ๋ฐ”์šด๋“œ์™€ ์•„์›ƒ๋ฐ”์šด๋“œ๋ฅผ ํ—ˆ๊ฐ€ํ•ด์ค€ ๊ฒƒ์ด๋‹ค.
์›ํ•œ๋‹ค๋ฉด IP ๋‹จ์œ„๋กœ๋„ ์„ค์ •์ด ๊ฐ€๋Šฅํ•˜๊ธด ํ•˜๋‹ค.

์ € ์ƒํƒœ๋กœ policy๋ฅผ ๋„์šฐ๊ณ 

์ž๋ฐ” ์„œ๋ฒ„์— ๋“ค์–ด๊ฐ€์„œ ๋…ธ๋“œ์„œ๋ฒ„์— ํ˜ธ์ถœ์„ ํ•˜๋ฉด ์ž˜ ๋  ๊ฒƒ์ด๊ณ 

nginx ๋“ฑ์˜ ๋‹ค๋ฅธ pod์—์„œ ํ•˜๋ฉด ๋ง‰ํž ๊ฒƒ์ด๋‹ค.

์ด๋Ÿฐ์‹์œผ๋กœ ์‘์šฉํ•˜๋ฉด ๋œ๋‹ค.



์ฐธ์กฐ
https://kubernetes.io/ko/docs/concepts/services-networking/network-policies/
https://medium.com/google-cloud/deep-dive-kubernetes-network-policy-in-gke-e9842ec6b1be