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
아래와 같이 동일한 명령어지만 통신이 불가 한 것을 확인 할 수 있다
'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 |