이 문서에서는 F5 BIG-IP 통합 부하 분산기의 구성 설정을 수동 부하 분산 모드로 마이그레이션하는 방법을 보여줍니다.
F5 BIG-IP 부하 분산기 지원
이전에는 개발자가 LoadBalancer
유형의 서비스를 생성하고 서비스에 가상 IP 주소(VIP)를 지정할 때 Google Distributed Cloud가 부하 분산기에서 VIP를 자동으로 구성하도록 F5 BIG-IP와 통합하여 Google Distributed Cloud를 구성할 수 있었습니다.
Controlplane V2와 같은 새로운 고급 기능을 사용 설정하려면 구성을 업데이트하는 것이 좋습니다. F5 BIG-IP 부하 분산기를 계속 사용할 수 있지만 수동 부하 분산을 사용하려면 클러스터 구성 파일의 설정을 변경해야 합니다.
마이그레이션 후에도 F5 워크로드는 유지되지만 Google Distributed Cloud에서 더 이상 관리하지 않습니다. 향후 출시 버전에서는 수동 관리에만 F5 BIG-IP를 사용할 수 있습니다. 즉, F5 BIG-IP 워크로드를 직접 관리해야 합니다.
요구사항
마이그레이션의 요구사항은 다음과 같습니다.
관리자 클러스터 및 모든 사용자 클러스터는 버전 1.29 이상이어야 합니다.
관리자 및 사용자 클러스터 노드에 고정 IP 주소를 사용해야 합니다. IP 주소 지정 유형은
network.ipMode.type
필드에 설정되며 변경할 수 없습니다. 이 필드가 DHCP로 설정된 경우 클러스터를 마이그레이션할 수 없습니다.
사용자 클러스터 구성 파일 업데이트
사용자 클러스터 구성 파일을 다음과 같이 변경합니다.
loadBalancer.kind
를"ManualLB"
로 변경합니다.loadBalancer.vips.controlPlaneVIP
및loadBalancer.vips.ingressVIP
필드의 값을 동일하게 유지합니다.인그레스 VIP로 전송되는 HTTP 트래픽에 사용되는
nodePort
를 구성합니다.현재 HTTP
nodePort
값을 가져옵니다.kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \ get svc istio-ingress -n gke-system -oyaml | grep http2 -A 1
USER_CLUSTER_KUBECONFIG
를 사용자 클러스터 kubeconfig 파일 경로로 바꿉니다.이전 명령어의 값을
loadBalancer.manualLB.ingressHTTPNodePort
필드에 추가합니다. 예를 들면 다음과 같습니다.loadBalancer: manualLB: ingressHTTPNodePort: 30243
인그레스 VIP로 전송되는 HTTPS 트래픽에 사용되는
nodePort
를 구성합니다.현재 HTTPS
nodePort
값을 가져옵니다.kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \ get svc istio-ingress -n gke-system -oyaml | grep https -A 1
이전 명령어의 값을
loadBalancer.manualLB.ingressHTTPSNodePort
필드에 추가합니다. 예를 들면 다음과 같습니다.loadBalancer: manualLB: ingressHTTPSNodePort: 30879
Kubernetes API 서버의
nodePort
를 구성합니다.Kubernetes API 서버의 현재
nodePort
값을 가져옵니다.kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG \ get svc kube-apiserver -n USER_CLUSTER_NAME -oyaml | grep kube-apiserver-port -A 1
다음을 바꿉니다.
ADMIN_CLUSTER_KUBECONFIG
를 관리자 클러스터 kubeconfig 파일의 경로로 바꿉니다.USER_CLUSTER_NAME
: 사용자 클러스터의 이름입니다.
이전 명령어의 값을
loadBalancer.manualLB.controlPlaneNodePort
필드에 추가합니다. 예를 들면 다음과 같습니다.loadBalancer: manualLB: controlPlaneNodePort: 30968
Konnectivity 서버의
nodePort
를 구성합니다.Konnectivity 서버의 현재
nodePort
값을 가져옵니다.kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG \ get svc kube-apiserver -n USER_CLUSTER_NAME -oyaml | grep konnectivity-server-port -A 1
이전 명령어의 값을
loadBalancer.manualLB.konnectivityServerNodePort
필드에 추가합니다. 예를 들면 다음과 같습니다.loadBalancer: manualLB: konnectivityServerNodePort: 30563
전체
loadBalancer.f5BigIP
섹션을 삭제합니다.gkectl diagnose cluster
를 실행하고 명령어로 발견된 문제를 해결합니다.gkectl diagnose cluster \ --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \ --cluster-name=USER_CLUSTER_NAME
사용자 클러스터를 업데이트합니다.
다음 명령어를 실행하여 클러스터를 마이그레이션합니다.
gkectl update cluster \ --kubeconfig ADMIN_CLUSTER_KUBECONFIG \ --config USER_CLUSTER_CONFIG
다음을 바꿉니다.
ADMIN_CLUSTER_KUBECONFIG
: 관리자 클러스터 kubeconfig 파일의 경로입니다.USER_CLUSTER_CONFIG
: 사용자 클러스터 구성 파일의 경로입니다.
관리자 클러스터 구성 파일 업데이트
관리자 클러스터 구성 파일을 다음과 같이 변경합니다.
loadBalancer.kind
를"ManualLB"
로 변경합니다.loadBalancer.vips.controlPlaneVIP
필드에 동일한 값을 유지합니다.adminMaster.replicas
필드 값을 확인합니다. 값이 3이면 관리자 클러스터는 고가용성(HA)입니다. 값이 1이면 관리자 클러스터는 HA가 아닙니다.HA가 아닌 관리자 클러스터에 대해서만 다음 단계를 수행합니다.
Kubernetes API 서버의
nodePort
값을 가져옵니다.kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG \ get svc kube-apiserver -n kube-system -oyaml | grep nodePort
ADMIN_CLUSTER_KUBECONFIG
를 관리자 클러스터 kubeconfig 파일의 경로로 바꿉니다.이전 명령어의 값을
loadBalancer.manualLB.controlPlaneNodePort
필드에 추가합니다. 예를 들면 다음과 같습니다.loadBalancer: manualLB: controlPlaneNodePort: 30968
다음 명령어를 실행하여
nodePort
부가기능이 있는지 확인합니다.kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG \ get deploy monitoring-operator -n kube-system -oyaml | grep admin-ingress-nodeport
이전 명령어가 값을 출력하면
loadBalancer.manualLB.addonsNodePort
필드에 값을 추가합니다. 예를 들면 다음과 같습니다.loadBalancer: manualLB: addonsNodePort: 31405
전체
loadBalancer.f5BigIP
섹션을 삭제합니다.gkectl diagnose cluster
를 실행하고 명령어로 발견된 문제를 해결합니다.gkectl diagnose cluster \ --kubeconfig=ADMIN_CLUSTER_KUBECONFIG
관리자 클러스터를 업데이트합니다.
다음 명령어를 실행하여 클러스터를 업데이트합니다.
gkectl update cluster \ --kubeconfig ADMIN_CLUSTER_KUBECONFIG \ --config ADMIN_CLUSTER_CONFIG
다음을 바꿉니다.
ADMIN_CLUSTER_KUBECONFIG
: 관리자 클러스터 kubeconfig 파일의 경로입니다.ADMIN_CLUSTER_CONFIG
: 관리자 클러스터 구성 파일의 경로입니다.
기존 F5 리소스가 여전히 존재하는지 확인
수동 부하 분산을 사용하도록 클러스터를 업데이트한 후에도 다음 명령어를 실행하여 볼 수 있듯이 기존 F5 리소스가 여전히 존재하므로 클러스터 트래픽이 중단되지 않습니다.
kubectl --kubeconfig CLUSTER_KUBECONFIG \ api-resources --verbs=list -o name | xargs -n 1 kubectl --kubeconfig CLUSTER_KUBECONFIG get --show-kind --ignore-not-found --selector=onprem.cluster.gke.io/legacy-f5-resource=true -A
CLUSTER_KUBECONFIG
를 관리자 클러스터 또는 사용자 클러스터 kubeconfig 파일의 경로로 바꿉니다.
출력은 다음과 비슷합니다.
관리자 클러스터
Warning: v1 ComponentStatus is deprecated in v1.19+ NAMESPACE NAME TYPE DATA AGE kube-system secret/bigip-login-xt697x Opaque 4 13h NAMESPACE NAME SECRETS AGE kube-system serviceaccount/bigip-ctlr 0 13h kube-system serviceaccount/load-balancer-f5 0 13h NAMESPACE NAME READY UP-TO-DATE AVAILABLE AGE kube-system deployment.apps/k8s-bigip-ctlr-deployment 1/1 1 1 13h kube-system deployment.apps/load-balancer-f5 1/1 1 1 13h NAME ROLE AGE clusterrolebinding.rbac.authorization.k8s.io/bigip-ctlr-clusterrole-binding ClusterRole/bigip-ctlr-clusterrole 13h clusterrolebinding.rbac.authorization.k8s.io/load-balancer-f5-clusterrole-binding ClusterRole/load-balancer-f5-clusterrole 13h NAME CREATED AT clusterrole.rbac.authorization.k8s.io/bigip-ctlr-clusterrole 2024-03-25T04:37:34Z clusterrole.rbac.authorization.k8s.io/load-balancer-f5-clusterrole 2024-03-25T04:37:34Z
사용자 클러스터
Warning: v1 ComponentStatus is deprecated in v1.19+ NAMESPACE NAME TYPE DATA AGE kube-system secret/bigip-login-sspwrd Opaque 4 14h NAMESPACE NAME SECRETS AGE kube-system serviceaccount/bigip-ctlr 0 14h kube-system serviceaccount/load-balancer-f5 0 14h NAMESPACE NAME READY UP-TO-DATE AVAILABLE AGE kube-system deployment.apps/k8s-bigip-ctlr-deployment 1/1 1 1 14h kube-system deployment.apps/load-balancer-f5 1/1 1 1 14h NAME ROLE AGE clusterrolebinding.rbac.authorization.k8s.io/bigip-ctlr-clusterrole-binding ClusterRole/bigip-ctlr-clusterrole 14h clusterrolebinding.rbac.authorization.k8s.io/load-balancer-f5-clusterrole-binding ClusterRole/load-balancer-f5-clusterrole 14h NAME CREATED AT clusterrole.rbac.authorization.k8s.io/bigip-ctlr-clusterrole 2024-03-25T05:16:40Z clusterrole.rbac.authorization.k8s.io/load-balancer-f5-clusterrole 2024-03-25T05:16:41Z
부하 분산기 확인
마이그레이션 후에는 VIP와 nodePort
값이 동일하게 유지되므로 부하 분산기의 설정을 변경할 필요가 없습니다. 다음 표에서는 VIP에서 노드 IP 주소 nodePort
로의 매핑을 설명합니다.
HA 관리자 클러스터
제어 영역 노드에 대한 트래픽
Google Distributed Cloud는 HA 관리자 클러스터에 대해 제어 영역 트래픽의 부하 분산을 자동으로 처리합니다. 부하 분산기에서 매핑을 구성할 필요가 없지만 loadBalancer.vips.controlPlaneVIP
필드에 IP 주소를 지정해야 합니다.
부가기능 노드의 서비스에 대한 트래픽
관리자 클러스터에 addonsNodePort
값이 있는 경우 IP 주소에 대한 매핑과 부가기능 노드의 서비스에 대한 트래픽의 nodePort
값이 표시됩니다.
- (
addonsVIP
:8443) -> (NODE_IP_ADDRESSES:addonsNodePort
)
제어 영역 노드와 부가기능 노드를 포함하여 관리자 클러스터의 모든 노드에 이 매핑이 있어야 합니다.
HA가 아닌 관리자 클러스터
제어 영역 트래픽
다음은 제어 영역 노드에 대한 IP 주소와 nodePort
값 매핑을 보여줍니다.
- (
controlPlaneVIP
:443) -> (NODE_IP_ADDRESSES:controlPlaneNodePort
)
제어 영역 노드와 부가기능 노드를 포함하여 관리자 클러스터의 모든 노드에 이 매핑이 있어야 합니다.
부가기능 노드의 서비스에 대한 트래픽
관리자 클러스터에 addonsNodePort
값이 있는 경우 부가기능 노드에서 실행 중인 서비스에 대한 IP 주소와 nodePort
값에 대해 다음 매핑이 있어야 합니다.
- (
addonsVIP
:8443) -> (NODE_IP_ADDRESSES:addonsNodePort
)
제어 영역 노드와 부가기능 노드를 포함하여 관리자 클러스터의 모든 노드에 이 매핑이 있어야 합니다.
사용자 클러스터
제어 영역 트래픽
다음은 제어 영역 트래픽에 대한 IP 주소 및 nodePort
값 매핑을 보여줍니다.
- (
controlPlaneVIP
:443
) -> (NODE_IP_ADDRESSES:controlPlaneNodePort
) - (
controlPlaneVIP
:8132
) -> (NODE_IP_ADDRESSES:konnectivityServerNodePort
)
관리자 클러스터의 모든 노드(관리자 클러스터 및 사용자 클러스터 제어 영역 노드)에 이 매핑이 있어야 합니다.
데이터 영역 트래픽
다음은 데이터 영역 트래픽에 대한 IP 주소 및 nodePort
값 매핑을 보여줍니다.
- (
ingressVIP
:80
) -> (NODE_IP_ADDRESSES:ingressHTTPNodePort
) - (
ingressVIP
:443
) -> (NODE_IP_ADDRESSES:ingressHTTPSNodePort
)