쿠버네티스에서 네트워크 폴리시(Network Policy)를 설정하는 방법은?
_____Q1: 쿠버네티스 네트워크 폴리시란 무엇인가요?
A1: 네트워크 폴리시는 쿠버네티스 클러스터 내에서 파드 간 트래픽 흐름을 제어하는 규칙입니다. 이를 통해 어떤 파드가 어떤 파드와 통신할 수 있는지 허용하거나 차단할 수 있습니다.
Q2: 네트워크 폴리시가 꼭 필요한가요?
A2: 기본적으로 쿠버네티스는 모든 파드 간에 자유로운 네트워크 통신을 허용합니다. 보안이나 트래픽 분리 목적상 파드 간 혹은 네임스페이스 간 통신을 제한하려면 네트워크 폴리시를 반드시 사용해야 합니다.
Q3: 네트워크 폴리시를 설정하려면 무엇이 필요한가요?
A3: 네트워크 폴리시 기능을 사용하려면 클러스터에 네트워크 플러그인(CNI)이 네트워크 폴리시를 지원해야 합니다. 예를 들어 Calico, Weave Net, Cilium 등이 네트워크 폴리시를 지원합니다.
Q4: 네트워크 폴리시 리소스는 어떻게 정의하나요?
A4: 네트워크 폴리시는 Kubernetes API의 `NetworkPolicy` 리소스로 정의하며, 다음 요소를 포함합니다.
- `podSelector`: 정책 적용 대상 파드를 지정
- `policyTypes`: 적용 대상 트래픽 방향(Ingress, Egress) 지정
- `ingress`/`egress`: 허용할 트래픽 규칙 목록 지정
예:
```yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-nginx
namespace: default
spec:
podSelector:
matchLabels:
app: nginx
policyTypes:
- Ingress
ingress:
- from:
- podSelector:
matchLabels:
role: frontend
```
Q5: 기본 모든 트래픽을 차단하고 싶으면 어떻게 해야 하나요?
A5: 네트워크 폴리시를 생성하고 `podSelector`를 원하는 파드로 설정하며, `ingress` 또는 `egress` 규칙을 비워두면 기본적으로 모든 수신 혹은 송신 트래픽을 차단합니다.
A6: `from` 또는 `to` 필드에서 `namespaceSelector`를 사용해 네임스페이스 레이블로 트래픽을 허용할 수 있습니다. 예:
```yaml
ingress:
- from:
- namespaceSelector:
matchLabels:
project: myproject
```
Q7: 특정 IP 대역에서만 접속을 허용할 수 있나요?
A7: 네트워크 폴리시 내 `ipBlock` 필드를 사용해 CIDR 범위를 지정할 수 있습니다. 예:
```yaml
ingress:
- from:
- ipBlock:
cidr: 192.168.0.0/16
except:
- 192.168.1.0/24
```
Q8: 설정한 네트워크 폴리시가 바로 적용되나요?
A8: 네트워크 폴리시는 생성 또는 수정 후 즉시 적용됩니다. 하지만 CNI 플러그인의 구현 및 파드 상태에 따라 약간의 지연이 있을 수 있습니다.
Q9: 네트워크 폴리시 디버깅 방법은?
A9:
- `kubectl describe networkpolicy <이름>`으로 정책 상세 정보 확인
- `kubectl get pods --show-labels`로 라벨 확인
- `kubectl exec`로 파드 내에서 ping 또는 curl 테스트
- CNI 플러그인 로그 확인
Q10: 네트워크 폴리시 적용 후 통신 문제가 있다면?
A10:
- 네트워크 폴리시가 제대로 작성되었는지 라벨과 셀렉터를 점검
- 네임스페이스와 파드 라벨이 정확한지 확인
- 정책에서 허용한 트래픽 방향(Ingress/Egress)을 재검토
- 클러스터 네트워크 플러그인이 네트워크 폴리시를 지원하는지 확인
---
요약하면, 쿠버네티스 네트워크 폴리시는 네트워크 트래픽 흐름을 선언적으로 제어하기 위한 리소스이며, CNI 플러그인이 이를 지원해야 사용 가능합니다. 파드 레이블과 네임스페이스를 기반으로 허용/차단 규칙을 정의해 보안 정책을 강화할 수 있습니다.
이를 통해 특정 파드가 다른 파드와 통신할 수 있는지 여부를 정의할 수 있습니다.
네트워크 폴리시는 기본적으로 클러스터 내의 네트워크 보안을 강화하고, 서비스 간의 통신을 세밀하게 조정하는 데 유용합니다.
아래에서는 쿠버네티스에서 네트워크 폴리시를 설정하는 방법에 대해 자세히 설명하겠습니다.
1. 네트워크 폴리시의 기본 개념네트워크 폴리시는 쿠버네티스 클러스터 내에서 파드 간의 트래픽을 제어하는 규칙 집합입니다.
네트워크 폴리시는 다음과 같은 요소로 구성됩니다:- 선택자(Selector) : 어떤 파드에 적용할지 정의합니다.
레이블을 기반으로 선택할 수 있습니다.
- 인바운드 규칙(Ingress Rules) : 외부에서 해당 파드로 들어오는 트래픽을 제어합니다.
- 아웃바운드 규칙(Egress Rules) : 해당 파드에서 외부로 나가는 트래픽을 제어합니다.
네트워크 폴리시는 기본적으로 허용(Allow) 또는 차단(Deny) 규칙을 설정할 수 있으며, 기본적으로 모든 트래픽이 허용됩니다.
네트워크 폴리시를 설정하면 명시적으로 허용된 트래픽만 허용되고 나머지는 차단됩니다.
2. 네트워크 폴리시 설정하기
2.1. 네트워크 플러그인 선택쿠버네티스에서 네트워크 폴리시를 사용하려면, 네트워크 플러그인이 네트워크 폴리시를 지원해야 합니다.
일반적으로 사용되는 네트워크 플러그인으로는 Calico, Weave Net, Cilium 등이 있습니다.
각 플러그인마다 네트워크 폴리시를 구현하는 방식이 다를 수 있으므로, 사용 중인 플러그인의 문서를 참조하여 설정 방법을 확인해야 합니다.
2.2. 네트워크 폴리시 YAML 파일 작성네트워크 폴리시는 YAML 형식으로 정의됩니다.
아래는 기본적인 네트워크 폴리시의 예시입니다.
```yamlapiVersion: networking.k8s.io/v1kind: NetworkPolicymetadata: name: allow-specific-ingress namespace: defaultspec: podSelector: matchLabels: role: frontend policyTypes: - Ingress ingress: - from: - podSelector: matchLabels: role: backend```위의 예시에서 `allow-specific-ingress`라는 이름의 네트워크 폴리시가 정의되어 있습니다.
이 정책은 `role: frontend` 레이블을 가진 파드에 적용되며, `role: backend` 레이블을 가진 파드에서만 인바운드 트래픽을 허용합니다.
2.3. 네트워크 폴리시 적용작성한 YAML 파일을 사용하여 네트워크 폴리시를 클러스터에 적용합니다.
다음 명령어를 사용합니다:```bashkubectl apply -f network-policy.yaml```
2.4. 네트워크 폴리시 확인네트워크 폴리시가 성공적으로 적용되었는지 확인하려면 다음 명령어를 사용합니다:```bashkubectl get networkpolicy -n default```이 명령어는 `default` 네임스페이스에 정의된 모든 네트워크 폴리시를 나열합니다.
3. 네트워크 폴리시의 테스트네트워크 폴리시가 제대로 작동하는지 확인하기 위해, 테스트 파드를 생성하고 네트워크 폴리시가 적용된 파드와의 통신을 시도해 볼 수 있습니다.
예를 들어, `role: frontend` 레이블을 가진 파드에서 `role: backend` 레이블을 가진 파드로의 통신이 성공하는지, 다른 레이블을 가진 파드로의 통신이 차단되는지를 확인합니다.
4. 네트워크 폴리시의 모니터링 및 관리네트워크 폴리시가 적용된 후에는 클러스터의 네트워크 트래픽을 모니터링하고, 필요에 따라 정책을 수정해야 할 수 있습니다.
쿠버네티스의 로깅 및 모니터링 도구를 사용하여 네트워크 트래픽을 분석하고, 네트워크 폴리시가 의도한 대로 작동하는지 확인할 수 있습니다.
5.쿠버네티스에서 네트워크 폴리시는 클러스터 내의 보안을 강화하고, 파드 간의 통신을 세밀하게 제어하는 데 중요한 역할을 합니다.
올바르게 설정된 네트워크 폴리시는 애플리케이션의 보안을 높이고, 비즈니스 요구 사항에 맞는 네트워크 트래픽 흐름을 보장합니다.
네트워크 폴리시를 설정할 때는 항상 클러스터의 아키텍처와 요구 사항을 고려하여 신중하게 접근해야 합니다.
작성자:
박민지 [비회원]
| 작성일자: 1년 전
2024-09-05 03:45:20
조회수: 260 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
조회수: 260 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.