- 인쇄
- PDF
Load Balancer 속성 설정 예제
- 인쇄
- PDF
VPC 환경에서 이용 가능합니다.
Load Balancer 인스턴스 연동에서 소개한 각종 어노테이션을 활용하여 Load Balancer 인스턴스의 속성을 설정하는 예제입니다.
Kubernetes에서 생성한 네이버 클라우드 플랫폼의 로드 밸런서를 Kubernetes의 Service 리소스가 아닌 콘솔 및 API를 통해 설정하시는 경우, 상태 동기화에 문제가 발생할 수 있습니다. 생성된 로드 밸런서에 대한 설정 변경은 반드시 Kubernetes에서 생성된 Service 리소스 수정을 통해 이루어져야 합니다.
공통 예제
로드밸런서 생성 시 공통으로 사용할 수 있는 설정 예시입니다.
Load Balancer Class 선택 예제
Kubernetes 1.27 버전 이후 부터 LoadBalancerClass
를 지정할 수 있습니다. LoadBalancerClass의 지정을 통해 네이버 클라우드 플랫폼이 제공하는 로드밸런서 이외의 로드밸런서를 클러스터에서 사용할 수 있습니다. 이로 인하여 LoadBalancerClass 지정 시 Network Load Balancer, Network Proxy Load Balancer는 생성되지 않습니다. 서비스를 생성한 후에는 할당된 External-IP를 확인하여 외부에서 접근이 가능한지 확인해야 합니다. 아래 예시는 loxilb를 Load BalancerClass로 지정하여 사용하는 방법을 보여줍니다.
apiVersion: v1
kind: Service
metadata:
name: my-nginx
labels:
app: nginx
spec:
selector:
app: nginx
ports:
- port: 8765
targetPort: 80
type: LoadBalancer
loadBalancerClass: "loxilb.io/loxilb"
인스턴스가 생성될 전용 서브넷 선택 예제
인스턴스 생성 시, kube-system
Namespace에서 ncloud-config
이름을 가진 configmap
내의 lbSubnetNo
를 기본값으로 사용합니다. 만약 다른 로드밸런서 전용 서브넷에 인스턴스를 생성해야 하는 경우 service.beta.kubernetes.io/ncloud-load-balancer-subnet-id
어노테이션을 사용할 수 있습니다.
다음은 NPLB 인스턴스가 생성될 전용 서브넷을 선택하는 예제입니다.
kind: Service
apiVersion: v1
metadata:
name: my-nginx
annotations:
service.beta.kubernetes.io/ncloud-load-balancer-layer-type: "nplb"
service.beta.kubernetes.io/ncloud-load-balancer-subnet-id: "452772"
spec:
ports:
- port: 80
targetPort: 80
selector:
run: my-nginx
type: LoadBalancer
로드밸런서의 공인 아이피 부여 예제
LoadBalancer
타입의 Service 일때, spec.loadBalancerIP
필드에 로드밸런서에 할당할 공인아이피를 정의할 수 있습니다. 해당 필드에는 네이버 클라우드 플랫폼 콘솔 > VPC > Public IP
메뉴에서 확인 할 수 있는 미할당 상태의 공인 아이피만 기술 할 수 있습니다.
기본적으로 로드밸런서를 삭제하면 할당된 공인 아이피도 함께 반납됩니다. 공인 아이피가 함께 반납되지 않도록 하기 위해 service.beta.kubernetes.io/ncloud-load-balancer-retain-public-ip-on-termination: "true"
annotation을 사용할 수 있습니다.
apiVersion: v1
kind: Service
metadata:
name: my-nginx
annotations:
service.beta.kubernetes.io/ncloud-load-balancer-layer-type: "nplb"
service.beta.kubernetes.io/ncloud-load-balancer-retain-public-ip-on-termination: "true"
spec:
loadBalancerIP: 110.234.194.181
ports:
- port: 80
targetPort: 8080
protocol: TCP
name: http
selector:
run: nginx
type: LoadBalancer
사설 네트워크 타입의 로드밸런서 생성 예제
service.beta.kubernetes.io/ncloud-load-balancer-internal
어노테이션을 사용하여 VPC 내부에서만 접근 가능한 사설 타입의 로드밸런서를 생성할 수 있습니다. 이 어노테이션의 기본값은 false이므로, 명시적으로 지정하지 않으면 공인 타입의 로드밸런서가 생성됩니다. 사설 타입의 로드밸런서는 VPC 내부의 사설 IP를 이용해 내부 서버 간 부하를 분산 처리하며, VPC 외부에서의 접근은 허용되지 않습니다.
apiVersion: v1
kind: Service
metadata:
name: my-nginx
annotations:
service.beta.kubernetes.io/ncloud-load-balancer-layer-type: "nplb"
service.beta.kubernetes.io/ncloud-load-balancer-internal: "true"
spec:
ports:
- port: 80
targetPort: 80
selector:
run: my-nginx
type: LoadBalancer
부하분산 알고리즘 설정 예제
service.beta.kubernetes.io/ncloud-load-balancer-algorithm-type-code
어노테이션을 사용해 로드밸런서의 부하분산 알고리즘을 설정할 수 있습니다. Network Proxy LoadBalancer의 경우 Round Robin(RR), Source Ip Hash(SIPHS), Least Connection(LC) 중에서 선택할 수 있으며, Network LoadBalancer의 경우 Hash(MH), Round Robin(RR) 중에서 선택할 수 있습니다.
다음은 Network Proxy LoadBalancer를 생성하면서 부하 분산 알고리즘으로 Source Ip Hash(SIPHS)를 선택하는 예시입니다.
apiVersion: v1
kind: Service
metadata:
name: my-nginx
annotations:
service.beta.kubernetes.io/ncloud-load-balancer-layer-type: "nplb"
service.beta.kubernetes.io/ncloud-load-balancer-algorithm-type-code: "SIPHS"
spec:
ports:
- port: 80
targetPort: 80
selector:
run: my-nginx
type: LoadBalancer
네트워크 프록시 로드밸런서(NPLB) 속성 설정 예제
로드밸런서의 부하 처리 성능 설정 예제
service.beta.kubernetes.io/ncloud-load-balancer-size
어노테이션을 사용해 생성한 로드밸런서의 부하 처리 성능을 설정할 수 있습니다.
다음은 해당 어노테이션을 사용해 부하 처리 성능을 설정하는 예제입니다.
kind: Service
apiVersion: v1
metadata:
name: my-nginx
annotations:
service.beta.kubernetes.io/ncloud-load-balancer-layer-type: "nplb"
service.beta.kubernetes.io/ncloud-load-balancer-size: "MEDIUM"
spec:
ports:
- port: 80
targetPort: 80
selector:
run: my-nginx
type: LoadBalancer
TLS 설정 예제
서비스 명세를 통해 TLS/SSL 인증서를 로드밸런서에 적용할 수 있습니다. Certificate Manager에 등록된 인증서 번호(nrn)를 service.beta.kubernetes.io/ncloud-load-balancer-ssl-certificate-no
에 지정하고 TLS를 사용할 포트 번호를 service.beta.service.beta.kubernetes.io/ncloud-load-balancer-tls-ports
어노테이션에 설정합니다. 다음은 443 포트(HTTPS)를 통해 들어오는 트래픽을 암호화하여 80 포트(HTTP)로 전달하는 예제입니다.
kind: Service
apiVersion: v1
metadata:
name: my-nginx
annotations:
service.beta.kubernetes.io/ncloud-load-balancer-ssl-certificate-no: "1234"
service.beta.kubernetes.io/ncloud-load-balancer-tls-ports: "443"
spec:
ports:
- port: 443
targetPort: 80
selector:
app: nginx
type: LoadBalancer
프록시 프로토콜 활성화 예제
service.beta.kubernetes.io/ncloud-load-balancer-proxy-protocol
어노테이션을 통해 로드밸런서의 프록시 프로토콜을 활성화 할 수 있습니다. 프록시 프로토콜은 TCP나 SSL 프로토콜을 사용할 때, 프록시 환경을 통해 연결 요청을 하는 클라이언트의 원본 IP 주소(Original Client IP address)를 알 수 있게 해주는 프로토콜입니다. 이 기능을 사용하기 위해서는 로드밸런서뿐만 아니라 연결된 어플리케이션(파드)에서도 관련 설정을 해주어야 합니다.
kind: Service
apiVersion: v1
metadata:
name: my-nginx
annotations:
service.beta.kubernetes.io/ncloud-load-balancer-layer-type: "nplb"
service.beta.kubernetes.io/ncloud-load-balancer-proxy-protocol: "true"
spec:
ports:
- port: 80
targetPort: 80
selector:
run: my-nginx
type: LoadBalancer
로드밸런서의 Idle Timeout 설정 예제
service.beta.kubernetes.io/ncloud-load-balancer-idle-timeout
을 통해 로드밸런서의 Idle Timeout 을 조정할 수 있습니다. 어플리케이션의 Idle Timeout 고려하여 조정할 필요가 있으며, 로드밸런서의 기본값은 60초입니다. 다음 예시는 로드밸런서의 Idle Timeout 값을 90초로 설정하는 방법을 보여줍니다.
kind: Service
apiVersion: v1
metadata:
name: my-nginx
annotations:
service.beta.kubernetes.io/ncloud-load-balancer-layer-type: "nplb"
service.beta.kubernetes.io/ncloud-load-balancer-idle-timeout: "90"
spec:
ports:
- port: 80
targetPort: 80
selector:
run: my-nginx
type: LoadBalancer
네트워크 로드밸런서(NLB) 속성 설정 예제
로드밸런서 생성 시 ACG 규칙의 Inbound Source 설정 예제
Service 타입이 LoadBalancer
인 경우, 외부와의 통신을 위해 Inbound Source에 0.0.0.0./0
인 ACG 규칙이 기본값으로 설정됩니다. 만약 다른 IP Block을 접근 소스로 설정해야 하는 경우 service.beta.kubernetes.io/ncloud-load-balancer-inbound-source
의 어노테이션을 사용할 수 있습니다. 여러 개의 Inbound Source를 설정하고자 할 경우에는 콤마(,)로 구분하여 입력할 수 있습니다.
다음은 NLB 인스턴스 생성 시 ACG 규칙의 Inbound Source를 설정하는 예제입니다.
kind: Service
apiVersion: v1
metadata:
name: my-nginx
annotations:
service.beta.kubernetes.io/ncloud-load-balancer-layer-type: "nlb"
service.beta.kubernetes.io/ncloud-load-balancer-inbound-source: "10.120.0.0/16,143.248.12.77/32"
spec:
ports:
- port: 80
targetPort: 80
selector:
run: my-nginx
type: LoadBalancer