F5 IngressLink 를 통해 NGINX Plus Ingress Controller 로드 밸런싱

F5 IngressLink 는 F5 BIG-IP와 NGINX Plus Ingress Controller를 통합하여 하나의 강력한 로드 밸런싱 솔루션을 제공합니다. Kubernetes 기반 마이크로서비스 환경에서 트래픽을 효율적으로 분산시키는 것은 안정적인 애플리케이션 운영의 핵심입니다. 이 포스트에서는 F5 IngressLink의 역할과 구성 요건, 설치 절차, NodePort 방식의 특징, 그리고 운영 팁까지 실무에서 유용한 정보를 정리하였습니다.

목차

1. F5 IngressLink 란 무엇인가?
 1-1. F5 IngressLink 의 역할과 아키텍처
 1-2. BIG-IP와 NGINX Plus Ingress Controller 간 연동 구조
2. F5 IngressLink 구성 요건
 2-1. Kubernetes 및 BIG-IP 준비 사항
 2-2. CRD(Custom Resource Definition) 활성화
3. F5 IngressLink 설치 및 설정 절차
 3-1. Proxy Protocol iRule 생성
 3-2. F5 IngressLink 리소스 정의 및 적용
 3-3. BIG-IP 연동 검증
4. NodePort 기반 로드 밸런싱 방식
 4-1. NodePort 구성 방식의 특징
 4-2. BIG-IP 트래픽 흐름 분석
5. 운영 팁 및 장애 대응 전략
 5-1. readinessPort를 통한 상태 모니터링
6. 결론

F5 IngressLink는 BIG-IP Container Ingress Services(CIS)와 NGINX Plus Ingress Controller(NPIC)를 연동하는 리소스 정의(Resource Definition)입니다. 이를 통해 NetOps(BIG-IP)와 DevOps(NGINX)의 관리 경계를 허물고, 단일 제어 지점에서 트래픽을 제어할 수 있게 됩니다. 결과적으로 운영 간소화, 보안 정책 일관성, 대규모 트래픽 처리 등 다양한 이점을 제공합니다.

1-2. BIG-IP와 NGINX Plus Ingress Controller 간 연동 구조

F5 IngressLink

IngressLink는 BIG-IP가 Kubernetes 클러스터의 NGINX Plus Ingress Controller를 백엔드 풀(Pool)로 인식하고, NodePort 또는 ClusterIP를 통해 트래픽을 전달하도록 구성됩니다. 이를 통해 외부 사용자는 BIG-IP를 통해 접속하고, 내부적으로는 NPIC가 라우팅을 담당합니다.

2-1. Kubernetes 및 BIG-IP 준비 사항

  • Kubernetes 클러스터가 정상적으로 구성되어 있어야 합니다.
  • NGINX Ingress Controller가 정상적으로 실행 중입니다.
  • BIG-IP에는 AS3 3.18 이상이 설치되어야 하며, 관리용 Partition이 생성되어 있어야 합니다.
  • CIS는 Helm 또는 Manifest를 통해 설치되며, NodePort 모드를 사용할 경우 VXLAN 터널 없이 구성 가능합니다
  • 다음 명령어를 실행하여 CIS 저장소를 클론하고 IngressLink 폴더로 이동합니다:
git clone https://github.com/F5Networks/k8s-bigip-ctlr.git
cd k8s-bigip-ctlr/docs/cis-20.x/config_examples/customResource/IngressLink

2-2. CRD(Custom Resource Definition) 활성화

IngressLink는 CRD(Custom Resource Definition)를 통해 정의되므로, CIS는 --custom-resource-mode=true로 배포되어야 하며, customresourceDefinition.yaml을 통해 CRD를 적용해야 합니다.

customresourceDefinition.yaml

customresourceDefinition.yaml

3-1. Proxy Protocol iRule 생성

iRuleF5 BIG-IP 장비에서 사용하는 트래픽 제어용 스크립트 언어입니다. “iRule”은 “Intelligent Rule”의 줄임말로, L4~L7 트래픽을 세밀하게 제어할 수 있는 강력한 기능을 제공합니다.

1. BIG-IP GUI에 로그인합니다.

2. 왼쪽 메뉴에서 Local Traffic > iRules를 선택합니다.

3. Create를 클릭합니다.

4. Name 필드에 이름을 입력합니다. Proxy_Protocol_iRule (이는 예시일 뿐이며, 이름은 자유롭게 설정할 수 있습니다.)

5. Definition 필드에 아래 코드를 입력한 후 Finished를 클릭합니다.

when SERVER_CONNECTED {
TCP::respond "PROXY TCP[IP::version] [IP::client_addr] [clientside {IP::local_addr}] [TCP::client_port] [clientside {TCP::local_port}]\r\n"
}

이벤트가 발생하면, BIG-IP는 TCP::respond 명령을 통해 백엔드 서버에 특정 문자열을 전송합니다. 이 문자열은 Proxy Protocol 포맷으로 구성되어 있으며, 다음과 같은 클라이언트 정보를 포함합니다:

  • TCP[IP::version]: 클라이언트의 IP 버전 (IPv4 또는 IPv6)
  • [IP::client_addr]: 클라이언트의 실제 IP 주소
  • [clientside {IP::local_addr}]: BIG-IP 측, 즉 로컬 인터페이스의 IP 주소
  • [TCP::client_port]: 클라이언트의 원본 포트
  • [clientside {TCP::local_port}]: BIG-IP가 클라이언트와 통신에 사용한 로컬 포트

