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

기본 연결을 위한 정책 만들기

원문 보기 위키 갱신

호스트 엔드포인트에 보안 정책이 없으면 Calico는 기본적으로 그 엔드포인트와 주고받는 트래픽을 거부해요. 이 문서에서는 실수로 정책을 잘못 구성해도 호스트가 끊기지 않도록 실패 안전(failsafe) 정책을 직접 만드는 방법을 소개합니다. 관리 SSH, etcd, DHCP 같은 필수 연결을 확보하는 예제 정책을 함께 살펴봐요.

출처: 문서

본문

호스트 엔드포인트가 추가될 때 그 엔드포인트에 대한 보안 정책이 없다면, Calico는 failsafe 규칙이 허용하는 트래픽을 제외하고 해당 엔드포인트와 주고받는 트래픽을 기본적으로 거부해요.

failsafe 규칙은 호스트로의 모든 연결이 끊어지는 사고를 막아주지만:

  • 어떤 인터페이스로든 인바운드 SSH를 허용하고, 어떤 인터페이스로든 etcd 포트로의 아웃바운드 트래픽을 허용하기 때문에 지나치게 광범위해요.
  • 사용하는 네트워크에 따라 필요한 포트를 전부 커버하지 못할 수도 있어요. 예를 들어 ICMP나 DHCP 허용에 의존하는 네트워크일 수 있습니다.

따라서 환경에 맞게 조정한 failsafe Calico 보안 정책을 직접 만드는 것을 권장해요. 아래 예제 명령은 그런 방법의 한 예를 보여주는데, calicoctl을 사용해 하나의 정책 리소스를 만들며 이 정책은 다음을 수행해요:

  • 알려진 모든 엔드포인트에 적용됩니다.
  • 정의된 "management" 서브넷에서 오는 인바운드 ssh 접근을 허용해요.
  • 특정 IP의 etcd로 나가는 연결을 허용합니다. etcd 서버가 여러 대라면 목적지마다 규칙을 복제해야 해요.
  • 인바운드 ICMP를 허용해요.
  • DHCP를 위해 67번 포트로 나가는 UDP를 허용합니다.

이 명령을 실행할 때는 꺾쇠 괄호 안의 자리표시자를 배포 환경에 맞는 값으로 바꾸세요.

cat <<EOF | calicoctl create -f -
- apiVersion: projectcalico.org/v3
  kind: GlobalNetworkPolicy
  metadata:
    name: failsafe
  spec:
    selector: "all()"
    order: 0
    ingress:
    - action: Allow
      protocol: TCP
      source:
        nets:
        - "<your management CIDR>"
      destination:
        ports: [22]
    - action: Allow
      protocol: ICMP
    egress:
    - action: Allow
      protocol: TCP
      destination:
        nets: [<your etcd IP>/32]
        ports: [<your etcd ports>]
    - action: Allow
      protocol: TCP
      destination:
        nets: [<your Kubernetes API server IP]
        ports: [<your Kubernetes API server IP ports>]
    - action: Allow
      protocol: UDP
      destination:
        ports: [67]
EOF

이런 정책을 갖추고 나면 failsafe 규칙을 비활성화하고 싶어질 수 있어요.

참고: 규칙 목록의 끝에 도달한 패킷은 다음 정책(order 필드로 정렬)으로 넘어갑니다. 정책의 셀렉터인 all()은 워크로드 엔드포인트를 포함해 모든 엔드포인트와 매칭돼요. 워크로드 엔드포인트와 호스트 엔드포인트를 모두 사용한다면 더 제한적인 셀렉터를 쓰고 싶을 수 있습니다. 예를 들어 관리 인터페이스에 endpoint_type = management 라벨을 붙이고 셀렉터로 endpoint_type == "management"를 사용할 수 있어요. Calico로 워크로드 네트워킹을 한다면 BGP를 허용하는 인바운드/아웃바운드 규칙을 추가해야 합니다. 목적지 포트 179로 가는 TCP 트래픽을 허용하는 ingress와 egress 규칙을 추가하세요.

더 알아보기 (Learn more)

failsafe 규칙은 안전망이지 정답이 아니에요. 환경에 맞는 정책을 만들고 나면 규칙을 꺼서 보안 범위를 좁히는 게 좋습니다. hostendpoints 리소스 문서와 failsafe 규칙 문서를 함께 참고하세요.