VPC 로드밸런서 관리
기존 VPC 로드 밸런서를 변경합니다.
VPC NLB 또는 ALB의 이름을 변경하지 마세요. VPC 로드 밸런서의 이름을 변경하면 Kubernetes LoadBalancer
서비스에 오류가 발생하여 워크로드에 장애가 발생할 수 있습니다.
퍼시스턴트 VPC 로드 밸런서
기본적으로 VPC 로드 밸런서는 연결된 클러스터가 삭제되면 삭제됩니다. 그러나 LoadBalancer
서비스 정의를 만들면 로드 밸런서를 영구적으로 설정하여 클러스터가 삭제된 후에도 계속 사용할 수 있도록 할 수 있습니다. 이전 클러스터가 삭제된 후 영구 VPC 로드 밸런서를 다른 클러스터에 적용할 수 있습니다.
VPC 로드 밸런서 이름은 기본적으로 kube-<cluster_ID>-<kubernetes_lb_service_UID>
형식으로 지정됩니다. 클러스터가 삭제될 때 이 이름 형식은 연결된 로드 밸런서도 삭제되도록 지정합니다. 클러스터를 삭제할 때 부하 분산 장치가 삭제되지 않도록 하려면 service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-lb-name
서비스 정의에 LoadBalancer
어노테이션을 포함하여 부하 분산 장치에 고유 이름을 부여하세요. 로드 밸런서 이름은 VPC 내에서 고유해야 하며 소문자 영숫자와 하이픈(-
)만 포함할 수 있습니다. 이 어노테이션은 모든 VPC 로드 밸런서 유형에 적용할 수 있습니다.
영구 VPC 로드 밸런서가 더 이상 필요하지 않은 경우 삭제할 책임은 사용자에게 있습니다. 퍼시스턴트 VPC 로드밸런서를 삭제하려면, VPC 로드밸런서가 연결된 Kubernetes LoadBalancer
서비스 정의를 삭제하세요.
한 클러스터에서 다른 클러스터로 VPC 로드밸런서 이동하기
퍼시스턴트 VPC 로드 밸런서 는 한 VPC 클러스터에서 분리했다가 다른 클러스터에 연결할 수 있습니다. 새 클러스터는 원래 클러스터와 동일한 VPC 내에 있어야 합니다.
클러스터에서 VPC 로드 밸런서 분리하기
VPC 로드 밸런서는 생성된 Kubernetes LoadBalancer
서비스 정의에 연결됩니다. 클러스터에서 영구 VPC 로드 밸런서를 분리하려면 LoadBalancer
서비스와의 연결을 끊어야 합니다. 이렇게 하면 LoadBalancer
서비스를 사용할 수 없게 되며, 안전하게 삭제할 수 있습니다. 그러면 VPC 로드 밸런서는 다른 클러스터에 연결된 이 될 수 있습니다.
VPC 부하 분산 장치와 LoadBalancer
서비스 간의 연결을 끊으려면 VPC 로드 밸런서의 이름 변경 을 사용하거나 원래 LoadBalancer
서비스 정의에서
service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-lb-name
주석을 제거하면 됩니다. only 상황에서는 VPC 로드 밸런서의 이름을 변경해야 하며, 이렇게 하면 Kubernetes 리소스에 대한 오류가 발생하므로 주의하세요. 그러나 최종 목표가 다른 클러스터에서 VPC 로드 밸런서를 사용하는 것이라면 이 오류로 인해 워크로드가
중단되지는 않습니다. 로드 밸런서를 동일한 클러스터에 유지하려는 경우 VPC 로드 밸런서의 이름을 변경하지 마세요.
클러스터에 VPC 로드밸런서 연결하기
퍼시스턴트 VPC 로드밸런서가 클러스터에서 분리된 후, VPC 로드밸런서를 참조하는 새로운 Kubernetes LoadBalancer
서비스 정의를 생성하여 다른 클러스터에 연결할 수 있다.
새 클러스터에 새 LoadBalancer
서비스를 만들 때 service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-lb-name
어노테이션을 사용하여 연결하려는 VPC 로드 밸런서의 이름을 지정할 수 있습니다.
LoadBalancer 서비스를 생성할 때 VPC 로드밸런서 유형(ALB, NLB) 및 IP 유형(public, private)은 LoadBalancer
서비스의 사양과 일치해야 합니다. 예를 들어 새 클러스터의 기존 LoadBalancer
서비스에서 NLB 유형을 지정하는 경우 클러스터에 VPC ALB를 연결하는 데 사용할 수 없습니다. 로드 밸런서 유형과 IP 유형을 지정하는
어노테이션은 service.kubernetes.io/ibm-load-balancer-cloud-provider-enable-features
와 service.kubernetes.io/ibm-load-balancer-cloud-provider-ip-type
입니다.
LoadBalancer
서비스에 지정된 포트와 노드 포트는 VPC 로드 밸런서가 생성된 포트와 일치할 필요는 없습니다. VPC 부하 분산 장치는 새 클러스터에서 연결된 LoadBalancer
서비스의 포트 정의로 다시 구성됩니다.
로드밸런서 상태 확인
VPC 부하 분산 장치는 externalTrafficPolicy
어노테이션을 사용하여 구성하는 상태 확인을 통해 자동으로 구성됩니다. 추가 주석을 사용하여 로드 밸런서에서 상태 확인 사용자 지정 에 추가할 수 있습니다.
externalTrafficPolicy
이Cluster
로 설정되어 있으면 TCP 상태 확인이 적용됩니다. UDP 로드밸런서를 구성하는 경우 포트 사양을 추가로 지정해야 합니다.externalTrafficPolicy
가Local
로 설정되어 있으면 HTTP 상태 확인이 적용됩니다. 들어오는 트래픽은 해당 특정 노드에 있는 애플리케이션 파드로만 전달됩니다. 해당 특정 노드에 애플리케이션 파드가 없는 경우 들어오는 트래픽이 삭제됩니다.
externalTrafficPolicy: Local
설정으로 인해 로드 밸런서 워커 노드의 상태 확인이 실패할 수 있습니다. 일반적으로 이 결과는 예상되는 동작이며 로드 밸런서가 애플리케이션 포드가 없는 노드에 연결을 시도하는 경우 트래픽이 의도적으로 삭제되므로 반드시 문제를 나타내는 것은 아닙니다. 자세한 내용은 워커 노드에서 VPC 로드 밸런서 상태 확인이 실패하는 이유는 무엇인가요? 를 참조하세요.
VPC 로드밸런서에 대한 상태 확인 사용자 지정하기
선택적 주석을 사용하여 테스트 간격, 시간 초과 및 재시도에 대한 고급 구성으로 상태 검사를 사용자 지정하여 VPC 로드 밸런서 상태 검사를 보다 효과적으로 제어할 수 있습니다. 이러한 사용자 지정은 언제든지 변경하거나 제거할 수 있습니다.
service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-protocol
- 옵션: 이 어노테이션은 Kubernetes 로드밸런서 서비스와 연결된 VPC 로드밸런서 리소스에 대한 상태 확인 프로토콜을 설정한다. 일반적으로 VPC LB 상태 확인 프로토콜은 로드 밸런서 서비스 사양의
externalTrafficPolicy
설정 값에 따라 결정됩니다(Kubernetes). 이 주석은 해당 논리를 재정의합니다. 이 어노테이션은 not 이 Kubernetes, 특히 kube-proxy가externalTrafficPolicy
의 다양한 설정과 관련하여 작동하는 방식을 변경합니다. service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-port
- 선택사항. 상태 확인에 사용되는 TCP 포트입니다. 이 주석은
ibm-load-balancer-cloud-provider-vpc-health-check-protocol
도 지정된 경우에만 적용됩니다. service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-path
- 선택사항. URL HTTP 의 상태 확인 경로와 HTTPs 상태 확인. 이 주석은
ibm-load-balancer-cloud-provider-vpc-health-check-protocol
가http
또는https
로 설정된 경우에만 적용됩니다.- URL 의 경로는 origin-form request target의 형식을 따라야 합니다.
- 이 어노테이션을 지정하지 않고
ibm-load-balancer-cloud-provider-vpc-health-check-protocol
어노테이션을http
또는https
으로 설정하면 기본값인/
가 적용됩니다.
service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-delay
- 선택사항. 상태 확인 시도 사이에 대기할 시간(초)입니다. 기본적으로 이 값은
5
로 설정되어 있으며 최소2
에서 최대60
입니다. 이 값은 기본적으로ibm-load-balancer-cloud-provider-vpc-health-check-timeout
로 설정된2
값보다 커야 합니다. service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-timeout
- 선택사항. 상태 확인에 대한 응답을 기다리는 시간(초)입니다. 기본적으로 이 값은
2
로 설정되어 있으며 최소1
에서 최대59
입니다. 이 값은 기본적으로ibm-load-balancer-cloud-provider-vpc-health-check-delay
로 설정된5
값보다 작아야 합니다. service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-retries
- VPC 로드 밸런서에 대한 최대 상태 확인 재시도 횟수입니다. 기본적으로 이 값은
2
로 설정되어 있으며 최소1
에서 최대10
입니다.
UDP 부하 분산 장치에 대한 TCP 상태 확인 활성화하기
UDP 상태 확인이 없으므로 TCP 상태 확인을 사용하는 UDP 부하 분산 장치에는 service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-udp
어노테이션으로 지정된 추가 TCP 포트가 있어야 합니다.
클러스터에서 실행 중인 다른 로드밸런서 또는 NodePort에 대한 TCP 노드 포트를 지정할 수 있습니다. 클러스터 1.29의 경우 노드 포트가 30000-32767
범위 밖에 있는 경우, 지정된 포트에 들어오는 트래픽을 허용하도록 VPC 클러스터 보안 그룹 kube-<cluster-ID>
을 수정해야 합니다.
지정된 포트 값이 예기치 않게 다운되거나 포트 값이 재구성된 서비스에 대한 포트 값인 경우 서비스가 백업되거나 service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-udp
주석을 새 TCP 포트 값으로 다시 구성할 때까지 TCP 상태 확인이 중지됩니다. 이를 방지하려면 서비스 중단이 발생하지 않는 정적 포트 값인 kubelet
포트 10250
을 지정할 수 있습니다. 그러나 클러스터 버전 1.29 이하의 경우 VPC 클러스터 보안 그룹 kube-<cluster-ID>
를 수정하여 kubelet
포트에서 들어오는 트래픽을 허용해야 합니다.
UDP 부하 분산 장치에서 상태 확인을 위해 추가 TCP 포트를 지정하는 복잡성을 피하고 싶으신가요? externalTrafficPolicy
를 Local
로 설정하면 추가 포트 사양이 필요 없는 HTTP 상태 확인을 사용할 수 있습니다.
로드밸런서의 서브넷 또는 영역 변경하기
VPC NLB를 생성한 후에는, 생성된 리스닝 서브넷을 재구성할 수 없습니다. 기존 VPC NLB의 수신 서브넷을 변경하려면, 해당 Kubernetes LoadBalancer
서비스를 삭제, 업데이트 및 다시 적용해야 한다.
-
계정에 로그인하십시오. If applicable, target the appropriate resource group. 클러스터에 대한 컨텍스트를 설정하십시오.
-
Kubernetes 서비스를 나열하고 변경할
LoadBalancer
서비스의 이름을 찾으십시오.kubectl get services
출력 예.
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE my-load-balancer LoadBalancer 172.21.77.198 52.118.150.107 8080:32767/TCP,443:30943/TCP 5d
-
Kubernetes
LoadBalancer
서비스에 해당하는 VPC 로드 밸런서를 찾으십시오.VPC 로드 밸런서 이름은
kube-<cluster_ID>-<kubernetes_lb_service_UID>
형식입니다. 클러스터 ID를 보려면ibmcloud ks cluster get --cluster <cluster_name>
을(를) 실행하십시오. Kubernetes LoadBalancer 서비스 UID를 보려면kubectl get svc <load-balancer-name> -o yaml
을 실행하고 출력에서 metadata.uid 필드를 찾으십시오. VPC 로드 밸런서 이름의 KubernetesLoadBalancer
서비스 UID에서 하이픈(-)이 제거됩니다.ibmcloud is load-balancers
출력 예.
ID Name Family Subnets Is public Provision status Operating status Resource group r000-5aaaa11f6-c111-111f-b2e0-1c11aaaaf0dc0 kube-c441c43d02mb8mg00r70-3e25d0b5bf11111111fe4ca3f11111cb Network subnet-1 true active online default Application
-
Kubernetes
LoadBalancer
서비스 정의를 가져오고 출력을my-lb.yaml
이라는 yaml 파일로 저장하십시오.kubectl describe service my-load-balancer -o yaml
-
Kubernetes
LoadBalancer
서비스를 삭제하십시오. 그러면 해당 VPC 로드 밸런서도 삭제됩니다.kubectl delete service my-load-balancer
-
구현하려는 서브넷 또는 구역 변경사항으로 Kubernetes
LoadBalancer
서비스 정의 파일을 업데이트하십시오.LoadBalancer
서비스의 이름을 변경하지 마십시오. 네트워크 로드 밸런서에 대한 서브넷 또는 구역 지정에 대한 세부사항은 VPC용 네트워크 로드 밸런서 설정을 참조하십시오. -
새
LoadBalancer
정의 파일을 적용하십시오.kubectl apply -f my-lb.yaml
-
클러스터에서 Kubernetes
LoadBalancer
서비스가 성공적으로 다시 작성되었는지 확인하십시오. 서비스가 생성되면 LoadBalancer 인그레스 필드에 NLB의 외부 IP 주소가 채워집니다.kubectl describe service my-load-balancer
출력 예.
NAME: my-load-balancer Namespace: default Labels: <none> Annotations: service.kubernetes.io/ibm-load-balancer-cloud-provider-enable-features: nlb Selector: app=echo-server Type: LoadBalancer IP: 172.X.XXX.XX LoadBalancer Ingress: 169.XXX.XXX.XXX Port: tcp-80 80/TCP TargetPort: 8080/TCP NodePort: tcp-80 32022/TCP Endpoints: 172.XX.XX.XXX:8080,172.XX.XX.XX:8080,172.XX.XX.XX:8080 + 3 more... Session Affinity: None External Traffic Policy: Local HealthCheck NodePort: 30882 Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal EnsuringLoadBalancer 9m27s (x7 over 15m) service-controller Ensuring load balancer Normal EnsuredLoadBalancer 9m20s service-controller Ensured load balancer Normal CloudVPCLoadBalancerNormalEvent 8m17s ibm-cloud-provider Event on cloud load balancer myvpcnlb for service default/my-load-balancer with UID 2d93b07d-ecf6-41d2-ad3f-9c2985122ec1: The VPC load balancer that routes requests to this Kubernetes LoadBalancer service is currently online/active.
-
VPC 로드 밸런서가 다시 작성되고 서브넷 또는 구역이 업데이트되었는지 확인하십시오. VPC 로드 밸런서를 프로비저닝하는 데 몇 분 정도 걸리며 완전히 프로비저닝될 때까지
create_pending
상태가 표시될 수 있습니다.ibmcloud is load-balancers
출력 예.
ID Name Family Subnets Is public Provision status Operating status Resource group r006-5ecc68f6-c751-409f-b2e0-1c69babf0dc0 kube-c441c43d02mb8mg00r70-3e25d0b5bf03445796fe4ca3f73885cb Network subnet-2 true active online default