Iptables-nft 지원
Iptables-nft 지원 (Iptables-nft Support)
Linkerd init 컨테이너의 legacy와 nft 두 모드의 차이와, 방화벽 규칙 구성 방법을 다루는 문서예요.
본문
애플리케이션이 전혀 인지하지 못한 채 TCP 트래픽을 프록시를 통해 투명하게 라우팅하기 위해, Linkerd는 주입된 각 파드에 일련의 방화벽 규칙을 구성합니다. 구성은 init 컨테이너 또는 CNI 플러그인을 통해 수행할 수 있어요.
Linkerd의 init 컨테이너는 legacy 또는 nft 두 가지 모드로 실행될 수 있습니다. 두 모드의 차이는 방화벽 규칙을 구성할 때 어떤 iptables 변형을 사용하는지입니다.
상세 내용 (Details)
init 컨테이너의 모드는 업그레이드 시점이나 설치 시점에 변경할 수 있어요. 구성되면 주입된 모든 워크로드(컨트롤 플레인 포함)가 init 컨테이너에서 같은 모드를 사용합니다. 두 모드 모두 방화벽 규칙 구성에 iptables 유틸리티를 사용하지만, 주요 차이는 어느 바이너리를 호출하느냐입니다:
- legacy 모드는 방화벽 구성에 iptables-legacy를 호출합니다. 이것이 linkerd-init가 실행되는 기본 모드이며, 대부분의 운영체제와 배포판에서 지원됩니다.
- nft 모드는 iptables-nft를 호출하는데, 이는 더 새로운 nf_tables 커널 API를 사용합니다. nftables 유틸리티는 최신 운영체제가 기본적으로 방화벽을 구성할 때 사용합니다.
개념적으로 iptables-nft는 legacy 유틸리티와 새 nftables 유틸리티 사이의 다리 역할을 합니다. 내부적으로는 규칙 추가/삭제가 원자적인 다른 백엔드를 사용합니다. iptables의 nft 버전은 legacy 버전과 같은 패킷 매칭 문법(xtables)을 사용합니다.
두 유틸리티가 같은 문법을 사용하기 때문에, Kubernetes 호스트가 가장 잘 지원하는 모드로 실행할 것을 권장합니다. 일부 운영체제(예: Google Container Optimized OS)는 nftables 모듈을 기본 제공하지 않아요. 다른 운영체제(예: RHEL 계열)는 legacy 버전의 iptables를 지원하지 않습니다. Linkerd의 init 컨테이너는 노드가 지원하고 관련 nftables 모듈이 있다고 확인된 경우에만 nft 모드로 실행해야 합니다.
Note
Linkerd는 init 컨테이너에 -w(wait) 옵션을 지원합니다. 작업이 원자적이고, 규칙셋이 수정될 때 리로드되지 않기 때문에(그냥 추가만 됨) 이 옵션은 linkerd-init을 nft 모드로 실행할 때는 no-op입니다.
설치 (Installation)
linkerd-init의 모드는 구성 옵션 proxyInit.iptablesMode=iptables|nft로 덮어쓸 수 있어요. 이 구성 옵션은 Helm과 CLI 설치(또는 업그레이드) 모두에 사용할 수 있습니다. 예를 들어 다음 줄은 Linkerd를 설치하고 init 컨테이너 모드를 nft로 설정합니다:
`linkerd install --set "proxyInit.iptablesMode=nft" | kubectl apply -f -
`
더 알아보기 (Learn more)
- Linkerd의 CNI 플러그인과 init 컨테이너 구성에 대한 자세한 내용은 관련 문서를 참고하세요.