반응형
1. Network Policy
- 서버의 방화벽과 같이 Pod로의 통신에 대한 접근을 제한할 수 있도록 Kubernetes에서 제공하는 API
- Pod로 들어오는 Inbound(Ingress)와 Pod에서 나가는 Outbound(Egress) 정책을 정의
- 생성 yaml 예시
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: test-network-policy
namespace: default
spec:
podSelector:
matchLabels:
role: 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
- ipBlock
- CIDR IP 대역으로, 특정 IP 대역에서만 트래픽이 들어오도록 지정
- podSelector
- 특정 label을 가지고 있는 Pod들에서 들어오는 트래픽만 허용하도록 지정
- 예를 들어 DB Pod의 경우에는 API server로 부터 들어오는 트래픽만 받는 것과 같은 정책 정의가 가능
- namespaceSelector
- 특정 namespace로 부터 들어오는 트래픽만 허용하도록 지정
- Protocol & Port
- 특정 Protocol 또는 Port로 설정된 트래픽만 허용되는 포트를 정의
반응형
예제1
1) default namespace에서 아래 정보의 Pod를 생성하시오.
- name: poc
- image: nginx
- port: 80
- label: app=poc
2) "partition=customera"를 사용하는 namespace에서만 poc의 80포트로 연결할 수 있도록 default namespace에 'allow-web-from-customera'라는 Network Policy를 설정하시오.
풀이
1) Pod 생성
kubectl run poc --image=nginx --port=80 --labels=app=poc
2) Namespace 생성
# namespace생성
kubectl create ns customera
kubectl create ns customerb
# namespace에 label 설정
kubectl label namespaces customera partition=customera
kubectl label namespaces customerb partition=customerb
3) Network Policy 생성
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-web-from-customera
namespace: default
spec:
podSelector:
matchLabels:
app: poc
policyTypes:
- Ingress
ingress:
- from:
- namespaceSelector:
matchLabels:
partition: customera
ports:
- protocol: TCP
port: 80
- 실행
kubectl apply -f allow-web-from-customera.yaml
- 테스트 방법
# customerb namespace에 리눅스 파드 생성하여 터미널 접속
kubectl run testpod -n customerb --image=centos:7 -it --rm -- /bin/bash
# 실패 (정상적)
curl 192.168.75.100
# customera namespace에 리눅스 파드 생성하여 터미널 접속
kubectl run testpod -n customera --image=centos:7 -it --rm -- /bin/bash
# 성공
curl 192.168.75.100
Thank you!
반응형
'Tools > Kubernetes' 카테고리의 다른 글
[CKA 도전 시리즈] 13. Storage (0) | 2023.02.26 |
---|---|
[CKA 도전 시리즈] 12. Ingress / Core DNS (0) | 2023.02.20 |
[CKA 도전 시리즈] 10. Service ClusterIP (0) | 2023.02.07 |
[CKA 도전 시리즈] 9. Configmap / Secret (0) | 2023.01.26 |
[CKA 도전 시리즈] 8. Node 관리 / Pod Scheduling (0) | 2023.01.22 |