k8s 내부에서 pod 간의 통신을 제어할때 NetworkPolicy 를 사용하여 제어 할 수 있다.

간단한 예로 NetworkPolicy 적용 예를 살펴 보자


조건

1. 파드명이 db인 파드와 web인 파드가 있다

2. 파드명이 db인 파드는 파드명이 web  에서 오는 통신만 허용 하여야 한다

 


상세설명

[db pod yaml]

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    app: db
  name: db
  namespace: np-test
spec:
  containers:
  - image: nginx
    name: db

 

[web pod yaml]

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    app: web
  name: web
  namespace: np-test
spec:
  containers:
  - image: nginx
    name: web

 

[NetworkPolicy]

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: test-network-policy
  namespace: np-test
spec:
  podSelector:
    matchLabels:
      app: db
  policyTypes:
    - Ingress
  ingress:
    - from:
        - podSelector:
            matchLabels:
              app: web
  • NetworkPolicy 의 spec.podSelector 는 대사이 되는 파드를 지정하는 곳이다
  • matchLabels 가 app: db 로 설정 되어 있는내용은, 레이블 값이 app: db 인 파드는 아래 policy 의 정책을 적용 받는다 라는 내용이다
  • policyTypes 는 Ingress, Egress 조건을 지정한다
  • spec.ingress.from.podSelector 부분은 ingress 를 허용할 조건을 가진 파드를 명시한다
  • matchLabels 가 app: web 으로 되어 있는 부분은, 레이블 값이 app: web 인 파드만 위에 명시된 app: db 가 포함된 파드에 트래픽을 허용한다

위에 명시된 yaml 파일을 전부 배포후 테스트

 

1. web pod 에서 db pod 로 통신 확인

2. NetworkPolicy 에서 ingress 부분 삭제 후 통신 여부 테스트

- 아래 처럼 spec.ingress.from.podSelector를  app:was 로 설정하면 app: was 레이블을 가진 파드만 db 파드로 통신이 허용됨

- 아래 yaml로 NetworkPolicy 배포(수정) 후 통신 확인

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: test-network-policy
  namespace: np-test
spec:
  podSelector:
    matchLabels:
      app: db
  policyTypes:
    - Ingress
  ingress:
    - from:
        - podSelector:
            matchLabels:
              app: was

 

NetworkPolicy 수정

 

아래와 같이 동일한 명령어지만 통신이 불가 한 것을 확인 할 수 있다

'k8s > CKAD' 카테고리의 다른 글

ingress 개념 정리  (1) 2024.01.21
[CKAD] Secret 생성 후 Pod 에 env 로 사용  (0) 2023.12.01
[CKAD]k8s Job / CronJob  (0) 2023.09.10
[CKAD]Docker image build  (0) 2023.09.09

+ Recent posts