본문으로 바로가기 본문 바로가기
WIKI 기술 지식 베이스

커넥션 트래킹

원문 보기 위키 갱신

Calico는 호스트 엔드포인트 정책에 Linux conntrack를 활용해요. 이 참조 문서는 상태 기반 트래킹이 예상과 다른 패킷 흐름을 만들 때 활용할 수 있는 Linux conntrack 우회 방법을 다뤄요. "정책을 바꿨는데 왜 아직도 허용되지?"라는 상황을 겪고 있다면 이 문서가 답을 줄 거예요.

출처: 문서

본문

Calico는 처리 과정의 중요한 최적화로 Linux의 커넥션 트래킹('conntrack')을 사용해요. 쉽게 말해 Calico는 허용된 플로우(IP 주소와 포트의 쌍 사이)에서 첫 번째 패킷에 대해서만 정책을 검사하고, 이후 같은 플로우의 패킷은 conntrack가 자동으로 허용하므로 Calico가 모든 패킷을 다시 검사하지 않아도 된다는 뜻이에요.

하지만 이 때문에, 이전에 허용되었던 플로우를 막도록 정책을 바꾸었을 때 Calico 정책이 제대로 동작하지 않는 것처럼 보일 수 있어요. 이전에 허용된 플로우에서 최근에 패킷이 오갔고 아직 만료되지 않은 conntrack 상태가 남아 있다면, Calico 정책이 바뀐 후에도 그 conntrack 상태가 같은 IP 주소와 포트 사이의 추가 패킷을 계속 허용해요.

Calico의 현재 구현 기준으로 이 문제에는 두 가지 우회 방법이 있어요.

  • 어떤 방법으로든 conntrack 상태가 만료될 때까지(보통 1분 정도) 해당 IP 주소와 포트 사이에 추가 패킷이 오가지 않게 해요.

  • 'conntrack' 도구를 사용해 관련 conntrack 상태를 삭제해요. 예를 들어 conntrack -D -p tcp --orig-port-dst 80 같은 식이에요.

그러면 이후 새 패킷에는 새 Calico 정책이 적용되는 것을 확인할 수 있을 거예요.

더 알아보기 (Learn more)

정책을 바꾼 직후에는 기존 conntrack 상태가 남아 있어 이전 규칙이 잠시 유지될 수 있어요. 즉시 적용이 필요하면 conntrack 도구로 해당 상태를 지우세요.