Choose a default theme

You can change your theme from the menu

Calico

Earlier revision · 1View current content

Calico는 컨테이너와 Kubernetes 환경의 네트워크 연결 및 네트워크 보안을 제공하는 프로젝트다. Pod 주소 관리와 통신 경로, 정책 집행을 함께 다룰 수 있다. 오픈 소스판과 상용 제품군의 기능은 구분해야 하며, 제품 소개에 있는 모든 기능이 모든 설치에 포함되는 것은 아니다. 공식 소개에서 범위와 제품 구성을 확인할 수 있다.

연결과 정책의 두 역할

네트워크 구성은 노드와 Pod 사이에 패킷이 어떻게 전달될지 정한다. 환경에 따라 오버레이와 라우팅, 데이터 플레인 방식을 선택하며 MTU·주소 범위·노드 간 통신 조건을 맞춘다. 정책은 연결 가능한 경로 위에서 어떤 통신을 허용할지 결정한다. 네트워크가 된다는 사실과 접근을 적절히 제한했다는 사실은 별개다.

Kubernetes NetworkPolicy는 Pod 레이블과 네임스페이스, 포트 등을 조건으로 허용 범위를 표현한다. 이 자원이 있어도 집행 가능한 네트워크 구현이 필요하다. Calico는 표준 정책을 처리하며 자체 확장 정책도 제공한다. 표준 정책의 기본 흐름은 공식 정책 튜토리얼에서 확인할 수 있다.

장점과 한계

애플리케이션 IP가 바뀌어도 레이블 기반으로 접근 의도를 유지할 수 있고, 여러 환경에서 공통 정책을 사용할 수 있다. 네트워크 구성의 선택지가 넓다는 점도 장점이다. 반면 주소 설계와 라우팅, 캡슐화, 정책 순서 및 데이터 플레인을 이해해야 하므로 도입 방식에 따라 운영 복잡도가 높아진다.

정책 오류는 정상 요청도 차단할 수 있다. 특히 송신 제한을 추가할 때 DNS와 필수 외부 연결을 빠뜨리기 쉽다. 패킷 허용은 사용자 인증이나 업무 권한 검증을 대신하지 않으며, 표준 NetworkPolicy와 Calico 고유 정책의 의미를 혼합해서 해석하지 않는다.

예약 API의 수신 범위 예시

정책 집행이 활성화된 reading-room 연습 네임스페이스에서 reservation Pod의 TCP 8080을 같은 네임스페이스의 frontend Pod에만 허용하는 예시다. 실제 적용 전에 현재 레이블과 다른 정책을 함께 검토한다.

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: reservation-from-frontend
namespace: reading-room
spec:
podSelector:
matchLabels:
app: reservation
policyTypes: [Ingress]
ingress:
- from:
- podSelector:
matchLabels:
app: frontend
ports:
- protocol: TCP
port: 8080

이 정책의 from 안에는 namespaceSelector가 없으므로 Pod 선택자는 같은 네임스페이스를 가리킨다. Ingress만 다루므로 송신을 제한하는 정책은 아니다. 표준 NetworkPolicy의 허용은 여러 정책이 합쳐지므로 다른 정책이 더 넓게 허용하면 이 한 장만으로 전체 접근 범위를 단정할 수 없다.

자주 생기는 오해

정책에 적힌 이름보다 실제 selector가 무엇을 선택하는지 확인해야 한다. 레이블을 바꾸면 허용 대상도 달라진다. 정책 YAML이 서버에 저장됐다는 사실만 확인하지 말고, 허용되어야 하는 요청과 거부되어야 하는 요청을 각각 시험하는 것이 필요하다.

참고 자료