네트워크 셋(Network set)
NetworkSet은 IP 서브넷/CIDR의 임의 집합을 하나로 묶어 Calico 정책에서 매칭할 수 있게 해주는 리소스예요. Calico가 관리하지 않는 외부 네트워크와 주고받는 트래픽에 정책을 적용할 때 특히 유용합니다. 이 문서에서는 NetworkSet의 개념, YAML 예제, 스펙 정의를 소개해요.
출처: 문서
본문
네트워크 셋 리소스(NetworkSet)는 임의의 IP 서브넷/CIDR 집합을 나타내며, Calico 정책으로 매칭될 수 있어요. 네트워크 셋은 Calico가 관리하지 않는 외부 네트워크에서 오거나 그쪽으로 가는 트래픽에 정책을 적용할 때 유용합니다.
NetworkSet은 네임스페이스가 있는 리소스예요. 특정 네임스페이스의 NetworkSet은 그 네임스페이스의 네트워크 정책에만 적용됩니다. 두 리소스가 namespace 값이 같으면 같은 네임스페이스에 있는 거예요. (네임스페이스가 없는 네트워크 셋은 GlobalNetworkSet을 참고하세요.)
CLI에서 리소스 타입을 지정하는 calicoctl 명령어에는 다음 별칭이 지원돼요(모두 대소문자 구분 없음): networkset, networksets, netsets.
각 네트워크 셋의 메타데이터에는 라벨 집합이 포함돼요. Calico가 네트워크 정책 규칙 안의 소스/목적지 셀렉터에 매칭되어야 할 IP 집합을 계산할 때, 그 셀렉터에 매칭되는 네트워크 셋들의 CIDR을 포함시킵니다.
참고: Calico는 패킷의 소스/목적지 IP 주소를 기준으로 매칭하기 때문에, Calico가 활성화된 노드와 네트워크 셋에 나열된 네트워크 사이에 NAT가 있으면 규칙이 의도대로 동작하지 않을 수 있어요. 예를 들어 Kubernetes에서 서비스 IP로 들어오는 트래픽은 도착 호스트에 도달하기 전에 kube-proxy가 SNAT하는 것이 일반적이라, Calico의 워크로드 정책은 실제 소스 대신 kube-proxy가 돌던 호스트의 IP를 소스로 봅니다.
샘플 YAML
apiVersion: projectcalico.org/v3
kind: NetworkSet
metadata:
name: external-database
namespace: staging
labels:
role: db
spec:
nets:
- 198.51.100.0/28
- 203.0.113.0/24
네트워크 셋 정의
메타데이터
| Field | Description | Accepted Values | Schema | Default |
|---|---|---|---|---|
| name | The name of this network set. Required. | Lower-case alphanumeric with optional _ or -. |
string | |
| namespace | Namespace provides an additional qualification to a resource name. | string | "default" | |
| labels | A set of labels to apply to this endpoint. | map |
스펙
| Field | Description | Accepted Values | Schema | Default |
|---|---|---|---|---|
| nets | The IP networks/CIDRs to include in the set. | Valid IPv4 or IPv6 CIDRs, for example "192.0.2.128/25" | list |
더 알아보기 (Learn more)
NetworkSet에 라벨을 붙여두면 정책 셀렉터에서 그 라벨로 CIDR 묶음을 한 번에 참조할 수 있어요. NAT 환경에서는 실제 소스 IP가 가려질 수 있다는 점을 꼭 기억하세요.