포워딩 트래픽에 적용하기
host endpoint 정책의 applyOnForward 필드는 규칙이 포워딩 트래픽에 적용되는지, 아니면 로컬 프로세스 트래픽에만 적용되는지를 결정해요. 이 문서는 필드의 기본값, 포워딩 트래픽의 기본 허용 동작, 워크로드 정책과의 상호작용을 정리한 레퍼런스예요.
출처: 문서
본문
applyOnForward가 false이면, host endpoint 정책은 로컬 프로세스로/부터의 트래픽에만 적용돼요.
applyOnForward가 true이면, host endpoint 정책이 포워딩 트래픽에도 적용돼요:
- host endpoint를 통해 들어와서 로컬 워크로드(컨테이너/파드/VM)로 포워딩되는 트래픽.
- 로컬 워크로드에서 나와 host endpoint를 통해 밖으로 포워딩되는 트래픽.
- host endpoint를 통해 들어와서 다른 host endpoint를 통해 밖으로 포워딩되는 트래픽.
기본적으로 applyOnForward는 false예요.
Untracked 정책과 pre-DNAT 정책은 모든 포워딩 트래픽에 적용되므로, applyOnForward가 true로 설정되어 있어야 해요.
포워딩 트래픽은, 그 엔드포인트와 방향에 적용되는 정책이 없다면 기본적으로 허용돼요. 다시 말해, host endpoint가 설정되어 있지만 그 host endpoint와 트래픽 방향에 적용되는 applyOnForward가 true인 정책이 없다면, 그 방향의 포워딩 트래픽은 허용돼요. 예를 들어 포워딩 플로우가 host endpoint를 통해 들어오지만, 그 host endpoint에 적용되는 applyOnForward: true인 Ingress 정책이 없다면 그 플로우는 허용돼요. 반면 그 host endpoint와 방향을 선택하는 applyOnForward: true 정책은 있지만 그 정책들 안에 트래픽을 허용하는 규칙이 없다면, 트래픽은 거부돼요.
이는 Calico가 로컬 프로세스로/부터의 트래픽을 다루는 방식과 달라요: host endpoint가 설정되어 있고 그 트래픽 방향으로 host endpoint를 선택하는 정책이 없거나, 트래픽을 허용하는 규칙이 없다면, 트래픽은 거부돼요.
host endpoint를 통과해서 워크로드 엔드포인트로 포워딩되는 트래픽은, 해당되는 워크로드 엔드포인트 정책도 통과해야 해요. 즉, applyOnForward: true인 host endpoint 정책이 트래픽을 허용하더라도, 워크로드 엔드포인트 정책이 거부하면 패킷은 여전히 드랍돼요.
한 host endpoint로 인그레스하고 포워딩되어 다른 host endpoint로 이그레스하는 트래픽은, 첫 번째 host endpoint의 인그레스 정책과 두 번째 host endpoint의 이그레스 정책을 모두 통과해야 해요.
참고: Calico의 host endpoint 정책 처리는 Calico v3.0 이전과 비교해 두 가지가 바뀌었어요:
- 기본적으로 포워딩 트래픽에 전혀 적용되지 않아요. 기존 정책이 포워딩 트래픽에 적용되길 원한다면, 정책에
applyOnForward: true를 추가해야 해요.applyOnForward: true인 경우에도 Calico v3.0에서의 처리가 이전 릴리스와 정확히 같지는 않아요. host endpoint가 설정되면 Calico v3.0은 그 엔드포인트를 통과하는 포워딩 트래픽을 기본으로 허용하는 반면, 이전 릴리스는 기본으로 거부했기 때문이에요. 모든 host-endpoint 포워딩 트래픽에 대해 default-deny 동작을 유지하고 싶다면, 모든 host endpoint의 모든 트래픽에 적용되는,applyOnForward가true로 설정된 빈 정책을 만들면 돼요.
calicoctl apply -f - <<EOF
- apiVersion: projectcalico.org/v3
kind: GlobalNetworkPolicy
metadata:
name: empty-default-deny
spec:
types:
- Ingress
- Egress
selector: has(host-endpoint)
applyOnForward: true
EOF
참고: 이 정책에는
order필드가 지정되어 있지 않은데, 이 때문에 가장 높은 값이 기본값이 돼요. order 값이 높을수록 우선순위가 가장 낮으므로, Calico는 이 정책을 다른 모든 정책 다음에 적용해요. 더 자세한 논의는 정책 스펙을 참고하세요.
더 알아보기 (Learn more)
포워딩 트래픽은 기본 허용, 로컬 프로세스 트래픽은 기본 거부라는 비대칭이 이 문서의 핵심이에요. default-deny를 유지하려면 applyOnForward: true인 빈 GlobalNetworkPolicy를 올리는 예시를 그대로 쓸 수 있어요.