Este documento mostra como migrar as definições de configuração do balanceador de carga integrado F5 BIG-IP para o modo de balanceamento de carga manual.
Suporte para o balanceador de carga F5 BIG-IP
Antes, era possível configurar o Google Distributed Cloud para ser integrado ao
F5 BIG-IP da seguinte maneira: quando um desenvolvedor cria um Serviço do tipo
LoadBalancer
e especifica um endereço IP virtual (VIP) para o serviço,
o Google Distributed Cloud configura automaticamente o VIP no balanceador de carga.
Para ativar recursos novos e avançados, como o Controlplane V2, recomendamos que você atualize a configuração. É possível continuar usando o balanceador de carga F5 Big-IP, mas é necessário alterar as definições nos arquivos de configuração do cluster para usar o balanceamento de carga manual.
Requisitos
Confira os requisitos para a migração:
O cluster de administrador e todos os clusters de usuário precisam estar na versão 1.29 ou superior.
Você precisa usar endereços IP estáticos para os nós do cluster de administrador e de usuário. O tipo de endereçamento IP é definido no campo
network.ipMode.type
e é imutável. Se esse campo estiver definido como DHCP, não será possível migrar os clusters.
Atualizar o arquivo de configuração do cluster de usuário
Faça as seguintes alterações no arquivo de configuração do cluster de usuário:
Mude
loadBalancer.kind
para"ManualLB"
.Mantenha os mesmos valores para os campos
loadBalancer.vips.controlPlaneVIP
eloadBalancer.vips.ingressVIP
.Configure o
nodePort
usado para o tráfego HTTP enviado ao VIP de entrada.Consiga o valor atual de HTTP
nodePort
:kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \ get svc istio-ingress -n gke-system -oyaml | grep http2 -A 1
Substitua
USER_CLUSTER_KUBECONFIG
pelo caminho do arquivo kubeconfig do cluster de usuário.Adicione o valor do comando anterior ao campo
loadBalancer.manualLB.ingressHTTPNodePort
, por exemplo:loadBalancer: manualLB: ingressHTTPNodePort: 30243
Configure o
nodePort
usado para o tráfego HTTPS enviado ao VIP de entrada:Consiga o valor atual de HTTPS
nodePort
:kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \ get svc istio-ingress -n gke-system -oyaml | grep https -A 1
Adicione o valor do comando anterior ao campo
loadBalancer.manualLB.ingressHTTPSNodePort
, por exemplo:loadBalancer: manualLB: ingressHTTPSNodePort: 30879
Configure o
nodePort
para o servidor da API Kubernetes:Consiga o valor atual de
nodePort
para o servidor da API Kubernetes:kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG \ get svc kube-apiserver -n USER_CLUSTER_NAME -oyaml | grep kube-apiserver-port -A 1
Substitua:
ADMIN_CLUSTER_KUBECONFIG
pelo caminho do arquivo kubeconfig do cluster admin.USER_CLUSTER_NAME
: nome do cluster de usuário.
Adicione o valor do comando anterior ao campo
loadBalancer.manualLB.controlPlaneNodePort
, por exemplo:loadBalancer: manualLB: controlPlaneNodePort: 30968
Configure o
nodePort
para o servidor Konnectivity:Consiga o valor atual de
nodePort
para o servidor Konnectivity:kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG \ get svc kube-apiserver -n USER_CLUSTER_NAME -oyaml | grep konnectivity-server-port -A 1
Adicione o valor do comando anterior ao campo
loadBalancer.manualLB.konnectivityServerNodePort
, por exemplo:loadBalancer: manualLB: konnectivityServerNodePort: 30563
Exclua toda a seção
loadBalancer.f5BigIP
.Execute
gkectl diagnose cluster
e corrija os problemas encontrados pelo comando.gkectl diagnose cluster \ --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \ --cluster-name=USER_CLUSTER_NAME
Atualize o cluster de usuário:
Execute o seguinte comando para migrar o cluster:
gkectl update cluster \ --kubeconfig ADMIN_CLUSTER_KUBECONFIG \ --config USER_CLUSTER_CONFIG
Substitua:
ADMIN_CLUSTER_KUBECONFIG
: o caminho do arquivo kubeconfig do cluster de administrador.USER_CLUSTER_CONFIG
: o caminho do arquivo de configuração do cluster de usuário.
Atualizar o arquivo de configuração do cluster de administrador
Faça as seguintes alterações no arquivo de configuração do cluster de administrador:
Mude
loadBalancer.kind
para"ManualLB"
.Mantenha o mesmo valor para o campo
loadBalancer.vips.controlPlaneVIP
.Verifique o valor do campo
adminMaster.replicas
. Se o valor for 3, o cluster de administrador tem alta disponibilidade (HA, na sigla em inglês). Se o valor for 1, o cluster de administrador não é de alta disponibilidade.Siga as etapas a seguir apenas para clusters de administrador que não sejam de alta disponibilidade:
Consiga o valor de
nodePort
para o servidor da API Kubernetes:kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG \ get svc kube-apiserver -n kube-system -oyaml | grep nodePort
Substitua
ADMIN_CLUSTER_KUBECONFIG
pelo caminho do arquivo kubeconfig do cluster de administrador.Adicione o valor do comando anterior ao campo
loadBalancer.manualLB.controlPlaneNodePort
, por exemplo:loadBalancer: manualLB: controlPlaneNodePort: 30968
Execute o seguinte comando para ver se há um complemento
nodePort
:kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG \ get deploy monitoring-operator -n kube-system -oyaml | grep admin-ingress-nodeport
Se o comando anterior gerar um valor, adicione-o ao campo
loadBalancer.manualLB.addonsNodePort
, por exemplo:loadBalancer: manualLB: addonsNodePort: 31405
Exclua toda a seção
loadBalancer.f5BigIP
.Execute
gkectl diagnose cluster
e corrija os problemas encontrados pelo comando.gkectl diagnose cluster \ --kubeconfig=ADMIN_CLUSTER_KUBECONFIG
Atualize o cluster de administrador:
Execute o seguinte comando para atualizar o cluster:
gkectl update cluster \ --kubeconfig ADMIN_CLUSTER_KUBECONFIG \ --config ADMIN_CLUSTER_CONFIG
Substitua:
ADMIN_CLUSTER_KUBECONFIG
: o caminho do arquivo kubeconfig do cluster de administrador.ADMIN_CLUSTER_CONFIG
: o caminho do arquivo de configuração do cluster de administrador.
Verificar se os recursos F5 legados ainda existem
Depois de atualizar os clusters para usar o balanceamento de carga manual, o tráfego para os clusters não será interrompido porque os recursos F5 atuais ainda existem, como você pode ver ao executar o seguinte comando:
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
Substitua CLUSTER_KUBECONFIG
pelo caminho do
cluster de administrador ou pelo arquivo kubeconfig do cluster de usuário.
A saída esperada terá esta aparência:
Cluster de administrador:
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
Cluster de usuário:
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
Verificar o balanceador de carga
Após a migração, não será necessário mudar nenhuma configuração no balanceador
de carga porque você manteve os mesmos valores de VIPs e nodePort
. As tabelas
a seguir descrevem os mapeamentos de VIPs para endereços IP do nó:nodePort
.
Cluster de administrador de alta disponibilidade
Tráfego para nós do plano de controle
O Google Distributed Cloud gerencia automaticamente o balanceamento de carga do tráfego do plano
de controle para clusters de administrador de alta disponibilidade. Embora não seja necessário configurar um mapeamento
no balanceador de carga, é preciso especificar um endereço IP no
campo loadBalancer.vips.controlPlaneVIP
.
Tráfego para serviços nos nós do complemento
Se o cluster de administrador tiver um valor para addonsNodePort
, você verá um
mapeamento para os endereços IP e o valor nodePort
para o tráfego para serviços nos
nós complementares:
- (
addonsVIP
:8443) -> (NODE_IP_ADDRESSES:addonsNodePort
)
Você precisa ter esse mapeamento para todos os nós no cluster de administrador, tanto os nós do plano de controle quanto os nós do complemento.
Cluster de administrador que não é de alta disponibilidade
Tráfego do plano de controle
Veja a seguir o mapeamento para o endereço IP e o valor nodePort
do
nó do plano de controle:
- (
controlPlaneVIP
:443) -> (NODE_IP_ADDRESSES:controlPlaneNodePort
)
Você precisa ter esse mapeamento para todos os nós no cluster de administrador, tanto o nó do plano de controle quanto os nós do complemento.
Tráfego para serviços nos nós do complemento
Se o cluster de administrador tiver um valor para addonsNodePort
, será preciso ter o
seguinte mapeamento para os endereços IP e os valores nodePort
para serviços
em execução nos nós complementares:
- (
addonsVIP
:8443) -> (NODE_IP_ADDRESSES:addonsNodePort
)
Você precisa ter esse mapeamento para todos os nós no cluster de administrador, tanto o nó do plano de controle quanto os nós do complemento.
Cluster de usuário
Tráfego do plano de controle
Veja a seguir o mapeamento para os endereços IP e os valores nodePort
do
tráfego do plano de controle:
- (
controlPlaneVIP
:443
) -> (NODE_IP_ADDRESSES:controlPlaneNodePort
) - (
controlPlaneVIP
:8132
) -> (NODE_IP_ADDRESSES:konnectivityServerNodePort
)
É necessário ter esse mapeamento para todos os nós no cluster admin, tanto o cluster de administrador quanto os nós do plano de controle do cluster de usuário.
Tráfego do plano de dados
Veja a seguir o mapeamento para os endereços IP e os valores nodePort
do tráfego do plano de dados:
- (
ingressVIP
:80
) -> (NODE_IP_ADDRESSES:ingressHTTPNodePort
) - (
ingressVIP
:443
) -> (NODE_IP_ADDRESSES:ingressHTTPSNodePort
)