2025 06 27
2025-06-27¶
k8s networkPolicy¶
참고: https://kubernetes.io/ko/docs/concepts/services-networking/network-policies/
- 개요
- NetworkPolicy를 통해 Pod가 네트워크 상 "엔티티"와 통신할 수 있도록 허용하는 방법 지정
- NetworkPolicy 한쪽-양쪽 종단인 파드인 연결에만 적용됨
- 파드가 통신할 수 있는 엔티티는 다음 3가지 조합을 통해 식별
- 허용되는 다른 파드
- 허용되는 네임스페이스
- IP 블록 (CIDR 범위 기반)
selector를 사용하여pod-/namespace-기반의 네트워크 폴리시 정의 가능
- Pod 격리의 2가지 종류
- Egress에 대한 격리/비격리
- 기본적으로 Pod는 Egress에 대해 비격리 되어 있음 (모든 아웃바운드 연결이 허용)
- Pod가 Egress에 의해 격리되면, Pod에서 나가는 연결중에서 Pod Egress에 적용된 NetworkPolicy의 egress 리스트에 허용된 연결만 허용
- Ingress에 대한 격리/비격리
- 기본적으로 Pod는 Ingress에 대해 비격리 되어 있음 (모든 인바운드 연결이 허용)
- Pod가 Ingress에 의해 격리되면, Pod에 들어오는 연결 중에서 Pod Ingress에 적용된 NetworkPolicy의 ingress 리스트에 허용된 연결만 허용
- Egress에 대한 격리/비격리
- 예시
apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: test-network-policy namespace: default spec: podSelector: # 적용되는 pod 그룹 선택 matchLabels: role: db policyTypes: - Ingress - Egress ingress: - from: # Ingress를 허용할 대상은 다음과 같음 - ipBlock: # 하위 IP 주소들 cidr: 172.17.0.0/16 except: - 172.17.1.0./24 - namespaceSelector: # namespace와 "project=myproject"를 레이블로 가지는 파드 matchLabels: project: myproject - podSelector: # "role=frontend" 레이블의 "default" 네임스페이스 파드 matchLabels: role: frontend ports: - protocol: TCP port: 6379 egress: - to: # Egress를 허용할 대상은 다음과 같음 - ipBlock: cidr: 10.0.0.0/24 ports: - protocol: TCP port: 5978
-
기본 정책
-
기본적으로 모든 인그레스 트래픽 거부
-
모든 인그레스 트래픽 허용
-
기본적으로 모든 이그레스 트래픽 거부
-
모든 이그레스 트래픽 허용
-
기본적으로 모든 인그레스/모든 이그레스 트래픽 거부
-
k8s pod CIDR¶
- 개요
- Pod들이 사용할 IP 주소 범위
- 각 Pod에게 고유한 IP를 부여해야하고, Node 별로 생성되기에 충돌없이 관리하기 위해 Node 별로 IP 대역 나눔
- 클러스터 전체 Pod CIDR
- 클러스터 전체에서 지정한 IP 범위
- ex) kubeadm init 시 설정:
kubeadm init --pod-network-cidr=10.244.0.0/16
- ex) kubeadm init 시 설정:
- 클러스터 전체에서 지정한 IP 범위
- 각 Node의 Pod CIDR
- 노드별로 나눠진 하위 범위
- CNI(Flannel)이 각 노드에 자동 분배
- Node A:
10.244.1.0/24 - Node B:
10.244.2.0/24 - Node C:
10.244.3.0/24
- Node A: