보안 아이덴티티
보안 아이덴티티 (Security Identity)
보안 아이덴티티는 라벨에서 생성되는 값으로, Cilium이 트래픽을 식별하고 정책을 적용할 때 사용해요. 이번 글에서는 아이덴티티가 어떤 범위로 나뉘는지, 각 범위가 어떤 역할을 맡는지 알아볼게요.
본문
보안 아이덴티티는 라벨에서 생성됩니다. uint32 타입으로 저장되기 때문에 보안 아이덴티티의 최댓값은 2^32 - 1 이고, 최솟값은 1 이야요.
Note
아이덴티티 0은 유효한 값이 아니에요. Hubble 출력에 0이 나타나면 아이덴티티를 찾지 못했다는 뜻이죠. eBPF 데이터패스에서는 특별한 역할을 맡아서 "모든 아이덴티티"를 뜻하며, 정책 맵에서 와일드카드 허용처럼 동작해요.
보안 아이덴티티는 문맥에 따라 여러 범위로 나뉩니다:
- Cluster-local (클러스터 로컬)
- ClusterMesh
- CIDR 기반 정책에서 생성되는 아이덴티티
- 원격 노드를 위해 생성되는 아이덴티티 (선택)
Cluster-local
Cluster-local 아이덴티티 (1)는 1 부터 2^16 - 1 까지의 범위를 가져요. 가장 낮은 값인 1 부터 255 까지는 예약된 아이덴티티 범위에 해당합니다. 자세한 내용은 내부 코드 문서를 참고하세요.
Clustermesh
ClusterMesh (2)에서는 8비트를 cluster-id 로 사용해 ClusterMesh 안에서 클러스터를 식별하며, 0x00FF0000 에 보이는 것처럼 3번째 옥텟에 들어가요. 4번째 옥텟(가장 위쪽 비트)도 0 으로 설정해야 합니다. 다만 CIDR 아이덴티티에는 이 제약이 적용되지 않아요. (3)을 참고하세요.
CIDR 기반 아이덴티티
CIDR 아이덴티티 (3)는 각 노드에 로컬입니다. CIDR 아이덴티티는 1 에서 16777215 까지 시작하지만, 24 만큼 이동(shift)되기 때문에 실제 유효 범위는 1 | (1 << 24) 부터 16777215 | (1 << 24) , 즉 16777217 부터 33554431 까지가 됩니다. CIDR 정책이 적용되면 생성되는 아이덴티티는 노드마다 로컬이라, 같은 CIDR 정책이라고 해도 두 노드에서 동일한 아이덴티티를 갖지 않을 수 있어요.
노드 로컬 아이덴티티
원격 노드 아이덴티티 (4) 역시 각 노드에 로컬입니다. 기능적으로 CIDR 아이덴티티와 거의 비슷하게 동작해요. 각 노드에 로컬이라 클러스터의 노드마다 다를 수 있고, policy-cidr-match-mode 옵션이 nodes 를 포함하거나 enable-node-selector-labels 가 true 로 설정됐을 때 사용됩니다.
노드 로컬 아이덴티티(CIDR 또는 원격 노드)는 Cilium이 관리하는 노드 사이의 트래픽에는 절대 사용되지 않아요. 그래서 VXLAN이나 Geneve 가상 네트워크 필드 안에 들어갈 필요가 없죠.
CIDR이 아닌 아이덴티티는 24비트로 제한되어 패킷의 해당 필드에 들어갈 수 있지만, CIDR 아이덴티티는 이런 패킷에 인코딩되지 않으므로 더 높은 값에서 시작할 수 있어요. 그래서 CIDR 아이덴티티의 최솟값은 2^24 + 1 입니다.
전체적으로 각 범위는 다음과 같이 나타납니다:
0x00000001 - 0x000000FF (1 to 2^8 - 1 ) => reserved identities
0x00000100 - 0x0000FFFF (2^8 to 2^16 - 1 ) => cluster-local identities
0x00010000 - 0x00FFFFFF (2^16 to 2^24 - 1 ) => identities for remote clusters
0x01000000 - 0x01FFFFFF (2^24 to 2^25 - 1 ) => identities for CIDRs (node-local)
0x02000000 - 0x02FFFFFF (2^25 to 2^25 + 2^24 - 1) => identities for remote nodes (local)
0x01010000 - 0xFFFFFFFF (2^25 + 2^24 to 2^32 - 1 ) => reserved for future use
더 알아보기 (Learn more)
- Key-Value Store — Cilium이 아이덴티티 정보를 저장하는 외부 키-값 저장소
- Cilium Identity 내부 코드 문서