Host endpoint
HostEndpoint 리소스는 Calico가 실행 중인 호스트에 붙은 실제 또는 가상 인터페이스를 하나 이상 나타내요. 이 인터페이스를 통해 호스트 기본 네트워크 네임스페이스로 들어오거나 나가는 트래픽에 Calico 정책을 강제해요. 정책이 없을 때의 기본 동작과 인터페이스 지정 방법까지 참조 형식으로 정리했어요.
출처: 문서
본문
호스트 엔드포인트 리소스(HostEndpoint)는 Calico가 실행 중인 호스트에 붙은 하나 이상의 실제 또는 가상 인터페이스를 나타내요. 이 인터페이스를 통해 호스트의 기본 네트워크 네임스페이스로 들어오거나 나가는 트래픽에 Calico 정책을 강제해요.
-
interfaceName: *인 호스트 엔드포인트는 호스트의 모든 실제 또는 가상 인터페이스를 나타내요. -
특정 실제 인터페이스 하나를 위한 호스트 엔드포인트는
interfaceName: <name-of-that-interface>(예:interfaceName: eth0)으로 구성하거나,interfaceName을 비워 두고 인터페이스 IP 중 하나를expectedIPs에 포함해서 구성해요.
각 호스트 엔드포인트는 레이블 집합과 프로파일 목록을 포함할 수 있고, Calico는 이를 사용해 인터페이스에 정책을 적용해요.
호스트로/부터 오가는 외부 트래픽의 기본 동작
호스트 엔드포인트가 만들어져 있고 네트워크 정책이 없다면, Calico의 기본 동작은 그 엔드포인트로/부터 오가는 트래픽을 거부하는 거예요(failsafe 규칙이 허용하는 트래픽은 제외). 이름이 지정된 호스트 엔드포인트(즉, 특정 인터페이스를 나타내는 호스트 엔드포인트)의 경우 Calico는 호스트 엔드포인트에 지정된 인터페이스로/부터 오가는 트래픽만 차단해요. 다른 인터페이스로/부터 오가는 트래픽은 무시돼요.
SECONDARY:
interfaceName: *인 호스트 엔드포인트는 untracked 정책을 지원하지 않아요.
와일드카드 호스트 엔드포인트(즉, 호스트의 모든 인터페이스를 나타내는 호스트 엔드포인트)의 경우 Calico는 호스트의 모든 인터페이스로/부터 오가는 트래픽을 차단해요(failsafe 규칙이 허용하는 트래픽은 제외).
하지만 네트워크 정책이 없을 때 호스트로/부터 오가는 외부 트래픽의 기본 동작은 프로파일을 호스트 엔드포인트와 조합해서 바꿀 수 있어요. Calico는 allow-all ingress와 egress 규칙으로 이루어진 기본 프로파일 리소스 projectcalico-default-allow를 제공해요. projectcalico-default-allow 프로파일이 붙은 호스트 엔드포인트는 정책이 없을 때 "deny-all" 대신 "allow-all" 의미론을 가져요.
참고: 커스텀 iptables 규칙이 있다면, allow-all 규칙을 담은 호스트 엔드포인트(정책 없이)를 사용하면 모든 트래픽이 수락되므로 그 커스텀 규칙을 우회해요.
SECONDARY: 오토 호스트 엔드포인트는
projectcalico-default-allow프로파일을 지정해서 파드 워크로드 엔드포인트와 비슷하게 동작해요.
SECONDARY: 다른 호스트에서 보안 규칙을 렌더링할 때 Calico는
expectedIPs필드를 사용해서 레이블 셀렉터를 IP 주소로 해석해요.expectedIPs필드가 생략되면 레이블을 사용하는 보안 규칙이 이 엔드포인트와 매칭되지 않아요.
호스트에서 로컬 워크로드로 가는 트래픽: 호스트에서 자신의 워크로드 엔드포인트(예: Kubernetes 파드)로 가는 트래픽은 정책이 있어도 항상 허용돼요. 이 덕분에 kubelet liveness와 readiness 프로브는 항상 동작해요.
샘플 YAML
apiVersion: projectcalico.org/v3
kind: HostEndpoint
metadata:
name: some.name
labels:
type: production
spec:
interfaceName: eth0
node: myhost
expectedIPs:
- 192.168.0.1
- 192.168.0.2
profiles:
- profile1
- profile2
ports:
- name: some-port
port: 1234
protocol: TCP
- name: another-port
port: 5432
protocol: UDP
호스트 엔드포인트 정의
메타데이터
| 필드 | 설명 | 허용 값 | 스키마 |
|---|---|---|---|
| name | 이 hostEndpoint의 이름이에요. 필수예요. | ., _, -를 선택적으로 포함하는 영숫자 문자열 |
string |
| labels | 이 엔드포인트에 적용할 레이블 집합이에요. | map |
스펙
| 필드 | 설명 | 허용 값 | 스키마 | 기본값 |
|---|---|---|---|---|
| node | 이 HostEndpoint가 속한 노드의 이름이에요. | string | ||
| interfaceName | 정책을 적용할 * 또는 특정 인터페이스의 이름이에요. |
string | ||
| expectedIPs | 인터페이스와 연결된 기대 IP 주소들이에요. | 유효한 IPv4 또는 IPv6 주소 | list | |
| profiles | 엔드포인트에 적용할 프로파일 목록이에요. | list | ||
| ports | 이 워크로드가 노출하는 네임드 포트 목록이에요. | EndpointPorts 목록 |
EndpointPort
EndpointPort는 이름을 엔드포인트의 특정 TCP/UDP/SCTP 포트와 연결해서, 정책 규칙에서 네임드 포트로 참조할 수 있게 해 줘요.
| 필드 | 설명 | 허용 값 | 스키마 | 기본값 |
|---|---|---|---|---|
| name | 이 포트에 붙일 이름이에요. 정책 규칙에서 참조할 수 있게 해 줘요. 이름은 엔드포인트 안에서 유일해야 해요. | string | ||
| protocol | 이 네임드 포트의 프로토콜이에요. | TCP, UDP, SCTP |
string | |
| port | 워크로드 포트 번호예요. | 1-65535 |
int |
SECONDARY: EndpointPort 항목 자체는 포트의 연결성에 어떤 변화도 만들지 않아요. 정책에서 참조될 때만 효과가 있어요.
더 알아보기 (Learn more)
정책이 없을 때 호스트 엔드포인트의 기본 동작은 deny-all이라는 점이 핵심이에요. 와일드카드(*) 엔드포인트는 untracked 정책을 지원하지 않고, 레이블 기반 규칙에는 expectedIPs가 필요하다는 것도 기억하세요. 커스텀 iptables 규칙을 쓰는 환경에서는 allow-all 프로파일이 그 규칙을 우회한다는 점에 주의하세요.