Felix 구성 파트 8
Felix 구성 레퍼런스의 여덟 번째 파트예요. 앞 파트에 이어서 BPF 데이터플레인 설정이 계속 이어져요. 내장 kube-proxy의 헬스 체크 포트와 iptables 정리, 싱크 주기 같은 기본 동작부터 Maglev 룩업 테이블, BPF 맵 크기(conntrack, ipsets, NAT, 라우트) 조정까지 BPF 모드의 리소스와 동작을 세밀하게 다루는 키들이 모여 있어요. 각 항목은 구성 파일 키와 환경 변수 탭으로 각각 확인할 수 있어요.
출처: 문서
본문
탭: 구성 파일
| 속성 | 값 |
|---|---|
| 키 | BPFKubeProxyHealthzPort |
| 설명 | BPF 모드에서 Felix의 내장 kube-proxy 헬스 체크 서버가 바인딩하는 포트를 제어해요. 이 헬스 체크 서버는 외부 로드 밸런서가 이 노드가 트래픽을 받을지 판단할 때 사용해요. 0으로 설정하면 헬스 체크 서버가 꺼져요. |
| 스키마 | Integer |
| 기본값 | 10256 |
탭: 환경 변수
| 속성 | 값 |
|---|---|
| 키 | FELIX_BPFKUBEPROXYHEALTHZPORT |
| 설명 | BPF 모드에서 Felix의 내장 kube-proxy 헬스 체크 서버가 바인딩하는 포트를 제어해요. 이 헬스 체크 서버는 외부 로드 밸런서가 이 노드가 트래픽을 받을지 판단할 때 사용해요. 0으로 설정하면 헬스 체크 서버가 꺼져요. |
| 스키마 | Integer |
| 기본값 | 10256 |
BPFKubeProxyIptablesCleanupEnabled
탭: 구성 파일
| 속성 | 값 |
|---|---|
| 키 | BPFKubeProxyIptablesCleanupEnabled |
| 설명 | BPF 모드에서 활성화하면 Felix가 업스트림 Kubernetes kube-proxy의 iptables 체인을 먼저 나서서 정리해요. kube-proxy가 실행 중이 아닐 때만 활성화해야 해요. |
| 스키마 | Boolean: true, 1, yes, y, t는 True로, false, 0, no, n, f는 False로 (대소문자 구분 없이) 받아들여요. |
| 기본값 | true |
탭: 환경 변수
| 속성 | 값 |
|---|---|
| 키 | FELIX_BPFKUBEPROXYIPTABLESCLEANUPENABLED |
| 설명 | BPF 모드에서 활성화하면 Felix가 업스트림 Kubernetes kube-proxy의 iptables 체인을 먼저 나서서 정리해요. kube-proxy가 실행 중이 아닐 때만 활성화해야 해요. |
| 스키마 | Boolean: true, 1, yes, y, t는 True로, false, 0, no, n, f는 False로 (대소문자 구분 없이) 받아들여요. |
| 기본값 | true |
BPFKubeProxyMinSyncPeriod
탭: 구성 파일
| 속성 | 값 |
|---|---|
| 키 | BPFKubeProxyMinSyncPeriod |
| 설명 | BPF 모드에서 Felix의 내장 kube-proxy가 데이터플레인을 갱신하는 최소 간격을 제어해요. 값을 낮추면 설정 지연이 줄어들고, 값을 높이면 작업을 모아서 처리해 Felix CPU 사용량을 줄여줘요. |
| 스키마 | Seconds (floating point) |
| 기본값 | 1 (1s) |
탭: 환경 변수
| 속성 | 값 |
|---|---|
| 키 | FELIX_BPFKUBEPROXYMINSYNCPERIOD |
| 설명 | BPF 모드에서 Felix의 내장 kube-proxy가 데이터플레인을 갱신하는 최소 간격을 제어해요. 값을 낮추면 설정 지연이 줄어들고, 값을 높이면 작업을 모아서 처리해 Felix CPU 사용량을 줄여줘요. |
| 스키마 | Seconds (floating point) |
| 기본값 | 1 (1s) |
BPFL3IfacePattern
탭: 구성 파일
| 속성 | 값 |
|---|---|
| 키 | BPFL3IfacePattern |
| 설명 | BPFDataIfacePattern에 더해 wireguard나 vxlan처럼 터널 디바이스(즉, L3 디바이스)를 나열할 수 있게 해 주는 정규 표현식이에요. 즉, Calico가 만들지 않은 터널 인터페이스로 Calico 워크로드 트래픽이 흐르는 경우와, 클러스터 외부에서 nodeport와 서비스로 들어오는 트래픽을 처리하는 인터페이스를 여기에 담을 수 있어요. |
| 스키마 | Regular expression |
| 기본값 | none |
탭: 환경 변수
| 속성 | 값 |
|---|---|
| 키 | FELIX_BPFL3IFACEPATTERN |
| 설명 | BPFDataIfacePattern에 더해 wireguard나 vxlan처럼 터널 디바이스(즉, L3 디바이스)를 나열할 수 있게 해 주는 정규 표현식이에요. 즉, Calico가 만들지 않은 터널 인터페이스로 Calico 워크로드 트래픽이 흐르는 경우와, 클러스터 외부에서 nodeport와 서비스로 들어오는 트래픽을 처리하는 인터페이스를 여기에 담을 수 있어요. |
| 스키마 | Regular expression |
| 기본값 | none |
BPFLogFilters
탭: 구성 파일
| 속성 | 값 |
|---|---|
| 키 | BPFLogFilters |
| 설명 | key=값 쌍의 맵이에요. 값은 pcap 필터 표현식이고, 키는 인터페이스 이름으로 'all'은 모든 인터페이스, 'weps'는 모든 워크로드 엔드포인트, 'heps'는 모든 호스트 엔드포인트를 뜻해요. 환경 변수로 지정하면 쉼표로 구분된 key=값 목록을 받아들여요. |
| 스키마 | Comma-delimited list of key=value pairs |
| 기본값 | none |
탭: 환경 변수
| 속성 | 값 |
|---|---|
| 키 | FELIX_BPFLOGFILTERS |
| 설명 | key=값 쌍의 맵이에요. 값은 pcap 필터 표현식이고, 키는 인터페이스 이름으로 'all'은 모든 인터페이스, 'weps'는 모든 워크로드 엔드포인트, 'heps'는 모든 호스트 엔드포인트를 뜻해요. 환경 변수로 지정하면 쉼표로 구분된 key=값 목록을 받아들여요. |
| 스키마 | Comma-delimited list of key=value pairs |
| 기본값 | none |
BPFLogLevel
탭: 구성 파일
| 속성 | 값 |
|---|---|
| 키 | BPFLogLevel |
| 설명 | BPF 데이터플레인 모드일 때 BPF 프로그램의 로그 레벨을 제어해요. "Off", "Info", "Debug" 중 하나예요. 로그는 BPF trace pipe로 출력되고, tc exec bpf debug 명령으로 확인할 수 있어요. |
| 스키마 | debug, info, off 중 하나 |
| 기본값 | off |
탭: 환경 변수
| 속성 | 값 |
|---|---|
| 키 | FELIX_BPFLOGLEVEL |
| 설명 | BPF 데이터플레인 모드일 때 BPF 프로그램의 로그 레벨을 제어해요. "Off", "Info", "Debug" 중 하나예요. 로그는 BPF trace pipe로 출력되고, tc exec bpf debug 명령으로 확인할 수 있어요. |
| 스키마 | debug, info, off 중 하나 |
| 기본값 | off |
BPFMaglevMaxEndpointsPerService
탭: 구성 파일
| 속성 | 값 |
|---|---|
| 키 | BPFMaglevMaxEndpointsPerService |
| 설명 | Maglev가 활성화된 하나의 서비스에 포함될 것으로 예상되는 엔드포인트의 최대 개수예요. Felix가 생성하는 서비스별 Maglev 룩업 테이블의 크기와, 따라서 예약되는 메모리 양에 영향을 줘요. |
| 스키마 | Integer: [1,3000] |
| 기본값 | 100 |
탭: 환경 변수
| 속성 | 값 |
|---|---|
| 키 | FELIX_BPFMAGLEVMAXENDPOINTSPERSERVICE |
| 설명 | Maglev가 활성화된 하나의 서비스에 포함될 것으로 예상되는 엔드포인트의 최대 개수예요. Felix가 생성하는 서비스별 Maglev 룩업 테이블의 크기와, 따라서 예약되는 메모리 양에 영향을 줘요. |
| 스키마 | Integer: [1,3000] |
| 기본값 | 100 |
BPFMaglevMaxServices
탭: 구성 파일
| 속성 | 값 |
|---|---|
| 키 | BPFMaglevMaxServices |
| 설명 | Felix가 룩업 테이블을 할당할 Maglev 활성화 서비스의 예상 최대 개수예요. |
| 스키마 | Integer: [1,3000] |
| 기본값 | 100 |
탭: 환경 변수
| 속성 | 값 |
|---|---|
| 키 | FELIX_BPFMAGLEVMAXSERVICES |
| 설명 | Felix가 룩업 테이블을 할당할 Maglev 활성화 서비스의 예상 최대 개수예요. |
| 스키마 | Integer: [1,3000] |
| 기본값 | 100 |
BPFMapSizeConntrack
탭: 구성 파일
| 속성 | 값 |
|---|---|
| 키 | BPFMapSizeConntrack |
| 설명 | conntrack 맵의 크기를 설정해요. 이 맵은 활성 연결 하나하나에 대한 엔트리를 담을 수 있을 만큼 커야 해요. 주의: conntrack 맵의 크기를 바꾸면 서비스가 흔들릴 수 있어요. |
| 스키마 | Integer |
| 기본값 | 512000 |
탭: 환경 변수
| 속성 | 값 |
|---|---|
| 키 | FELIX_BPFMAPSIZECONNTRACK |
| 설명 | conntrack 맵의 크기를 설정해요. 이 맵은 활성 연결 하나하나에 대한 엔트리를 담을 수 있을 만큼 커야 해요. 주의: conntrack 맵의 크기를 바꾸면 서비스가 흔들릴 수 있어요. |
| 스키마 | Integer |
| 기본값 | 512000 |
BPFMapSizeConntrackCleanupQueue
탭: 구성 파일
| 속성 | 값 |
|---|---|
| 키 | BPFMapSizeConntrackCleanupQueue |
| 설명 | 정리 대기 중인 NAT conntrack 엔트리를 담아 두는 맵의 크기를 설정해요. 한 정리 주기 안에 만료되는 모든 NAT 엔트리를 담을 수 있을 만큼 커야 해요. |
| 스키마 | Integer |
| 기본값 | 100000 |
탭: 환경 변수
| 속성 | 값 |
|---|---|
| 키 | FELIX_BPFMAPSIZECONNTRACKCLEANUPQUEUE |
| 설명 | 정리 대기 중인 NAT conntrack 엔트리를 담아 두는 맵의 크기를 설정해요. 한 정리 주기 안에 만료되는 모든 NAT 엔트리를 담을 수 있을 만큼 커야 해요. |
| 스키마 | Integer |
| 기본값 | 100000 |
BPFMapSizeConntrackScaling
탭: 구성 파일
| 속성 | 값 |
|---|---|
| 키 | BPFMapSizeConntrackScaling |
| 설명 | 사용량에 따라 conntrack 맵 크기를 조절할지, 어떻게 조절할지 제어해요. 'Disabled'는 크기를 기본값 또는 BPFMapSizeConntrack* 설정값에 그대로 두고, 'DoubleIfFull'은 정리 후에도 맵이 거의 꽉 찼을 때 크기를 두 배로 늘려요. |
| 스키마 | Disabled, DoubleIfFull 중 하나 |
| 기본값 | DoubleIfFull |
탭: 환경 변수
| 속성 | 값 |
|---|---|
| 키 | FELIX_BPFMAPSIZECONNTRACKSCALING |
| 설명 | 사용량에 따라 conntrack 맵 크기를 조절할지, 어떻게 조절할지 제어해요. 'Disabled'는 크기를 기본값 또는 BPFMapSizeConntrack* 설정값에 그대로 두고, 'DoubleIfFull'은 정리 후에도 맵이 거의 꽉 찼을 때 크기를 두 배로 늘려요. |
| 스키마 | Disabled, DoubleIfFull 중 하나 |
| 기본값 | DoubleIfFull |
BPFMapSizeIPSets
탭: 구성 파일
| 속성 | 값 |
|---|---|
| 키 | BPFMapSizeIPSets |
| 설명 | ipsets 맵의 크기를 설정해요. IP sets 맵은 네트워크 정책의 소스/데스티네이션 매치에 있는 모든 셀렉터가 매치하는 엔드포인트마다 엔트리를 담을 수 있을 만큼 커야 해요. "all()" 같은 셀렉터는 엔트리 수가 아주 커질 수 있어요(그 경우 엔드포인트마다 엔트리 하나씩 생겨요). |
| 스키마 | Integer |
| 기본값 | 1048576 |
탭: 환경 변수
| 속성 | 값 |
|---|---|
| 키 | FELIX_BPFMAPSIZEIPSETS |
| 설명 | ipsets 맵의 크기를 설정해요. IP sets 맵은 네트워크 정책의 소스/데스티네이션 매치에 있는 모든 셀렉터가 매치하는 엔드포인트마다 엔트리를 담을 수 있을 만큼 커야 해요. "all()" 같은 셀렉터는 엔트리 수가 아주 커질 수 있어요(그 경우 엔드포인트마다 엔트리 하나씩 생겨요). |
| 스키마 | Integer |
| 기본값 | 1048576 |
BPFMapSizeIfState
탭: 구성 파일
| 속성 | 값 |
|---|---|
| 키 | BPFMapSizeIfState |
| 설명 | ifstate 맵의 크기를 설정해요. ifstate 맵은 호스트의 디바이스(호스트 + 워크로드)마다 엔트리를 담을 수 있을 만큼 커야 해요. |
| 스키마 | Integer |
| 기본값 | 1000 |
탭: 환경 변수
| 속성 | 값 |
|---|---|
| 키 | FELIX_BPFMAPSIZEIFSTATE |
| 설명 | ifstate 맵의 크기를 설정해요. ifstate 맵은 호스트의 디바이스(호스트 + 워크로드)마다 엔트리를 담을 수 있을 만큼 커야 해요. |
| 스키마 | Integer |
| 기본값 | 1000 |
BPFMapSizeNATAffinity
탭: 구성 파일
| 속성 | 값 |
|---|---|
| 키 | BPFMapSizeNATAffinity |
| 설명 | 연결의 어피니티를 저장하는 BPF 맵(해당 기능을 켠 서비스용)의 크기를 설정해요. |
| 스키마 | Integer |
| 기본값 | 65536 |
탭: 환경 변수
| 속성 | 값 |
|---|---|
| 키 | FELIX_BPFMAPSIZENATAFFINITY |
| 설명 | 연결의 어피니티를 저장하는 BPF 맵(해당 기능을 켠 서비스용)의 크기를 설정해요. |
| 스키마 | Integer |
| 기본값 | 65536 |
BPFMapSizeNATBackend
탭: 구성 파일
| 속성 | 값 |
|---|---|
| 키 | BPFMapSizeNATBackend |
| 설명 | NAT 백엔드 맵의 크기를 설정해요. 이 값은 엔드포인트의 총 개수예요. 대체로 서비스 개수보다는 커요. |
| 스키마 | Integer |
| 기본값 | 262144 |
탭: 환경 변수
| 속성 | 값 |
|---|---|
| 키 | FELIX_BPFMAPSIZENATBACKEND |
| 설명 | NAT 백엔드 맵의 크기를 설정해요. 이 값은 엔드포인트의 총 개수예요. 대체로 서비스 개수보다는 커요. |
| 스키마 | Integer |
| 기본값 | 262144 |
BPFMapSizeNATFrontend
탭: 구성 파일
| 속성 | 값 |
|---|---|
| 키 | BPFMapSizeNATFrontend |
| 설명 | NAT 프론트엔드 맵의 크기를 설정해요. FrontendMap은 nodeport, 외부 IP, 그리고 각 서비스의 포트마다 엔트리를 담을 수 있을 만큼 커야 해요. |
| 스키마 | Integer |
| 기본값 | 65536 |
탭: 환경 변수
| 속성 | 값 |
|---|---|
| 키 | FELIX_BPFMAPSIZENATFRONTEND |
| 설명 | NAT 프론트엔드 맵의 크기를 설정해요. FrontendMap은 nodeport, 외부 IP, 그리고 각 서비스의 포트마다 엔트리를 담을 수 있을 만큼 커야 해요. |
| 스키마 | Integer |
| 기본값 | 65536 |
BPFMapSizePerCPUConntrack
탭: 구성 파일
| 속성 | 값 |
|---|---|
| 키 | BPFMapSizePerCPUConntrack |
| 설명 | CPU 개수에 따라 conntrack 맵의 크기를 정해요. 0이 아닌 값으로 설정하면 BPFMapSizePerCPUConntrack * (Number of CPUs)로 BPFMapSizeConntrack을 덮어써요. 이 맵은 활성 연결 하나하나에 대한 엔트리를 담을 수 있을 만큼 커야 해요. 주의: conntrack 맵의 크기를 바꾸면 서비스가 흔들릴 수 있어요. |
| 스키마 | Integer |
| 기본값 | 0 |
탭: 환경 변수
| 속성 | 값 |
|---|---|
| 키 | FELIX_BPFMAPSIZEPERCPUCONNTRACK |
| 설명 | CPU 개수에 따라 conntrack 맵의 크기를 정해요. 0이 아닌 값으로 설정하면 BPFMapSizePerCPUConntrack * (Number of CPUs)로 BPFMapSizeConntrack을 덮어써요. 이 맵은 활성 연결 하나하나에 대한 엔트리를 담을 수 있을 만큼 커야 해요. 주의: conntrack 맵의 크기를 바꾸면 서비스가 흔들릴 수 있어요. |
| 스키마 | Integer |
| 기본값 | 0 |
BPFMapSizeRoute
탭: 구성 파일
| 속성 | 값 |
|---|---|
| 키 | BPFMapSizeRoute |
| 설명 | routes 맵의 크기를 설정해요. routes 맵은 워크로드마다 엔트리 하나와 호스트마다 몇 개의 엔트리(자기 IP와 터널 IP를 커버할 정도)를 담을 수 있을 만큼 커야 해요. |
| 스키마 | Integer |
| 기본값 | 262144 |
탭: 환경 변수
| 속성 | 값 |
|---|---|
| 키 | FELIX_BPFMAPSIZEROUTE |
| 설명 | routes 맵의 크기를 설정해요. routes 맵은 워크로드마다 엔트리 하나와 호스트마다 몇 개의 엔트리(자기 IP와 터널 IP를 커버할 정도)를 담을 수 있을 만큼 커야 해요. |
| 스키마 | Integer |
| 기본값 | 262144 |
BPFOverlayHostSourceIP
탭: 구성 파일
| 속성 | 값 |
|---|---|
| 키 | BPFOverlayHostSourceIP |
| 설명 | BPF 모드에서 IPIP/VXLAN 오버레이 터널로 나가는 호스트 네트워크(노드에서 시작한) 트래픽에 Felix가 사용할 소스 IP를 제어해요. "TunnelAddress"(기본값)는 오버레이 터널 디바이스에 IP 주소를 할당하고 그 주소를 소스로 사용하는데, 이전 릴리스에서 업그레이드한 클러스터의 동작을 그대로 유지해요. "HostAddress"는 노드 자신의 IP를 그대로 쓰고 터널 디바이스 IP를 할당하지 않아요. 이 옵션은 항상 터널 디바이스 IP를 쓰는 WireGuard 터널에는 영향이 없어요. |
| 스키마 | HostAddress, TunnelAddress 중 하나 |
| 기본값 | TunnelAddress |
탭: 환경 변수
| 속성 | 값 |
|---|---|
| 키 | FELIX_BPFOVERLAYHOSTSOURCEIP |
| 설명 | BPF 모드에서 IPIP/VXLAN 오버레이 터널로 나가는 호스트 네트워크(노드에서 시작한) 트래픽에 Felix가 사용할 소스 IP를 제어해요. "TunnelAddress"(기본값)는 오버레이 터널 디바이스에 IP 주소를 할당하고 그 주소를 소스로 사용하는데, 이전 릴리스에서 업그레이드한 클러스터의 동작을 그대로 유지해요. "HostAddress"는 노드 자신의 IP를 그대로 쓰고 터널 디바이스 IP를 할당하지 않아요. 이 옵션은 항상 터널 디바이스 IP를 쓰는 WireGuard 터널에는 영향이 없어요. |
| 스키마 | HostAddress, TunnelAddress 중 하나 |
| 기본값 | TunnelAddress |
BPFPSNATPorts
탭: 구성 파일
| 속성 | 값 |
|---|---|
| 키 | BPFPSNATPorts |
| 설명 | 소스 포트 충돌이 있을 때 무작위로 포트를 고르는 범위를 설정해요. RFC 6056(1024–65535)이 정의한 임시(ephemeral) 범위 안에 있어야 하고, 가능하면 운영체제가 쓰는 임시 범위 밖에 두는 게 좋아요. Linux는 32768–60999를 쓰고, 다른 OS는 대체로 IANA가 정의한 49152–65535를 써요. 이 범위가 운영체제 것과 겹쳐도 꼭 문제가 되는 건 아니에요. 범위의 양 끝은 모두 포함돼요. |
| 스키마 | Port range: either a single number in [0,65535] or a range of numbers n:m |
| 기본값 | 20000:29999 |
탭: 환경 변수
| 속성 | 값 |
|---|---|
| 키 | FELIX_BPFPSNATPORTS |
| 설명 | 소스 포트 충돌이 있을 때 무작위로 포트를 고르는 범위를 설정해요. RFC 6056(1024–65535)이 정의한 임시(ephemeral) 범위 안에 있어야 하고, 가능하면 운영체제가 쓰는 임시 범위 밖에 두는 게 좋아요. Linux는 32768–60999를 쓰고, 다른 OS는 대체로 IANA가 정의한 49152–65535를 써요. 이 범위가 운영체제 것과 겹쳐도 꼭 문제가 되는 건 아니에요. 범위의 양 끝은 모두 포함돼요. |
| 스키마 | Port range: either a single number in [0,65535] or a range of numbers n:m |
| 기본값 | 20000:29999 |
BPFPolicyDebugEnabled
더 알아보기 (Learn more)
Felix 구성 옵션 전체는 Felix 구성 레퍼런스의 이전·다음 파트에서 이어져요. BPF 모드를 운영한다면 conntrack 맵 크기 관련 키와 BPFLogFilters부터 살펴보고, 오버레이 터널의 소스 IP 동작은 BPFOverlayHostSourceIP로 확인해 보세요.