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

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로 확인해 보세요.