1.29: pré-visualização
1.28: não disponível
Este documento mostra como migrar as definições de configuração da integração do equilibrador de carga F5 BIG-IP para o modo de equilíbrio de carga manual para clusters na versão 1.29. Se os seus clusters estiverem na versão 1.30 ou superior, recomendamos que siga as instruções em Planeie a migração de clusters para funcionalidades recomendadas.
A utilização do F5 BIG-IP no modo de equilíbrio de carga manual dá-lhe a flexibilidade de atualizar os agentes F5 de forma independente sem afetar a funcionalidade do equilibrador de carga F5 ou dos seus serviços Kubernetes. Se migrar para a configuração manual, pode obter atualizações diretamente da F5 para garantir um desempenho e uma segurança ideais.
Esta migração é necessária nas seguintes circunstâncias:
Quiser ativar novas funcionalidades, como o Controlplane V2, e também precisar de acesso ao F5.
Precisa de capacidades fornecidas por uma versão do BIG-IP CIS Container Ingress Services (CIS) Controller superior à v1.14.
Se as circunstâncias anteriores não se aplicarem a si, pode continuar a usar a configuração incluída para o equilíbrio de carga do F5 BIG-IP.
De qualquer forma, continuamos a suportar oficialmente o F5 como uma solução de balanceamento de carga.
Suporte para o balanceador de carga F5 BIG-IP
Suportamos a utilização do F5 BIG-IP com agentes de balanceamento de carga, que consistem nos dois controladores seguintes:
Controlador F5 (prefixo do pod:
load-balancer-f5
): reconcilia os serviços Kubernetes do tipoLoadBalancer
no formato F5 Common Controller Core Library (CCCL) ConfigMap.F5 BIG-IP CIS Controller v1.14 (prefixo do pod:
k8s-bigip-ctlr-deployment
): traduz os ConfigMaps em configurações do equilibrador de carga F5.
Estes agentes simplificam a configuração dos balanceadores de carga F5 no seu cluster do Kubernetes. Ao criar um serviço do tipo LoadBalancer
, os controladores configuram automaticamente o equilibrador de carga F5 para direcionar o tráfego para os nós do cluster.
No entanto, a solução agrupada tem limitações:
A expressividade da API Service é limitada. Não pode configurar o controlador BIG-IP como quiser nem usar funcionalidades avançadas da F5. A F5 já oferece melhor suporte da API Service de forma nativa.
A implementação usa a API ConfigMap CCCL antiga e o CIS 1.x. No entanto, a F5 fornece agora a API ConfigMap AS3 mais recente e o CIS 2.x.
O controlador do CIS no pacote do Google Distributed Cloud permaneceu na versão 1.14 devido a problemas de compatibilidade com as orientações de atualização do F5 para o CIS v2.x. Por conseguinte, para lhe dar a flexibilidade de resolver vulnerabilidades de segurança e aceder às funcionalidades mais recentes, estamos a fazer a transição dos agentes F5 de componentes incluídos para instalação independente. Se migrar, pode continuar a usar os agentes existentes sem interrupções e os serviços criados anteriormente permanecem operacionais.
Para clusters de equilíbrio de carga manual criados recentemente com o F5 como solução de equilíbrio de carga, tem de instalar os controladores manualmente. Da mesma forma, se o cluster tiver sido migrado do F5 integrado e quiser usar uma versão mais recente do controlador do CIS, tem de instalar os controladores manualmente.
Requisitos
Seguem-se os requisitos para a migração:
O cluster de administrador e todos os clusters de utilizadores têm de ter a versão 1.29 ou superior.
Tem de usar endereços IP estáticos para os nós do cluster de administrador e de utilizador. O tipo de endereçamento IP é definido no campo
network.ipMode.type
e é imutável. Se este campo estiver definido como DHCP, não pode migrar os clusters.
Atualize o ficheiro de configuração do cluster de utilizadores
Faça as seguintes alterações ao ficheiro de configuração do cluster de utilizadores:
Alterar
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 para o VIP de entrada.Obter o valor HTTP
nodePort
atual:kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \ get svc istio-ingress -n gke-system -oyaml | grep http2 -A 1
Substitua
USER_CLUSTER_KUBECONFIG
pelo caminho do ficheiro kubeconfig do cluster de utilizadores.Adicione o valor do comando anterior ao campo
loadBalancer.manualLB.ingressHTTPNodePort
, por exemplo:loadBalancer: manualLB: ingressHTTPNodePort: 30243
Configure a
nodePort
usada para o tráfego HTTPS enviado para o VIP de entrada:Obter 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:Obtenha o valor
nodePort
atual 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 o seguinte:
ADMIN_CLUSTER_KUBECONFIG
com o caminho do ficheiro kubeconfig do cluster admin.USER_CLUSTER_NAME
: nome do cluster de utilizadores.
Adicione o valor do comando anterior ao campo
loadBalancer.manualLB.controlPlaneNodePort
, por exemplo:loadBalancer: manualLB: controlPlaneNodePort: 30968
Configure o
nodePort
para o servidor Konnectivity:Obtenha o valor
nodePort
atual 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
Eliminar a secção
loadBalancer.f5BigIP
inteira.
Atualize o cluster de utilizadores
Execute o seguinte comando para migrar o cluster:
gkectl update cluster \ --kubeconfig ADMIN_CLUSTER_KUBECONFIG \ --config USER_CLUSTER_CONFIG
Substitua o seguinte:
ADMIN_CLUSTER_KUBECONFIG
: o caminho do ficheiro kubeconfig do cluster de administrador.USER_CLUSTER_CONFIG
: o caminho do ficheiro de configuração do cluster de utilizadores.
Atualize o ficheiro de configuração do cluster de administrador
Faça as seguintes alterações ao ficheiro de configuração do cluster de administrador:
Alterar
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 está altamente disponível (HA). Se o valor for 1, o cluster de administrador não é de alta disponibilidade.Execute os seguintes passos apenas para clusters de administrador sem HA:
Obtenha 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 ficheiro 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 existe um suplemento
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
Eliminar a secção
loadBalancer.f5BigIP
inteira.
Atualize o cluster de administrador
Execute o seguinte comando para atualizar o cluster:
gkectl update admin \ --kubeconfig ADMIN_CLUSTER_KUBECONFIG \ --config ADMIN_CLUSTER_CONFIG
Substitua o seguinte:
ADMIN_CLUSTER_KUBECONFIG
: o caminho do ficheiro kubeconfig do cluster de administrador.ADMIN_CLUSTER_CONFIG
: o caminho do ficheiro de configuração do cluster de administrador.
Verifique se os recursos F5 antigos ainda existem
Depois de atualizar os clusters para usar o equilíbrio de carga manual, o tráfego para os clusters não é interrompido porque os recursos F5 existentes continuam a existir, como pode ver executando 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 ficheiro kubeconfig do cluster de administrador ou do cluster de utilizador.
O resultado esperado é semelhante ao seguinte:
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 utilizadores:
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
Verifique o equilibrador de carga
Após a migração, não deve ter de alterar nenhuma definição no seu equilibrador de carga porque manteve os mesmos VIPs e valores nodePort
. As tabelas seguintes descrevem os mapeamentos de VIPs para endereços IP de nós:nodePort
.
Cluster de administrador de HA
Tráfego para nós do plano de controlo
O Google Distributed Cloud processa automaticamente o equilíbrio de carga do tráfego do plano de controlo para clusters de administrador de HA. Embora não precise de configurar um mapeamento no equilibrador de carga, tem de especificar um endereço IP no campo loadBalancer.vips.controlPlaneVIP
.
Tráfego para serviços nos nós suplementares
Se o seu cluster de administrador tiver um valor para addonsNodePort
, deve ver um mapeamento para os endereços IP e o valor nodePort
para o tráfego para serviços em nós suplementares:
- (
addonsVIP
:8443) -> (NODE_IP_ADDRESSES:addonsNodePort
)
Deve ter este mapeamento para todos os nós no cluster de administrador, tanto os nós do plano de controlo como os nós do suplemento.
Cluster de administrador não de HA
Tráfego do plano de controlo
A imagem seguinte mostra o mapeamento para o endereço IP e o valor nodePort
do nó do plano de controlo:
- (
controlPlaneVIP
:443) -> (NODE_IP_ADDRESSES:controlPlaneNodePort
)
Deve ter este mapeamento para todos os nós no cluster de administrador, tanto o nó do plano de controlo como os nós de suplementos.
Tráfego para serviços nos nós suplementares
Se o cluster de administrador tiver um valor para addonsNodePort
, deve ter o seguinte mapeamento para os endereços IP e os valores nodePort
para os serviços em execução nos nós suplementares:
- (
addonsVIP
:8443) -> (NODE_IP_ADDRESSES:addonsNodePort
)
Deve ter este mapeamento para todos os nós no cluster de administrador, tanto o nó do plano de controlo como os nós de suplementos.
Cluster de utilizadores
Tráfego do plano de controlo
A imagem seguinte mostra o mapeamento para os endereços IP e os valores nodePort
para o tráfego do plano de controlo:
- (
controlPlaneVIP
:443
) -> (NODE_IP_ADDRESSES:controlPlaneNodePort
) - (
controlPlaneVIP
:8132
) -> (NODE_IP_ADDRESSES:konnectivityServerNodePort
)
Deve ter este mapeamento para todos os nós no cluster admin, tanto o cluster de administrador como os nós do plano de controlo do cluster de utilizador.
Tráfego do plano de dados
A tabela seguinte mostra o mapeamento para os endereços IP e os valores nodePort
para o tráfego do plano de dados:
- (
ingressVIP
:80
) -> (NODE_IP_ADDRESSES:ingressHTTPNodePort
) - (
ingressVIP
:443
) -> (NODE_IP_ADDRESSES:ingressHTTPSNodePort
)