33.9. MetalLB를 사용하도록 서비스 구성
클러스터 관리자는 LoadBalancer
유형의 서비스를 추가할 때 MetalLB에서 IP 주소를 할당하는 방법을 제어할 수 있습니다.
33.9.1. 특정 IP 주소 요청
다른 로드 밸런서 구현과 마찬가지로 MetalLB에는 서비스 사양에서 spec.loadBalancerIP
필드가 허용됩니다.
요청된 IP 주소가 주소 풀의 범위 내에 있는 경우 MetalLB는 요청된 IP 주소를 할당합니다. 요청된 IP 주소가 범위 내에 없는 경우 MetalLB에서 경고를 보고합니다.
특정 IP 주소에 대한 서비스 YAML의 예
apiVersion: v1 kind: Service metadata: name: <service_name> annotations: metallb.universe.tf/address-pool: <address_pool_name> spec: selector: <label_key>: <label_value> ports: - port: 8080 targetPort: 8080 protocol: TCP type: LoadBalancer loadBalancerIP: <ip_address>
MetalLB에서 요청된 IP 주소를 할당할 수 없는 경우 서비스의 EXTERNAL-IP
는 <pending>
을 보고하고 oc describe service <service_name>
을 실행하면 다음 예와 같은 이벤트가 포함됩니다.
MetalLB에서 요청된 IP 주소를 할당할 수 없는 이벤트의 예
... Events: Type Reason Age From Message ---- ------ ---- ---- ------- Warning AllocationFailed 3m16s metallb-controller Failed to allocate IP for "default/invalid-request": "4.3.2.1" is not allowed in config
33.9.2. 특정 풀에서 IP 주소 요청
특정 범위의 IP 주소를 할당하지만 특정 IP 주소와 관련이 없는 경우 metallb.universe.tf/address-pool
주석을 사용하여 지정된 주소 풀의 IP 주소를 요청할 수 있습니다.
특정 풀의 IP 주소에 대한 서비스 YAML의 예
apiVersion: v1 kind: Service metadata: name: <service_name> annotations: metallb.universe.tf/address-pool: <address_pool_name> spec: selector: <label_key>: <label_value> ports: - port: 8080 targetPort: 8080 protocol: TCP type: LoadBalancer
<address_pool_name>
에 대해 지정한 주소 풀이 없는 경우 MetalLB는 자동 할당을 허용하는 모든 풀에서 IP 주소를 할당하려고 시도합니다.
33.9.3. IP 주소 수락
기본적으로 주소 풀은 자동 할당을 허용하도록 구성됩니다. MetalLB는 이러한 주소 풀에서 IP 주소를 할당합니다.
자동 할당을 위해 구성된 풀의 IP 주소를 수락하려면 특별한 주석이나 구성이 필요하지 않습니다.
IP 주소를 수락하는 서비스 YAML의 예
apiVersion: v1 kind: Service metadata: name: <service_name> spec: selector: <label_key>: <label_value> ports: - port: 8080 targetPort: 8080 protocol: TCP type: LoadBalancer
33.9.5. MetalLB를 사용하여 서비스 구성
주소 풀에서 외부 IP 주소를 사용하도록 로드 밸런싱 서비스를 구성할 수 있습니다.
사전 요구 사항
-
OpenShift CLI(
oc
)를 설치합니다. - MetalLB Operator를 설치하고 MetalLB를 시작합니다.
- 하나 이상의 주소 풀을 구성합니다.
- 클라이언트의 트래픽을 클러스터의 호스트 네트워크로 라우팅하도록 네트워크를 구성합니다.
절차
<service_name>.yaml
파일을 생성합니다. 파일에서spec.type
필드가LoadBalancer
로 설정되어 있는지 확인합니다.MetalLB에서 서비스에 할당하는 외부 IP 주소를 요청하는 방법에 대한 자세한 내용은 예제를 참조하십시오.
서비스를 생성합니다.
$ oc apply -f <service_name>.yaml
출력 예
service/<service_name> created
검증
서비스를 설명합니다.
$ oc describe service <service_name>
출력 예
Name: <service_name> Namespace: default Labels: <none> Annotations: metallb.universe.tf/address-pool: doc-example <.> Selector: app=service_name Type: LoadBalancer <.> IP Family Policy: SingleStack IP Families: IPv4 IP: 10.105.237.254 IPs: 10.105.237.254 LoadBalancer Ingress: 192.168.100.5 <.> Port: <unset> 80/TCP TargetPort: 8080/TCP NodePort: <unset> 30550/TCP Endpoints: 10.244.0.50:8080 Session Affinity: None External Traffic Policy: Cluster Events: <.> Type Reason Age From Message ---- ------ ---- ---- ------- Normal nodeAssigned 32m (x2 over 32m) metallb-speaker announcing from node "<node_name>"
<.> 특정 풀에서 IP 주소를 요청하면 주석이 표시됩니다. <.> 서비스 유형에
LoadBalancer
가 표시되어야 합니다. <.> 로드 밸런서 Ingress 필드는 서비스가 올바르게 할당된 경우 외부 IP 주소를 나타냅니다. <.> 이벤트 필드는 외부 IP 주소를 알리기 위해 할당된 노드 이름을 나타냅니다. 오류가 발생하면 이벤트 필드에 오류 이유가 표시됩니다.