Esta página explica como criar um balanceador de carga de rede de encaminhamento interno ou um balanceador de carga interno no Google Kubernetes Engine (GKE). Para criar um balanceador de carga de rede de encaminhamento externo, consulte o artigo Crie um serviço do tipo LoadBalancer.
Antes de ler esta página, certifique-se de que conhece os seguintes conceitos:
- Serviço LoadBalancer.
- Parâmetros do serviço LoadBalancer.
- Balanceador de carga de rede de encaminhamento externo baseado em serviços de back-end.
Usar o balanceador de carga de rede de encaminhamento interno
Os balanceadores de carga de rede de passagem internos tornam os serviços do seu cluster acessíveis aos clientes localizados na rede VPC do cluster e aos clientes em redes que estão ligadas à rede VPC do cluster. Os clientes na rede VPC do cluster podem ser nós ou pods do cluster, ou podem ser VMs fora do cluster. Para mais informações sobre a conetividade de clientes em redes ligadas, consulte o artigo Balanceadores de carga de passagem interna e redes ligadas.
Usar a subdivisão do GKE
A divisão em subconjuntos do GKE melhora a escalabilidade dos serviços LoadBalancer internos porque usa GCE_VM_IP
grupos de pontos finais de rede (NEGs)
como back-ends em vez de grupos de instâncias. Quando a restrição do GKE está ativada, o GKE cria um NEG por zona de computação por serviço de LoadBalancer interno.
O externalTrafficPolicy
do serviço controla a associação de nós nos back-ends do GCE_VM_IP
NEG. Para mais informações, consulte o artigo Associação de nós a back-ends de GCE_VM_IP
NEG.
Usar afinidade zonal
Quando ativa a afinidade zonal num Network Load Balancer de encaminhamento interno, o GKE encaminha o tráfego originário de uma zona para nós e pods nessa mesma zona. Se não existirem pods em bom estado na zona, o GKE encaminha o tráfego para outra zona. Esta implementação otimiza a latência e o custo.
Para ativar a afinidade zonal num cluster do GKE, tem de ter o subconjunto do GKE ativado.
Requisitos e limitações
Seguem-se os requisitos e as limitações para balanceadores de carga internos.
Requisitos
A subdivisão do GKE tem os seguintes requisitos e limitações:
- Pode ativar a restrição de subconjuntos do GKE em clusters padrão novos e existentes nas versões 1.18.19-gke.1400 e posteriores do GKE. Não é possível desativar a subdivisão do GKE depois de ativada.
- Por predefinição, a restrição de subconjuntos do GKE está desativada nos clusters do Autopilot. No entanto, pode ativá-lo depois de criar o cluster.
- A restrição de subconjuntos do GKE requer que o suplemento
HttpLoadBalancing
esteja ativado. Este suplemento está ativado por predefinição. Nos clusters do Autopilot, não pode desativar este suplemento obrigatório. - Aplicam-se as quotas para grupos de pontos finais da rede. Google Cloud cria um
GCE_VM_IP
NEG por serviço de balanceador de carga interno por zona. - Aplicam-se quotas para regras de encaminhamento, serviços de back-end e verificações de funcionamento. Para mais informações, consulte o artigo Quotas e limites.
- Não é possível usar a subdivisão do GKE com a anotação para partilhar um serviço de back-end entre vários balanceadores de carga
alpha.cloud.google.com/load-balancer-backend-share
. - Tem de ter a versão 345.0.0 ou posterior da Google Cloud CLI.
A afinidade zonal tem os seguintes requisitos:
- Pode ativar a afinidade zonal em clusters novos e existentes na versão 1.33.3-gke.1392000 e posterior do GKE.
- Tem de ter a restrição de subconjuntos do GKE ativada.
- Tem de garantir que o suplemento
HttpLoadBalancing
está ativado para o seu cluster. Este suplemento está ativado por predefinição e permite que o cluster faça a gestão dos equilibradores de carga que usam serviços de back-end. - Tem de incluir
spec.trafficDistribution: PreferClose
no manifesto do serviço LoadBalancer.
O manifesto do serviço LoadBalancer pode usar externalTrafficPolicy: Local
ou externalTrafficPolicy: Cluster
.
Limitações
Balanceadores de carga de rede de encaminhamento interno
- Para clusters que executam a versão 1.7.4 do Kubernetes e posteriores, pode usar balanceadores de carga internos com sub-redes no modo personalizado, além de sub-redes no modo automático.
- Os clusters que executam a versão 1.7.X e posterior do Kubernetes suportam a utilização de um endereço IP reservado para o equilibrador de carga de passagem interno se criar o endereço IP reservado com a flag
--purpose
definida comoSHARED_LOADBALANCER_VIP
. Consulte o artigo Ativar IP partilhado para ver instruções passo a passo. O GKE só preserva o endereço IP de um Network Load Balancer de passagem interno se o serviço fizer referência a um endereço IP interno com esse objetivo. Caso contrário, o GKE pode alterar o endereço IP do balanceador de carga (spec.loadBalancerIP
) se o serviço for atualizado (por exemplo, se as portas forem alteradas). - Mesmo que o endereço IP do balanceador de carga mude (consulte o ponto anterior), o
spec.clusterIP
permanece constante. - Os balanceadores de carga UDP internos não suportam a utilização de
sessionAffinity: ClientIP
.
Antes de começar
Antes de começar, certifique-se de que realizou as seguintes tarefas:
- Ative a API Google Kubernetes Engine. Ative a API Google Kubernetes Engine
- Se quiser usar a CLI gcloud para esta tarefa,
instale-a e, em seguida,
inicialize-a. Se instalou anteriormente a CLI gcloud, execute
gcloud components update
para obter a versão mais recente.
- Certifique-se de que tem um cluster do Autopilot ou Standard existente. Para criar um novo cluster, consulte o artigo Crie um cluster do Autopilot.
Ative a seleção de subconjuntos do GKE num cluster
Pode ativar a subdivisão do GKE para um cluster existente através da CLI gcloud ou da Google Cloud consola. Não pode desativar a subdivisão do GKE depois de a ter ativado.
Consola
Na Google Cloud consola, aceda à página Google Kubernetes Engine.
Na lista de clusters, clique no nome do cluster que quer modificar.
Em Rede, junto ao campo Subconjunto para balanceadores de carga internos de nível 4, clique em edit Ativar subconjunto para balanceadores de carga internos de nível 4.
Selecione a caixa de verificação Ativar a criação de subconjuntos para balanceadores de carga internos de nível 4.
Clique em Guardar alterações.
gcloud
gcloud container clusters update CLUSTER_NAME \
--enable-l4-ilb-subsetting
Substitua o seguinte:
CLUSTER_NAME
: o nome do cluster.
A ativação da subdivisão do GKE não interrompe os serviços LoadBalancer internos existentes. Se quiser migrar os serviços LoadBalancer internos existentes para usar serviços de back-end com NEGs GCE_VM_IP
como back-ends, tem de implementar um manifesto de serviço de substituição. Para mais detalhes, consulte a secção
Agrupamento de nós
na documentação de conceitos do serviço LoadBalancer.
Implemente uma carga de trabalho
O manifesto seguinte descreve uma implementação que executa uma imagem de contentor de aplicação Web de exemplo.
Guarde o manifesto como
ilb-deployment.yaml
:apiVersion: apps/v1 kind: Deployment metadata: name: ilb-deployment spec: replicas: 3 selector: matchLabels: app: ilb-deployment template: metadata: labels: app: ilb-deployment spec: containers: - name: hello-app image: us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
Aplique o manifesto ao cluster:
kubectl apply -f ilb-deployment.yaml
Crie um serviço LoadBalancer interno
(Opcional) Desative a criação automática de regras de firewall da VPC:
Embora o GKE crie automaticamente regras da firewall da VPC para permitir o tráfego para o seu equilibrador de carga interno, tem a opção de desativar a criação automática de regras da firewall da VPC e gerir as regras da firewall por si. Só pode desativar as regras de firewall da VPC se tiver ativado a subdivisão do GKE para o seu serviço LoadBalancer interno. No entanto, a gestão das regras de firewall da VPC é opcional e pode confiar nas regras automáticas.
Antes de desativar a criação automática de regras de firewall da VPC, certifique-se de que define regras de permissão que permitam que o tráfego alcance o balanceador de carga e os pods da aplicação.
Para mais informações sobre a gestão de regras da firewall da VPC, consulte o artigo Faça a gestão da criação automática de regras da firewall e, para saber como desativar a criação automática de regras da firewall, consulte o artigo Regras da firewall geridas pelo utilizador para serviços LoadBalancer do GKE.
O exemplo seguinte cria um serviço LoadBalancer interno com a porta TCP
80
. O GKE implementa um balanceador de carga de rede de passagem interno cuja regra de encaminhamento usa a porta80
, mas encaminha o tráfego para pods de back-end na porta8080
:Guarde o manifesto como
ilb-svc.yaml
:apiVersion: v1 kind: Service metadata: name: ilb-svc # Request an internal load balancer. annotations: networking.gke.io/load-balancer-type: "Internal" spec: type: LoadBalancer # Evenly route external traffic to all endpoints. externalTrafficPolicy: Cluster # Prioritize routing traffic to endpoints that are in the same zone. trafficDistribution: PreferClose selector: app: ilb-deployment # Forward traffic from TCP port 80 to port 8080 in backend Pods. ports: - name: tcp-port protocol: TCP port: 80 targetPort: 8080
O manifesto tem de conter o seguinte:
- Um
name
para o serviço LoadBalancer interno, neste caso,ilb-svc
. - Uma anotação que especifica que precisa de um serviço LoadBalancer interno.
Para as versões 1.17 e posteriores do GKE, use a anotação
networking.gke.io/load-balancer-type: "Internal"
, conforme mostrado no manifesto de exemplo. Para versões anteriores, use a políticacloud.google.com/load-balancer-type: "Internal"
. - O
type: LoadBalancer
. - Um campo
spec: selector
para especificar os agrupamentos que o serviço deve segmentar, por exemplo,app: hello
. - Informações da porta:
- O elemento
port
representa a porta de destino na qual a regra de encaminhamento do balanceador de carga de rede de passagem interna recebe pacotes. - O
targetPort
tem de corresponder a umcontainerPort
definido em cada agrupamento de serviço. - Os valores
port
etargetPort
não têm de ser iguais. Os nós executam sempre NAT de destino, alterando o endereço IP da regra de encaminhamento do balanceador de carga de destino eport
para um endereço IP do pod de destino etargetPort
. Para mais detalhes, consulte o artigo Tradução do endereço de rede de destino em nós na documentação de conceitos do serviço LoadBalancer.
- O elemento
O manifesto pode conter o seguinte:
spec.ipFamilyPolicy
eipFamilies
para definir como o GKE atribui endereços IP ao serviço. O GKE suporta serviços de balanceamento de carga de IP de pilha única (apenas IPv4 ou apenas IPv6) ou de pilha dupla. Um serviço LoadBalancer de pilha dupla é implementado com duas regras de encaminhamento do balanceador de carga de rede de passagem interna separadas: uma para tráfego IPv4 e outra para tráfego IPv6. O serviço LoadBalancer de pilha dupla do GKE está disponível na versão 1.29 ou posterior. Para saber mais, consulte o artigo Serviços de pilha dupla IPv4/IPv6.spec.trafficDistribution
para definir como o GKE encaminha o tráfego recebido (pré-visualização). Se definir este campo comoPreferClose
, o GKE encaminha o tráfego que tem origem numa zona para nós e pods nessa mesma zona. Se não existirem pods em bom estado na zona, o GKE encaminha o tráfego para outra zona. Se incluir este campo, tem de ter a restrição de subconjuntos do GKE ativada.
Para mais informações, consulte os parâmetros do serviço LoadBalancer
- Um
Aplique o manifesto ao cluster:
kubectl apply -f ilb-svc.yaml
Receba informações detalhadas sobre o serviço:
kubectl get service ilb-svc --output yaml
O resultado é semelhante ao seguinte:
apiVersion: v1 kind: Service metadata: annotations: cloud.google.com/neg: '{"ingress":true}' cloud.google.com/neg-status: '{"network_endpoint_groups":{"0":"k8s2-pn2h9n5f-default-ilb-svc-3bei4n1r"},"zones":["ZONE_NAME","ZONE_NAME","ZONE_NAME"]}' kubectl.kubernetes.io/last-applied-configuration: | {"apiVersion":"v1","kind":"Service","metadata":{"annotations":{"networking.gke.io/load-balancer-type":"Internal"},"name":"ilb-svc","namespace":"default"},"spec":{"externalTrafficPolicy":"Cluster","ports":[{"name":"tcp-port","port":80,"protocol":"TCP","targetPort":8080}],"selector":{"app":"ilb-deployment"},"type":"LoadBalancer"}} networking.gke.io/load-balancer-type: Internal service.kubernetes.io/backend-service: k8s2-pn2h9n5f-default-ilb-svc-3bei4n1r service.kubernetes.io/firewall-rule: k8s2-pn2h9n5f-default-ilb-svc-3bei4n1r service.kubernetes.io/firewall-rule-for-hc: k8s2-pn2h9n5f-l4-shared-hc-fw service.kubernetes.io/healthcheck: k8s2-pn2h9n5f-l4-shared-hc service.kubernetes.io/tcp-forwarding-rule: k8s2-tcp-pn2h9n5f-default-ilb-svc-3bei4n1r creationTimestamp: "2022-07-22T17:26:04Z" finalizers: - gke.networking.io/l4-ilb-v2 - service.kubernetes.io/load-balancer-cleanup name: ilb-svc namespace: default resourceVersion: "51666" uid: d7a1a865-7972-44e1-aa9e-db5be23d6567 spec: allocateLoadBalancerNodePorts: true clusterIP: 10.88.2.141 clusterIPs: - 10.88.2.141 externalTrafficPolicy: Cluster internalTrafficPolicy: Cluster ipFamilies: - IPv4 ipFamilyPolicy: SingleStack ports: - name: tcp-port # Kubernetes automatically allocates a port on the node during the # process of implementing a Service of type LoadBalancer. nodePort: 30521 port: 80 protocol: TCP targetPort: 8080 selector: app: ilb-deployment sessionAffinity: None trafficDistribution: PreferClose type: LoadBalancer status: # IP address of the load balancer forwarding rule. loadBalancer: ingress: - ip: 10.128.15.245
A saída tem os seguintes atributos:
- O endereço IP da regra de encaminhamento do balanceador de carga de rede de passagem interno está incluído em
status.loadBalancer.ingress
. Este endereço IP é diferente do valor declusterIP
. Neste exemplo, o endereço IP da regra de encaminhamento do balanceador de carga é10.128.15.245
. - Qualquer agrupamento com a etiqueta
app: ilb-deployment
é um agrupamento de publicação para este serviço. Estes são os pods que recebem pacotes encaminhados pelo balanceador de carga de rede de passagem interno. - Os clientes chamam o serviço através deste endereço IP
loadBalancer
e da porta de destino TCP especificada no campoport
do manifesto do serviço. Para ver detalhes completos sobre como os pacotes são encaminhados assim que são recebidos por um nó, consulte o artigo Processamento de pacotes. - O GKE atribuiu um
nodePort
ao serviço. Neste exemplo, a porta30521
é atribuída. OnodePort
não é relevante para o balanceador de carga de rede de encaminhamento interno.
- O endereço IP da regra de encaminhamento do balanceador de carga de rede de passagem interno está incluído em
Inspeccione o grupo de pontos finais da rede de serviços:
kubectl get svc ilb-svc -o=jsonpath="{.metadata.annotations.cloud\.google\.com/neg-status}"
O resultado é semelhante ao seguinte:
{"network_endpoint_groups":{"0":"k8s2-knlc4c77-default-ilb-svc-ua5ugas0"},"zones":["ZONE_NAME"]}
A resposta indica que o GKE criou um grupo de pontos finais de rede com o nome
k8s2-knlc4c77-default-ilb-svc-ua5ugas0
. Esta anotação está presente em serviços do tipoLoadBalancer
que usam a subdivisão do GKE e não está presente em serviços que não usam a subdivisão do GKE.
Valide os componentes do balanceador de carga de encaminhamento interno
Esta secção mostra como validar os componentes principais do seu Network Load Balancer de encaminhamento interno.
Verifique se o serviço está em execução:
kubectl get service SERVICE_NAME --output yaml
Substitua
SERVICE_NAME
pelo nome do manifesto do serviço.Se ativou a afinidade zonal, o resultado inclui o parâmetro
spec.trafficDistribution
com o campo definido comoPreferClose
.Valide o endereço IP da regra de encaminhamento do balanceador de carga de rede de passagem interno. O endereço IP da regra de encaminhamento do balanceador de carga de rede de encaminhamento interno é
10.128.15.245
no exemplo incluído na secção Crie um serviço LoadBalancer interno. Verifique se esta regra de encaminhamento está incluída na lista de regras de encaminhamento no projeto do cluster através da CLI do Google Cloud:gcloud compute forwarding-rules list --filter="loadBalancingScheme=INTERNAL"
O resultado inclui a regra de encaminhamento do balanceador de carga de passagem interno relevante, o respetivo endereço IP e o serviço de back-end referenciado pela regra de encaminhamento (
k8s2-pn2h9n5f-default-ilb-svc-3bei4n1r
neste exemplo).NAME ... IP_ADDRESS ... TARGET ... k8s2-tcp-pn2h9n5f-default-ilb-svc-3bei4n1r 10.128.15.245 ZONE_NAME/backendServices/k8s2-pn2h9n5f-default-ilb-svc-3bei4n1r
Descreva o serviço de back-end do balanceador de carga através da CLI Google Cloud:
gcloud compute backend-services describe k8s2-tcp-pn2h9n5f-default-ilb-svc-3bei4n1r --region=COMPUTE_REGION
Substitua
COMPUTE_REGION
pela região de computação do serviço de back-end.Se ativou a afinidade zonal:
- O campo
networkPassThroughLbTrafficPolicy.zonalAffinity.spillover
deve ser definido comoZONAL_AFFINITY_SPILL_CROSS_ZONE
. - O campo
networkPassThroughLbTrafficPolicy.zonalAffinity.spilloverRatio
deve ser definido como0
ou não ser incluído.
O resultado inclui o NEG ou os NEGs de back-end para o serviço (
k8s2-pn2h9n5f-default-ilb-svc-3bei4n1r
neste exemplo).GCE_VM_IP
backends: - balancingMode: CONNECTION group: .../ZONE_NAME/networkEndpointGroups/k8s2-pn2h9n5f-default-ilb-svc-3bei4n1r ... kind: compute#backendService loadBalancingScheme: INTERNAL name: aae3e263abe0911e9b32a42010a80008 networkPassThroughLbTrafficPolicy: zonalAffinity: spillover: ZONAL_AFFINITY_SPILL_CROSS_ZONE protocol: TCP ...
Se desativou a afinidade zonal, o campo
networkPassThroughLbTrafficPolicy.zonalAffinity.spillover
deve ser definido comoZONAL_AFFINITY_DISABLED
ou não ser incluído. Tenha em atenção que a afinidade zonal é desativada automaticamente se o seu cluster estiver numa versão anterior à 1.33.3-gke.1392000.- O campo
Determinar a lista de nós num subconjunto para um serviço:
gcloud compute network-endpoint-groups list-network-endpoints NEG_NAME \ --zone=COMPUTE_ZONE
Substitua o seguinte:
NEG_NAME
: o nome do grupo de pontos finais da rede criado pelo controlador do GKE.COMPUTE_ZONE
: a zona de computação do grupo de pontos finais de rede no qual operar.
Determine a lista de nós em bom estado para um balanceador de carga de rede de encaminhamento interno:
gcloud compute backend-services get-health SERVICE_NAME \ --region=COMPUTE_REGION
Substitua o seguinte:
SERVICE_NAME
: o nome do serviço de back-end. Este valor é igual ao nome do grupo de pontos finais de rede criado pelo controlador do GKE.COMPUTE_REGION
: a região de computação do serviço de back-end no qual operar.
Teste a conetividade ao balanceador de carga de encaminhamento interno
Execute o seguinte comando na mesma região que o cluster:
curl LOAD_BALANCER_IP:80
Substitua LOAD_BALANCER_IP
pelo endereço IP da regra de encaminhamento do balanceador de carga.
A resposta mostra o resultado de ilb-deployment
:
Hello, world!
Version: 1.0.0
Hostname: ilb-deployment-77b45987f7-pw54n
O balanceador de carga de rede de passagem interno só é acessível na mesma rede da VPC (ou numa rede ligada). Por predefinição, a regra de encaminhamento do balanceador de carga tem o acesso global desativado. Por isso, as VMs do cliente, os túneis da Cloud VPN ou os anexos do Cloud Interconnect (VLANs) têm de estar localizados na mesma região que o Network Load Balancer de passagem interno. Para suportar clientes em todas as regiões, pode ativar o acesso global na regra de encaminhamento do balanceador de carga incluindo a anotação global access no manifesto do serviço.
Elimine o serviço LoadBalancer interno e os recursos do balanceador de carga
Pode eliminar a implementação e o serviço através da kubectl delete
ou da consolaGoogle Cloud .
kubectl
Elimine a implementação
Para eliminar a implementação, execute o seguinte comando:
kubectl delete deployment ilb-deployment
Elimine o serviço
Para eliminar o serviço, execute o seguinte comando:
kubectl delete service ilb-svc
Consola
Elimine a implementação
Para eliminar a implementação, siga os passos abaixo:
Aceda à página Workloads na Google Cloud consola.
Selecione a implementação que quer eliminar e, de seguida, clique em delete Eliminar.
Quando lhe for pedido para confirmar, selecione a caixa de verificação Eliminar Horizontal Pod Autoscaler associado à implementação selecionada e, de seguida, clique em Eliminar.
Elimine o serviço
Para eliminar o serviço, siga estes passos:
Aceda à página Serviços e entrada na Google Cloud consola.
Selecione o serviço que quer eliminar e, de seguida, clique em delete Eliminar.
Quando lhe for pedido que confirme, clique em Eliminar.
IP partilhado
O Network Load Balancer de passagem interno permite a
partilha de um endereço IP virtual entre várias regras de encaminhamento.
Isto é útil para expandir o número de portas simultâneas no mesmo IP ou para aceitar tráfego UDP e TCP no mesmo IP. Permite um máximo de 50 portas expostas por endereço IP. Os IPs partilhados são suportados nativamente em clusters do GKE com serviços de LoadBalancer internos.
Durante a implementação, o campo loadBalancerIP
do serviço é usado para indicar que IP deve ser partilhado entre serviços.
Limitações
Um IP partilhado para vários balanceadores de carga tem as seguintes limitações e capacidades:
- Cada regra de encaminhamento pode ter até cinco portas (contíguas ou não contíguas) ou pode ser configurada para corresponder e encaminhar tráfego em todas as portas. Se um serviço de balanceamento de carga interno definir mais de cinco portas, a regra de encaminhamento é automaticamente definida para corresponder a todas as portas.
- Um máximo de dez serviços (regras de encaminhamento) podem partilhar um endereço IP. Isto resulta num máximo de 50 portas por IP partilhado.
- Cada regra de encaminhamento que partilha o mesmo endereço IP tem de usar uma combinação única de protocolos e portas. Por conseguinte, cada serviço LoadBalancer interno tem de usar um conjunto único de protocolos e portas.
- É suportada uma combinação de serviços apenas TCP e apenas UDP no mesmo IP partilhado. No entanto, não pode expor portas TCP e UDP no mesmo serviço.
Ativar IP partilhado
Para permitir que os serviços LoadBalancer internos partilhem um IP comum, siga estes passos:
Crie um IP interno estático com
--purpose SHARED_LOADBALANCER_VIP
. Tem de criar um endereço IP com este objetivo para permitir a sua partilha. Se criar o endereço IP interno estático numa VPC partilhada, tem de criar o endereço IP no mesmo projeto de serviço que a instância que vai usar o endereço IP, mesmo que o valor do endereço IP seja proveniente do intervalo de IPs disponíveis numa sub-rede partilhada selecionada da rede VPC partilhada. Consulte o artigo sobre reservar um IP interno estático na página Aprovisionamento da VPC partilhada para mais informações.Implemente até dez serviços LoadBalancer internos através deste IP estático no campo
loadBalancerIP
. Os balanceadores de carga de rede de passagem interna são reconciliados pelo controlador de serviço do GKE e implementados com o mesmo IP de front-end.
O exemplo seguinte demonstra como isto é feito para suportar várias portas TCP e UDP no mesmo IP do balanceador de carga interno.
Crie um IP estático na mesma região que o cluster do GKE. A sub-rede tem de ser a mesma que o equilibrador de carga usa, que, por predefinição, é a mesma que os IPs dos nós do cluster do GKE usam.
Se o cluster e a rede de VPC estiverem no mesmo projeto:
gcloud compute addresses create IP_ADDR_NAME \ --project=PROJECT_ID \ --subnet=SUBNET \ --addresses=IP_ADDRESS \ --region=COMPUTE_REGION \ --purpose=SHARED_LOADBALANCER_VIP
Se o cluster estiver num projeto de serviço de VPC partilhada, mas usar uma rede de VPC partilhada num projeto anfitrião:
gcloud compute addresses create IP_ADDR_NAME \ --project=SERVICE_PROJECT_ID \ --subnet=projects/HOST_PROJECT_ID/regions/COMPUTE_REGION/subnetworks/SUBNET \ --addresses=IP_ADDRESS \ --region=COMPUTE_REGION \ --purpose=SHARED_LOADBALANCER_VIP
Substitua o seguinte:
IP_ADDR_NAME
: um nome para o objeto de endereço IP.SERVICE_PROJECT_ID
: o ID do projeto de serviço.PROJECT_ID
: o ID do seu projeto (projeto único).HOST_PROJECT_ID
: o ID do projeto anfitrião da VPC partilhada.COMPUTE_REGION
: a região de computação que contém a sub-rede partilhada.IP_ADDRESS
: um endereço IP interno não usado do intervalo de endereços IP principal da sub-rede selecionada. Se omitir a especificação de um endereço IP,o sistema seleciona um endereço IP interno não utilizado do intervalo de endereços IP principal da sub-rede selecionada. Google Cloud Para determinar uma morada selecionada automaticamente, tem de executargcloud compute addresses describe
.SUBNET
: o nome da sub-rede partilhada.
Guarde a seguinte configuração do serviço TCP num ficheiro denominado
tcp-service.yaml
e, em seguida, implemente-o no cluster. SubstituaIP_ADDRESS
pelo endereço IP que escolheu no passo anterior.apiVersion: v1 kind: Service metadata: name: tcp-service namespace: default # Request an internal load balancer. annotations: networking.gke.io/load-balancer-type: "Internal" spec: type: LoadBalancer # Use an IP address that you create. loadBalancerIP: IP_ADDRESS selector: app: myapp ports: - name: 8001-to-8001 protocol: TCP port: 8001 targetPort: 8001 - name: 8002-to-8002 protocol: TCP port: 8002 targetPort: 8002 - name: 8003-to-8003 protocol: TCP port: 8003 targetPort: 8003 - name: 8004-to-8004 protocol: TCP port: 8004 targetPort: 8004 - name: 8005-to-8005 protocol: TCP port: 8005 targetPort: 8005
Aplique esta definição de serviço ao seu cluster:
kubectl apply -f tcp-service.yaml
Guarde a seguinte configuração do serviço UDP num ficheiro com o nome
udp-service.yaml
e, em seguida, implemente-o. Também usa oIP_ADDRESS
que especificou no passo anterior.apiVersion: v1 kind: Service metadata: name: udp-service namespace: default # Request an internal load balancer. annotations: networking.gke.io/load-balancer-type: "Internal" spec: type: LoadBalancer # Use the same IP address that you used for the TCP Service. loadBalancerIP: IP_ADDRESS selector: app: my-udp-app ports: - name: 9001-to-9001 protocol: UDP port: 9001 targetPort: 9001 - name: 9002-to-9002 protocol: UDP port: 9002 targetPort: 9002
Aplique este ficheiro ao seu cluster:
kubectl apply -f udp-service.yaml
Valide se o VIP é partilhado entre as regras de encaminhamento do balanceador de carga: liste-as e filtre-as pelo IP estático. Isto mostra que existe uma regra de encaminhamento UDP e TCP a ouvir em sete portas diferentes no
IP_ADDRESS
partilhado, que, neste exemplo, é10.128.2.98
.gcloud compute forwarding-rules list | grep 10.128.2.98 ab4d8205d655f4353a5cff5b224a0dde us-west1 10.128.2.98 UDP us-west1/backendServices/ab4d8205d655f4353a5cff5b224a0dde acd6eeaa00a35419c9530caeb6540435 us-west1 10.128.2.98 TCP us-west1/backendServices/acd6eeaa00a35419c9530caeb6540435
Problemas conhecidos
Limite de tempo da ligação a cada 10 minutos
Os serviços de LoadBalancer internos criados com a subdivisão podem observar interrupções de tráfego aproximadamente a cada 10 minutos. Este erro foi corrigido nas versões:
- 1.18.19-gke.1700 e posteriores
- 1.19.10-gke.1000 e posterior
- 1.20.6-gke.1000 e posterior
Erro ao criar o equilibrador de carga no nível Standard
Quando cria um Network Load Balancer de encaminhamento interno num projeto com o nível de rede predefinido do projeto definido como Standard, é apresentada a seguinte mensagem de erro:
Error syncing load balancer: failed to ensure load balancer: googleapi: Error 400: STANDARD network tier (the project's default network tier) is not supported: Network tier other than PREMIUM is not supported for loadBalancingScheme=INTERNAL., badRequest
Para resolver este problema em versões do GKE anteriores a 1.23.3-gke.900, configure o nível de rede predefinido do projeto como Premium.
Este problema é resolvido nas versões 1.23.3-gke.900 e posteriores do GKE quando a subdefinição do GKE está ativada.
O controlador do GKE cria equilibradores de carga de rede de passagem internos no nível de rede Premium, mesmo que o nível de rede predefinido do projeto esteja definido como Standard.
O que se segue?
- Leia a vista geral da rede do GKE.
- Saiba mais sobre os equilibradores de carga do Compute Engine.
- Saiba como criar um cluster nativo da VPC.
- Resolva problemas de balanceamento de carga no GKE.
- Saiba mais sobre o agente de mascaramento de IP.
- Saiba mais sobre a configuração de redes autorizadas.