FelixConfiguration 리소스 레퍼런스의 세 번째 파트예요. Windows 방화벽 규칙 관리부터 시작해서 OpenStack 지원, iptables 데이터플레인의 XDP 가속, VXLAN·IP-in-IP·WireGuard 오버레이 설정이 이어져요. 후반부에는 AWS 연동, 디버그/테스트 전용 설정, 사용량 리포팅, 메타데이터, 헬스 타임아웃 오버라이드, ProtoPort와 RouteTableRanges, AWS IAM 정책 구성까지 다뤄요. 키 이름과 기본값은 원문 그대로 유지했어요.
출처: 문서
본문
windowsManageFirewallRules
| 속성 |
값 |
| 키 |
windowsManageFirewallRules |
| 설명 |
Felix가 Windows 방화벽 규칙을 프로그래밍할지 설정해요(자체 메트릭 포트로의 인바운드 접근을 허용하기 위해서예요). |
| 스키마 |
"Disabled", "Enabled" 중 하나 |
| 기본값 |
Disabled |
데이터플레인: OpenStack 지원
endpointReportingDelay
| 속성 |
값 |
| 키 |
endpointReportingDelay |
| 설명 |
Felix가 엔드포인트 상태를 데이터스토어에 보고하기 전에 기다리는 지연 시간이에요. OpenStack 통합에서만 사용돼요. |
| 스키마 |
duration 문자열, 예를 들면 1m30s123ms 또는 1h5m |
| 기본값 |
1s |
endpointReportingEnabled
| 속성 |
값 |
| 키 |
endpointReportingEnabled |
| 설명 |
Felix가 엔드포인트 상태를 데이터스토어에 보고할지 제어해요. OpenStack 통합에서만 사용돼요. |
| 스키마 |
불리언 |
| 기본값 |
false |
| 속성 |
값 |
| 키 |
metadataAddr |
| 설명 |
VM의 cloud-init 메타데이터 질의에 응답할 서버의 IP 주소 또는 도메인 이름이에요. OpenStack에서는 nova-api를 실행하는 머신(Ubuntu에서는 nova-api-metadata)에 해당해요. none(대소문자 구분 없음)으로 설정하면 Felix가 메타데이터 경로에 어떤 NAT 규칙도 설정하지 않아요. |
| 스키마 |
문자열 |
| 기본값 |
127.0.0.1 |
| 속성 |
값 |
| 키 |
metadataPort |
| 설명 |
메타데이터 서버의 포트예요. 이 값은 global.MetadataAddr('None'이 아니라면)와 함께 169.254.169.254:80에서 MetadataAddr:MetadataPort로 가는 NAT 규칙을 설정하는 데 쓰여요. 대부분의 경우 바꿀 필요가 없어요. |
| 스키마 |
정수: [0,65535] |
| 기본값 |
8775 |
openstackRegion
| 속성 |
값 |
| 키 |
openstackRegion |
| 설명 |
해당 Felix가 속한 리전의 이름이에요. 여러 리전으로 구성된 Calico/OpenStack 배포에서는 각 Felix마다 이 값을 어떤 식으로든 설정해야 해요(데이터모델에서 설정하거나, 각 컴퓨트 노드의 felix.cfg 또는 환경 변수로 설정). 그리고 각 노드의 neutron.conf에 설정된 [calico] openstack_region 값과 일치해야 해요. |
| 스키마 |
문자열 |
| 기본값 |
없음 |
reportingInterval
| 속성 |
값 |
| 키 |
reportingInterval |
| 설명 |
Felix가 데이터스토어에 자신의 상태를 보고하는 주기예요. 0으로 설정하면 보고가 꺼져요. OpenStack 배포에서는 0이 아니어야 해요. |
| 스키마 |
duration 문자열, 예를 들면 1m30s123ms 또는 1h5m |
| 기본값 |
30s |
reportingTTL
| 속성 |
값 |
| 키 |
reportingTTL |
| 설명 |
프로세스 전체 상태 보고의 time-to-live 설정이에요. |
| 스키마 |
duration 문자열, 예를 들면 1m30s123ms 또는 1h5m |
| 기본값 |
1m30s |
데이터플레인: iptables 데이터플레인용 XDP 가속
genericXDPEnabled
| 속성 |
값 |
| 키 |
genericXDPEnabled |
| 설명 |
Generic XDP를 켜서 XDP 오프로드나 드라이버 모드를 지원하지 않는 네트워크 카드도 XDP를 쓸 수 있게 해줘요. iptables보다 나은 성능을 내지 못하기 때문에 권장하지 않아요. |
| 스키마 |
불리언 |
| 기본값 |
false |
xdpEnabled
| 속성 |
값 |
| 키 |
xdpEnabled |
| 설명 |
적합한 untracked 인바운드 deny 규칙에 XDP 가속을 켜요. |
| 스키마 |
불리언 |
| 기본값 |
true |
xdpRefreshInterval
| 속성 |
값 |
| 키 |
xdpRefreshInterval |
| 설명 |
다른 프로세스가 실수로 Calico의 BPF 맵이나 연결된 프로그램을 망가뜨리지 않았는지 확인하려고 Felix가 모든 XDP 상태를 다시 검사하는 주기예요. 0으로 설정하면 XDP 리프레시를 끌 수 있어요. |
| 스키마 |
duration 문자열, 예를 들면 1m30s123ms 또는 1h5m |
| 기본값 |
1m30s |
오버레이: VXLAN 오버레이
vxlanEnabled
| 속성 |
값 |
| 키 |
vxlanEnabled |
| 설명 |
IPv4 VXLAN 네트워킹을 위해 Felix가 VXLAN 터널 디바이스를 생성할지 대신 지정해요. Felix가 기존 IP 풀을 기준으로 판단하기 때문에 생략할 수 있어요. |
| 스키마 |
불리언 |
| 기본값 |
없음 |
vxlanMTU
| 속성 |
값 |
| 키 |
vxlanMTU |
| 설명 |
IPv4 VXLAN 터널 디바이스에 설정할 MTU예요. Felix가 호스트 인터페이스의 MTU를 기준으로 자동 감지하기 때문에 생략할 수 있어요. |
| 스키마 |
정수 |
| 기본값 |
0 |
vxlanMTUV6
| 속성 |
값 |
| 키 |
vxlanMTUV6 |
| 설명 |
IPv6 VXLAN 터널 디바이스에 설정할 MTU예요. Felix가 호스트 인터페이스의 MTU를 기준으로 자동 감지하기 때문에 생략할 수 있어요. |
| 스키마 |
정수 |
| 기본값 |
0 |
vxlanPort
| 속성 |
값 |
| 키 |
vxlanPort |
| 설명 |
VXLAN 트래픽에 사용할 UDP 포트 번호예요. |
| 스키마 |
정수 |
| 기본값 |
4789 |
vxlanVNI
| 속성 |
값 |
| 키 |
vxlanVNI |
| 설명 |
VXLAN 트래픽에 사용할 VXLAN VNI예요. 기본값이 시스템에서 이미 사용 중이라면 바꿔야 할 수도 있어요. |
| 스키마 |
정수 |
| 기본값 |
4096 |
오버레이: IP-in-IP
ipipEnabled
| 속성 |
값 |
| 키 |
ipipEnabled |
| 설명 |
Felix가 호스트에 IPIP 인터페이스를 구성할지 대신 지정해요. Felix가 기존 IP 풀을 기준으로 판단하기 때문에 생략할 수 있어요. |
| 스키마 |
불리언 |
| 기본값 |
없음 |
ipipMTU
| 속성 |
값 |
| 키 |
ipipMTU |
| 설명 |
IPIP 터널 디바이스에 설정할 MTU를 제어해요. Felix가 호스트 인터페이스의 MTU를 기준으로 자동 감지하기 때문에 생략할 수 있어요. |
| 스키마 |
정수 |
| 기본값 |
0 |
오버레이: WireGuard
wireguardEnabled
| 속성 |
값 |
| 키 |
wireguardEnabled |
| 설명 |
IPv4에서 Wireguard를 켤지 제어해요(IPv4 언더레이 네트워크 위에서 IPv4 트래픽을 캡슐화해요). |
| 스키마 |
불리언 |
| 기본값 |
false |
wireguardEnabledV6
| 속성 |
값 |
| 키 |
wireguardEnabledV6 |
| 설명 |
IPv6에서 Wireguard를 켤지 제어해요(IPv6 언더레이 네트워크 위에서 IPv6 트래픽을 캡슐화해요). |
| 스키마 |
불리언 |
| 기본값 |
false |
wireguardHostEncryptionEnabled
| 속성 |
값 |
| 키 |
wireguardHostEncryptionEnabled |
| 설명 |
Wireguard 호스트 간(host-to-host) 암호화를 켤지 제어해요. |
| 스키마 |
불리언 |
| 기본값 |
false |
wireguardInterfaceName
| 속성 |
값 |
| 키 |
wireguardInterfaceName |
| 설명 |
IPv4 Wireguard 인터페이스에 사용할 이름을 지정해요. |
| 스키마 |
문자열 |
| 기본값 |
wireguard.cali |
wireguardInterfaceNameV6
| 속성 |
값 |
| 키 |
wireguardInterfaceNameV6 |
| 설명 |
IPv6 Wireguard 인터페이스에 사용할 이름을 지정해요. |
| 스키마 |
문자열 |
| 기본값 |
wg-v6.cali |
wireguardListeningPort
| 속성 |
값 |
| 키 |
wireguardListeningPort |
| 설명 |
IPv4 Wireguard가 사용하는 리스닝 포트를 제어해요. |
| 스키마 |
정수 |
| 기본값 |
51820 |
wireguardListeningPortV6
| 속성 |
값 |
| 키 |
wireguardListeningPortV6 |
| 설명 |
IPv6 Wireguard가 사용하는 리스닝 포트를 제어해요. |
| 스키마 |
정수 |
| 기본값 |
51821 |
wireguardMTU
| 속성 |
값 |
| 키 |
wireguardMTU |
| 설명 |
IPv4 Wireguard 인터페이스의 MTU를 제어해요. Configuring MTU 문서를 참고하세요. |
| 스키마 |
정수 |
| 기본값 |
0 |
wireguardMTUV6
| 속성 |
값 |
| 키 |
wireguardMTUV6 |
| 설명 |
IPv6 Wireguard 인터페이스의 MTU를 제어해요. Configuring MTU 문서를 참고하세요. |
| 스키마 |
정수 |
| 기본값 |
0 |
wireguardKeepAlive
| 속성 |
값 |
| 키 |
wireguardKeepAlive |
| 설명 |
Wireguard PersistentKeepalive 옵션을 제어해요. 끄려면 0으로 설정해요. |
| 스키마 |
duration 문자열, 예를 들면 1m30s123ms 또는 1h5m |
| 기본값 |
0s |
wireguardRoutingRulePriority
| 속성 |
값 |
| 키 |
wireguardRoutingRulePriority |
| 설명 |
Wireguard 라우팅 규칙에 사용할 우선순위 값을 제어해요. |
| 스키마 |
정수 |
| 기본값 |
99 |
wireguardThreadingEnabled
AWS 연동
awsSrcDstCheck
| 속성 |
값 |
| 키 |
awsSrcDstCheck |
| 설명 |
Felix가 자신이 실행 중인 EC2 인스턴스의 "소스/데스트 검사(source/dest check)" 설정을 바꿔 볼지 제어해요. "Disable" 값은 소스/데스트 검사를 끄려고 시도해요. 검사를 끄면 같은 AWS 서브넷 안에서 캡슐화 없이 워크로드 트래픽을 보낼 수 있어요. |
| 스키마 |
"Disable", "DoNothing", "Enable" 중 하나 |
| 기본값 |
DoNothing |
디버그/테스트 전용 (일반적으로 지원되지 않음)
debugDisableLogDropping
| 속성 |
값 |
| 키 |
debugDisableLogDropping |
| 설명 |
로그 버퍼가 가득 찼을 때 로그 메시지를 버리는 동작을 꺼요. 로그 쓰기가 병목이면 성능에 큰 영향을 줄 수 있어요. |
| 스키마 |
불리언 |
| 기본값 |
false |
debugHost
| 속성 |
값 |
| 키 |
debugHost |
| 설명 |
디버그 포트를 바인딩할 호스트 IP 또는 호스트 이름이에요. DebugPort가 설정된 경우에만 사용돼요. |
| 스키마 |
문자열 |
| 기본값 |
localhost |
debugMemoryProfilePath
| 속성 |
값 |
| 키 |
debugMemoryProfilePath |
| 설명 |
시그널로 트리거됐을 때 메모리 프로파일을 기록할 경로예요. |
| 스키마 |
문자열 |
| 기본값 |
없음 |
debugPort
| 속성 |
값 |
| 키 |
debugPort |
| 설명 |
설정하면 Felix의 디버그 HTTP 포트가 켜져서 메모리와 CPU 프로파일을 가져올 수 있어요. 디버그 포트는 안전하지 않으니 인터넷에 노출하면 안 돼요. |
| 스키마 |
정수: [0,65535] |
| 기본값 |
없음 |
debugSimulateCalcGraphHangAfter
| 속성 |
값 |
| 키 |
debugSimulateCalcGraphHangAfter |
| 설명 |
지정한 시간이 지난 뒤 계산 그래프(calculation graph)가 멈추는 상황을 시뮬레이션해요. 워치독 시스템 테스트에서만 유용해요! |
| 스키마 |
duration 문자열, 예를 들면 1m30s123ms 또는 1h5m |
| 기본값 |
0s |
debugSimulateDataplaneApplyDelay
| 속성 |
값 |
| 키 |
debugSimulateDataplaneApplyDelay |
| 설명 |
모든 데이터플레인 연산에 인위적인 지연을 추가해요. 부하가 심한 시스템을 시뮬레이션하는 테스트 용도로만 유용해요. |
| 스키마 |
duration 문자열, 예를 들면 1m30s123ms 또는 1h5m |
| 기본값 |
0s |
debugSimulateDataplaneHangAfter
| 속성 |
값 |
| 키 |
debugSimulateDataplaneHangAfter |
| 설명 |
지정한 시간이 지난 뒤 데이터플레인이 멈추는 상황을 시뮬레이션해요. 워치독 시스템 테스트에서만 유용해요! |
| 스키마 |
duration 문자열, 예를 들면 1m30s123ms 또는 1h5m |
| 기본값 |
0s |
사용량 리포팅
usageReportingEnabled
| 속성 |
값 |
| 키 |
usageReportingEnabled |
| 설명 |
익명의 Calico 버전 번호와 클러스터 크기를 projectcalico.org에 보고해요. 사용량 서버가 돌려준 경고를 로그로 남겨요. 예를 들어 사용 중인 Calico 버전에서 중대한 보안 취약점이 발견됐을 때요. |
| 스키마 |
불리언 |
| 기본값 |
true |
usageReportingInitialDelay
| 속성 |
값 |
| 키 |
usageReportingInitialDelay |
| 설명 |
Felix가 보고를 만들기 전의 최소 지연 시간을 제어해요. |
| 스키마 |
duration 문자열, 예를 들면 1m30s123ms 또는 1h5m |
| 기본값 |
5m0s |
usageReportingInterval
| 속성 |
값 |
| 키 |
usageReportingInterval |
| 설명 |
Felix가 보고를 만드는 주기를 제어해요. |
| 스키마 |
duration 문자열, 예를 들면 1m30s123ms 또는 1h5m |
| 기본값 |
24h0m0s |
메타데이터
| 필드 |
설명 |
허용되는 값 |
스키마 |
| name |
이 리소스 인스턴스를 설명하는 고유한 이름이에요. 필수 값이에요. |
알파벳·숫자 문자열에 ., _, -를 선택적으로 쓸 수 있어요. |
string |
- Calico는 Felix의 전역 기본 구성 설정을 담은
default라는 이름의 리소스를 자동으로 만들어요. calicoctl로 이 설정을 조회하고 수정할 수 있어요.
- 이름이
node.<nodename>인 리소스는 노드별 오버라이드 설정을 담고 있고, <nodename> 노드에 적용돼요. 노드를 삭제하면 그 노드와 연결된 FelixConfiguration 리소스도 함께 삭제돼요.
genericXDPEnabled와 xdpRefreshInterval은 bpfEnabled가 false이고 xdpEnabled가 true일 때만 의미가 있어요. 다시 말해 iptables 데이터플레인에서 XDP가 서비스 거부(DoS) 방지 정책을 가속하는 경우예요.
bpfEnabled가 true이면 "xdp" 설정은 모두 효과가 없어요. BPF 모드에서는 정책 구현이 항상, 그 시점에 쓸 수 있는 가장 좋은 BPF 기술로 가속되거든요.
헬스 타임아웃 오버라이드
Felix는 여러 내부 루프를 감시하는 liveness/readiness 워치독 타이머를 갖고 있어요. 루프가 정해진 타임아웃 안에 "check-in"하지 못하면 Felix는 헬스 포트에서(쿠버네티스 시스템에서는 kubelet이 감시해요) non-Ready 또는 non-Live를 보고해요. Felix가 non-Live를 보고하면 파드가 재시작될 수 있어요.
쿠버네티스에서 calico-node 파드의 readiness 또는 liveness 검사가 간헐적으로 실패하면, calico-node 파드 로그에서 전체 헬스 상태를 알려주는 Felix 로그를 확인하세요(컴포넌트 목록은 어떤 기능이 켜져 있는지에 따라 달라져요):
+---------------------------+---------+----------------+-----------------+--------+
| COMPONENT | TIMEOUT | LIVENESS | READINESS | DETAIL |
+---------------------------+---------+----------------+-----------------+--------+
| CalculationGraph | 30s | reporting live | reporting ready | |
| FelixStartup | 0s | reporting live | reporting ready | |
| InternalDataplaneMainLoop | 1m30s | reporting live | reporting ready | |
+---------------------------+---------+----------------+-----------------+--------+
헬스 타임아웃이 "timed out"으로 표시된다면 healthTimeoutOverrides 필드로 오버라이드를 적용해 보는 게 도움이 될 수 있어요:
...
spec:
healthTimeoutOverrides:
- name: InternalDataplaneMainLoop
timeout: "5m"
- name: CalculationGraph
timeout: "1m30s"
...
타임아웃 값을 0으로 설정하면 그 타임아웃이 꺼져요.
ProtoPort
| 필드 |
설명 |
허용되는 값 |
스키마 |
| port |
정확히 일치하는 포트예요. |
0-65535 |
int |
| protocol |
일치시킬 프로토콜이에요. |
tcp, udp, sctp |
string |
| net |
일치시킬 CIDR이에요. |
유효한 CIDR (예: 192.168.0.0/16) |
string |
다음 예제에서 net: ""과 net: "0.0.0.0/0"은 정책 적용 시 같게 처리된다는 점을 기억하세요.
...
spec:
failsafeInboundHostPorts:
- net: "192.168.1.1/32"
port: 22
protocol: tcp
- net: ""
port: 67
protocol: udp
failsafeOutboundHostPorts:
- net: "0.0.0.0/0"
port: 67
protocol: udp
...
RouteTableRange
RouteTableRange 옵션은 이제 폐기(deprecated)됐고, RouteTableRanges를 사용하세요.
| 필드 |
설명 |
허용되는 값 |
스키마 |
| min |
사용할 최소 인덱스예요. |
1-250 |
int |
| max |
사용할 최대 인덱스예요. |
1-250 |
int |
RouteTableRanges
RouteTableRanges는 RouteTableRange 객체의 목록이에요:
| 필드 |
설명 |
허용되는 값 |
스키마 |
| min |
사용할 최소 인덱스예요. |
1 - 4294967295 |
int |
| max |
사용할 최대 인덱스예요. |
1 - 4294967295 |
int |
RouteTableRanges 목록의 각 항목은 Calico가 쓸 수 있는 라우트 테이블의 범위를 지정해요. 기본적으로 Calico는 1-250 범위 하나를 사용해요. 범위가 Linux의 예약 테이블 범위(253-255)에 걸치면 그 테이블들은 목록에서 자동으로 제외돼요. Calico가 모르는 서드파티 시스템이 다른 테이블 범위를 예약하고 있을 수도 있어요. 이런 경우에는 여러 범위를 정의해서 민감한 범위의 아래쪽과 위쪽 테이블을 각각 지정할 수 있어요:
target tables 65-99, and 256-1000, skipping 100-255
calicoctl patch felixconfig default --type=merge -p '{"spec":{"routeTableRanges": [{"Min": 65, "Max": 99}, {"Min": 256, "Max": 1000}] }}
참고, 성능 때문에 Felix가 받아들이는 라우트 테이블의 총 개수는 최대 65535(2*16)예요.
RouteTableRange와 RouteTableRanges를 둘 다 지정하는 건 지원되지 않고, API에서 오류가 나요.
소스-데스트 검사 구성을 위한 AWS IAM 역할/정책
필요한 IAM 역할과 정책이 설정돼 있다면 awsSrcDstCheck를 Disable로 설정하는 것만으로 클러스터의 EC2 인스턴스에서 source-destination-check가 자동으로 꺼져요. 클러스터 노드의 IAM 역할에 할당된 정책 중 하나에는 다음과 비슷한 명령문이 들어 있어야 해요:
{
"Effect": "Allow",
"Action": [
"ec2:DescribeInstances",
"ec2:ModifyNetworkInterfaceAttribute"
],
"Resource": "*"
}
위 명령문이 들어 있는 정책이 노드 역할에 붙어 있지 않다면 새 정책을 붙이세요. 예를 들어 노드 역할이 test-cluster-nodeinstance-role이라면 AWS 콘솔에서 해당 IAM 역할을 클릭하고, Permission policies 목록에서 위 명령문이 들어간 새 인라인 정책을 정책 JSON 정의에 추가해요. 자세한 내용은 AWS 문서를 참고하세요.
EKS 클러스터라면 필요한 IAM 역할과 정책이 기본으로 준비되어 있어요. 추가 작업은 필요 없어요.
더 알아보기 (Learn more)
FelixConfiguration 레퍼런스의 나머지 키들은 앞 파트에서 이어서 설명해요. OpenStack 연동 환경이라면 metadataAddr과 reportingInterval부터 확인하고, 라우트 테이블 범위를 조정할 때는 RouteTableRanges 사용 예제를 참고하세요.