Network Policy

zuckerfrei·2024년 1월 12일
0

Kubernetes

목록 보기
47/63

기본적으로 클러스터 내의 모든 파드 간에는 서로 통신이 가능하다.
(만약 network policy가 없다면 web → db 통신도 가능)

그러나 보안을 위해 특정 파드 간에만 통신을 허용하고 싶을 경우, network policy를 추가하여 적용한다.
예) web → was → db 방향으로만 통신할 수 있도록 설정하는 것


Ingress & Egress

Ingress : (내 입장에서) 들어오는 트래픽

Egress : (내 입장에서) 나가는 트래픽


네트워크 정책network policy 생성

다른 k8s 객체처럼 NetworkPolicy manifest file 생성한 후 create

namespace, label + selector 그리고 ip를 사용하여 네트워크 정책np과 파드를 연결시킨다.


예시 1

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: db-policy
spec:
  podSelector: # 이 정책을 적용시킬 파드를 선택
    matchLabels:
      role: db
  policyTypes: # 정책 적용되는 파드의 입장에서 in/out 
  - Ingress
  ingress: # 들어오는 정책
  - from: 
    - podSelector: # 들어오려는? 파드를 선택
        matchLabels:
          name: api-pod
      namespaceSelector: # 네임스페이스 선택
        matchLabels:
          name: prod
    - ipBlock: # 특정 아이피에 대해 접근 허용
        cidr: 192.168.5.10/32
    ports: # 열어놓는 포트
    - protocol: TCP
      port: 3306

위의 예시는 ingress 만 설정된 것임 그래서 egress 즉 나가는 트래픽은 어디로든 나갈 수 있음.


예시 2

만약 DB파드가 백업 서버의 80포트로 백업 서비스를 호출하는 경우
DB파드 입장에서 나가는 정책을 만들어줘야 한다(목적지가 클러스터 외부에 존재하기 때문에)

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: db-policy
spec:
  podSelector: # 이 정책을 적용시킬 파드를 선택
    matchLabels:
      role: db
  policyTypes: # 정책 적용되는 파드의 입장에서 in/out 
  - Ingress
  - Egress
  ingress: # 들어오는 정책
  - from: 
    - podSelector: # 들어오려는? 파드를 선택
        matchLabels:
          name: api-pod
    ports: # 열어놓는 포트
    - protocol: TCP
      port: 3306
   egress: # 나가는 정책
   - to:
     - ipBlock:
         cidr: 192.168.5.10/32 # 나가는 목적지
     ports: # 목적지 포트
     - protocol: TCP 
       port: 80

from, to 주의할 점

selector list를 자세히 살펴봐야 한다.

1번의 설정은 2가지 조건이 모두 부합하는 and 조건으로 작동

2번 설정은 2가지 조건 중 하나만 일치해도 작동

1

ingress:
  - from:
    - namespaceSelector:
        matchLabels:
          user: alice
      podSelector:
        matchLabels:
          role: client

2

...
  ingress:
  - from:
    - namespaceSelector:
        matchLabels:
          user: alice
    - podSelector:
        matchLabels:
          role: client
  ...

1정책에 2가지 in/out 설정하기

특정 파드가 web, mysql 이라는 파드의 각각 다른 포트로 요청보낼 경우

...
  egress:
    - to: # 1번 web
      - podSelector:
          matchLabels: web
      ports:
        - protocol: TCP
          port: 8080            
    - to: # 2번 mysql
      - podSelector:
          matchLabels: mysql
      ports:
        - protocol: TCP
          port: 3306

네트워크 정책network policy을 지원하지 않는 네트워크 솔루션도 존재함
대표적으로 flannel
그 외 kube-router, calico, romana, weave-net 은 지원함

profile
무설탕 음료를 좋아합니다

0개의 댓글