이 정보들은 문자열 "PROXY TCP... \r\n" 형태로 구성되어 서버로 전송됩니다. 이렇게 하면 백엔드 서버(NGINX 등)는 X-Forwarded-For 헤더 없이도 실제 클라이언트의 IP 및 포트 정보를 식별할 수 있게 됩니다.

IngressLink 리소스를 다음과 같이 정의하고 적용합니다.

apiVersion: "cis.f5.com/v1"
kind: IngressLink
metadata:
name: nginx-ingress
namespace: nginx-ingress
spec:
virtualServerAddress: "192.168.10.5"
iRules:
- /Common/Proxy_Protocol_iRule
selector:
matchLabels:
app: nginx-ingress

selector 필드의 app은 NGINX Plus Ingress Controller의 서비스 Labels와 동일해야 합니다.

# kubectl get svc nginx-ingress --show-labels
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE LABELS
nginx-ingress NodePort 10.111.109.219 <none> 80:31757/TCP,443:31116/TCP,8081:32198/TCP 3d17h app=nginx-ingress

IngressLink 생성 후, kubectl 명령을 통해 생성한 IngressLink에 가상 IP가 정상적으로 할당되었는지 확인합니다.

# kubectl get ingresslinks.cis.f5.com
NAME IPAMVSADDRESS AGE
nginx-ingress 192.168.10.5 2d20h
# kubectl describe ingresslink nginx-ingress
Name: nginx-ingress
Namespace: nginx-ingress
Labels: <none>
Annotations: <none>
API Version: cis.f5.com/v1
Kind: IngressLink
Metadata:
Creation Timestamp: 2025-06-13T05:04:55Z
Generation: 1
Resource Version: 122012
UID: 27b8812d-785e-4d8d-a40d-bd73c4e535b5
Spec:
Bigip Route Domain: 0
I Rules:
/Common/Proxy_Protocol_iRule
Selector:
Match Labels:
App: nginx-ingress
Virtual Server Address: 192.168.10.5
Status:
Last Updated: 2025-06-13T05:12:17Z
Status: OK
Vs Address: 192.168.10.5
Events: <none>

다음은 ConfigMap 리소스에서 Proxy Protocol을 활성화하여, BIG-IP 시스템이 클라이언트 IP 및 포트 정보를 NGINX로 전달하도록 합니다. set-real-ip-from 키에는 BIG-IP 시스템이 NGINX로 트래픽을 전송할 때 사용하는 IP의 서브넷을 입력하세요.

proxy-protocol: "True"
real-ip-header: "proxy_protocol"
set-real-ip-from: "0.0.0.0/0"

또한, NGINX Plus Ingress Controller의 Deployment Arguments가 다음과 같이 설정되어 있어야 합니다.

args:
- -ingresslink=nginx-ingress
- -report-ingress-status

3-3. BIG-IP 연동 검증

BIG-IP GUI에 접근하여 Kubernetes 클러스터에서 생성한 IngressLink에 의해 BIG-IP 내 Virtual Server 및 Pool이 생성된 것을 확인합니다.

F5 IngressLink 연동 VirtualServer
F5 IngressLink 연동 Pool

BIG-IP의 VirtualServerAddress를 통해 서비스에 접근 가능한지 curl --resolve 명령어로 검증합니다.

curl --resolve cafe.example.com:443:192.168.10.5 https://cafe.example.com --insecure
Server address: 10.12.0.18:80
Server name: coffee-7586895968-r26zns

4. NodePort 기반 로드 밸런싱 방식

4-1. NodePort 구성 방식의 특징

NodePort는 각 노드에서 특정 포트를 통해 서비스를 외부에 노출합니다. BIG-IP는 kube-proxy를 통해 노드의 IP 및 포트를 기반으로 트래픽을 분산합니다. SDN 구성이 불필요하며, 정적 워크로드에 적합합니다.

NodePort 기반 로드밸런싱을 진행하려면 CIS Deployments의 --pool-member-type Arguments가 nodeport로 지정되어 있어야 합니다.

- --pool-member-type=nodeport

4-2. BIG-IP 트래픽 흐름 분석

BIG-IP는 각 Kubernetes 노드를 Pool 멤버로 인식하며, NGINX Plus Ingress Controller가 해당 노드 내 실제 Pod로 트래픽을 전달합니다. 이중 로드 밸런싱 구조로 인해 성능 측정 및 문제 추적 시 계층 구분이 필요합니다.

5. 운영 팁 및 장애 대응 전략

IngressLink에서 BIG-IP는 readinessPort를 통해 NGINX Plus Ingress Controller의 상태를 확인할 수 있습니다. Service 정의에 다음 포트를 추가하면 됩니다.

- port: 8081
targetPort: 8081
name: readinessport

5-1. readinessPort를 통한 상태 모니터링

IngressLink는 여러 파티션을 사용할 수 있도록 지원하지만, 동일한 VirtualServerAddress나 hostname을 여러 파티션에서 공유할 수 없습니다. 이를 위반할 경우 구성 충돌이 발생하므로 명확한 분리를 유지해야 합니다.

6. 결론

F5 IngressLink는 BIG-IP와 NGINX Plus의 장점을 결합하여 안정적인 로드 밸런싱 환경을 제공합니다. Kubernetes 기반의 Cloud Native 환경에서 효율적인 트래픽 관리를 고민하고 있다면, IngressLink는 강력한 대안이 될 수 있습니다.

F5 BIG-IP에 대해 자세한 정보를 알고 싶으신가요? 지금 NGINX STORE에 문의하여 다양한 사용 사례에 대해 상담 받아보세요.

NGINX STORE를 통한 솔루션 도입 및 기술지원 무료 상담 신청

* indicates required