Os balanceadores de carga internos (ILB) expõem serviços na organização a partir de um conjunto de IPs internos atribuído à organização. Um serviço ILB nunca está acessível a partir de nenhum ponto final fora da organização.
Por predefinição, pode aceder aos serviços ILB no mesmo projeto a partir de qualquer cluster na organização. A política de rede do projeto predefinida não lhe permite aceder a recursos do projeto a partir do exterior do projeto, e esta restrição também se aplica aos serviços ILB. Se o administrador da plataforma (PA) configurar políticas de rede do projeto que permitam o acesso ao seu projeto a partir de outros projetos, o serviço ILB também fica acessível a partir desses outros projetos na mesma organização.
Antes de começar
Para configurar ILBs, tem de ter o seguinte:
- Ser proprietário do projeto para o qual está a configurar o equilibrador de carga. Para mais informações, consulte Crie um projeto.
As funções de identidade e acesso necessárias:
- Peça ao administrador de IAM da organização para lhe conceder a função de administrador do Load Balancer (
load-balancer-admin
). - Para ILBs globais, peça ao administrador de IAM da organização para lhe conceder a função de administrador do balanceador de carga global (
global-load-balancer-admin
). Para mais informações, consulte o artigo Descrições de funções predefinidas.
- Peça ao administrador de IAM da organização para lhe conceder a função de administrador do Load Balancer (
Crie um balanceador de carga interno
Pode criar ILBs globais ou zonais. O âmbito dos ILBs globais abrange um universo de GDCs. O âmbito dos blocos de anúncios indiretos zonais está limitado à zona especificada no momento da criação. Para mais informações, consulte o artigo Equilibradores de carga globais e zonais.
Crie ILBs com três métodos diferentes no GDC:
- Use a CLI gdcloud para criar ILBs globais ou zonais.
- Use a API Networking Kubernetes Resource Model (KRM) para criar ILBs globais ou zonais.
- Use o serviço Kubernetes diretamente no cluster Kubernetes. Este método só está disponível para ILBs zonais.
Pode segmentar cargas de trabalho de pods ou VMs através da API KRM e da CLI gdcloud. Só pode segmentar cargas de trabalho no cluster onde o objeto Service
é criado quando usa o serviço Kubernetes diretamente a partir do cluster Kubernetes.
Crie um ILB zonal
Crie um ILB zonal através da CLI gcloud, da API KRM ou do serviço Kubernetes no cluster Kubernetes:
gdcloud
Crie um ILB que segmenta cargas de trabalho de VMs ou pods através da CLI gdcloud.
Este ILB segmenta todas as cargas de trabalho no projeto que correspondem à etiqueta definida no objeto Backend
.
Para criar um ILB através da CLI gdcloud, siga estes passos:
Crie um recurso
Backend
para definir o ponto final do ILB:gdcloud compute backends create BACKEND_NAME \ --labels=LABELS \ --project=PROJECT_NAME \ --zone=ZONE \ --cluster=CLUSTER_NAME
Substitua o seguinte:
BACKEND_NAME
: o nome escolhido para o recurso de back-end, comomy-backend
.LABELS
: um seletor que define que pontos finais entre pods e VMs usar para este recurso de back-end. Por exemplo,app=web
.PROJECT_NAME
: o nome do seu projeto.ZONE
: a zona a usar para esta invocação. Para predefinir a flag de zona para todos os comandos que a requerem, execute:gdcloud config set core/zone ZONE
. O indicador de zona só está disponível em ambientes com várias zonas. Este campo é opcional.CLUSTER_NAME
: o cluster ao qual o âmbito dos seletores definidos está limitado. Se este campo não for especificado, todos os pontos finais com a etiqueta fornecida são selecionados. Este campo é opcional.
Ignore este passo se este ILB for para cargas de trabalho de pods. Se estiver a configurar um ILB para cargas de trabalho de VMs, defina uma verificação de funcionamento para o ILB:
gdcloud compute health-checks create tcp HEALTH_CHECK_NAME \ --check-interval=CHECK_INTERVAL \ --healthy-threshold=HEALTHY_THRESHOLD \ --timeout=TIMEOUT \ --unhealthy-threshold=UNHEALTHY_THRESHOLD \ --port=PORT \ --zone=ZONE
Substitua o seguinte:
HEALTH_CHECK_NAME
: o nome escolhido para o recurso de verificação do estado de funcionamento, comomy-health-check
.CHECK_INTERVAL
: o período em segundos desde o início de uma sondagem até ao início da seguinte. O valor predefinido é5
. Este campo é opcional.HEALTHY_THRESHOLD
: o tempo de espera antes de reclamar a falha. O valor predefinido é5
. Este campo é opcional.TIMEOUT
: o período de tempo em segundos a aguardar antes de declarar a falha. O valor predefinido é5
. Este campo é opcional.UNHEALTHY_THRESHOLD
: o número de sondagens sequenciais que têm de falhar para que o ponto final seja considerado não saudável. O valor predefinido é2
. Este campo é opcional.PORT
: a porta na qual a verificação de funcionamento é realizada. O valor predefinido é80
. Este campo é opcional.ZONE
: a zona na qual está a criar este ILB.
Crie um recurso
BackendService
e adicione-lhe o recursoBackend
criado anteriormente:gdcloud compute backend-services create BACKEND_SERVICE_NAME \ --project=PROJECT_NAME \ --target-ports=TARGET_PORTS \ --zone=ZONE \ --health-check=HEALTH_CHECK_NAME
Substitua o seguinte:
BACKEND_SERVICE_NAME
: o nome escolhido para este serviço de back-end.TARGET_PORTS
: uma lista de portas de destino separada por vírgulas que este serviço de back-end traduz, em que cada porta de destino especifica o protocolo, a porta na regra de encaminhamento e a porta na instância de back-end. Pode especificar várias portas de destino. Este campo tem de estar no formatoprotocol:port:targetport
, comoTCP:80:8080
. Este campo é opcional.HEALTH_CHECK_NAME
: o nome do recurso de verificação de estado. Este campo é opcional. Inclua este campo apenas se estiver a configurar um ILB para cargas de trabalho de VMs.
Adicione o recurso
BackendService
ao recursoBackend
criado anteriormente:gdcloud compute backend-services add-backend BACKEND_SERVICE_NAME \ --backend=BACKEND_NAME \ --project=PROJECT_NAME \ --zone=ZONE
Crie um recurso
ForwardingRule
interno que defina o VIP no qual o serviço está disponível:gdcloud compute forwarding-rules create FORWARDING_RULE_INTERNAL_NAME \ --backend-service=BACKEND_SERVICE_NAME \ --cidr=CIDR \ --ip-protocol-port=PROTOCOL_PORT \ --load-balancing-scheme=INTERNAL \ --zone=ZONE \ --project=PROJECT_NAME
Substitua o seguinte:
BACKEND_SERVICE_NAME
: o nome do seu serviço de back-end.FORWARDING_RULE_INTERNAL_NAME
com o nome escolhido para a regra de encaminhamento.CIDR
: este campo é opcional. Se não for especificado, é reservado automaticamente umIPv4/32
CIDR do conjunto de IPs zonais. Especifique o nome de um recursoSubnet
no mesmo espaço de nomes que esta regra de encaminhamento. Um recursoSubnet
representa as informações de pedido e atribuição de uma sub-rede zonal. Para mais informações sobre os recursosSubnet
, consulte o artigo Exemplos de recursos personalizados.PROTOCOL_PORT
: o protocolo e a porta a expor na regra de encaminhamento. Este campo tem de estar no formatoip-protocol=TCP:80
. A porta exposta tem de ser a mesma que a aplicação real está a expor no contentor.
Para validar o ILB configurado, confirme a condição
Ready
em cada um dos objetos criados. Valide o tráfego com umcurl
pedido ao VIP:Para obter o VIP atribuído, descreva a regra de encaminhamento:
gdcloud compute forwarding-rules describe FORWARDING_RULE_INTERNAL_NAME
Valide o tráfego com um pedido
curl
para o VIP na porta especificada no campoPROTOCOL_PORT
na regra de encaminhamento:curl http://FORWARDING_RULE_VIP:PORT
Substitua o seguinte:
FORWARDING_RULE_VIP
: o VIP da regra de encaminhamento.PORT
: o número da porta do campoPROTOCOL_PORT
na regra de encaminhamento.
API
Crie um ILB que segmenta cargas de trabalho de VMs ou pods através da API KRM.
Este ILB segmenta todas as cargas de trabalho no projeto que correspondem à etiqueta definida no objeto Backend
.
Para criar um ILB zonal através da API KRM, siga estes passos:
Crie um recurso
Backend
para definir os pontos finais do ILB. Crie recursosBackend
para cada zona em que as cargas de trabalho estão localizadas:kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f - <<EOF apiVersion: networking.gdc.goog/v1 kind: Backend metadata: namespace: PROJECT_NAME name: BACKEND_NAME spec: clusterName: CLUSTER_NAME endpointsLabels: matchLabels: app: server EOF
Substitua o seguinte:
MANAGEMENT_API_SERVER
: o caminho kubeconfig do caminho kubeconfig do servidor da API Management zonal. Para mais informações, consulte o artigo Mude para um contexto zonal.PROJECT_NAME
: o nome do seu projeto.BACKEND_NAME
: o nome do recursoBackend
.CLUSTER_NAME
: este é um campo opcional. Este campo especifica o cluster ao qual o âmbito dos seletores definidos está limitado. Este campo não se aplica a cargas de trabalho de VMs. Se um recursoBackend
não tiver o campoclusterName
incluído, as etiquetas especificadas aplicam-se a todas as cargas de trabalho no projeto.
Pode usar o mesmo recurso
Backend
para cada zona ou criar recursosBackend
com diferentes conjuntos de etiquetas para cada zona.Ignore este passo se este ILB for para cargas de trabalho de pods. Se estiver a configurar um ILB para cargas de trabalho de VMs, defina uma verificação de funcionamento para o ILB:
kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f - <<EOF apiVersion: networking.gdc.goog/v1 kind: HealthCheck metadata: namespace: PROJECT_NAME name: HEALTH_CHECK_NAME spec: tcpHealthCheck: port: PORT timeoutSec: TIMEOUT checkIntervalSec: CHECK_INTERVAL healthyThreshold: HEALTHY_THRESHOLD unhealthyThreshold: UNHEALTHY_THRESHOLD EOF
Substitua o seguinte:
HEALTH_CHECK_NAME
: o nome escolhido para o recurso de verificação do estado de funcionamento, comomy-health-check
.PORT
: a porta na qual a verificação de funcionamento é realizada. O valor predefinido é80
.TIMEOUT
: o período de tempo em segundos a aguardar antes de declarar a falha. O valor predefinido é5
.CHECK_INTERVAL
: o período em segundos desde o início de uma sondagem até ao início da seguinte. O valor predefinido é5
.HEALTHY_THRESHOLD
: o número de sondagens sequenciais que têm de ser aprovadas para que o ponto final seja considerado em bom estado. O valor predefinido é2
.UNHEALTHY_THRESHOLD
: o número de sondagens sequenciais que têm de falhar para que o ponto final seja considerado não saudável. O valor predefinido é2
.
Crie um objeto
BackendService
com o recursoBackend
criado anteriormente. Se estiver a configurar um ILB para cargas de trabalho de VMs, inclua o recursoHealthCheck
.kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f - <<EOF apiVersion: networking.gdc.goog/v1 kind: BackendService metadata: namespace: PROJECT_NAME name: BACKEND_SERVICE_NAME spec: backendRefs: - name: BACKEND_NAME healthCheckName: HEALTH_CHECK_NAME EOF
Substitua o seguinte:
BACKEND_SERVICE_NAME
: o nome escolhido para o seu recursoBackendService
.HEALTH_CHECK_NAME
: o nome do recursoHealthCheck
criado anteriormente. Não inclua este campo se estiver a configurar um ILB para cargas de trabalho de pods.
Crie um recurso
ForwardingRule
interno que defina o VIP no qual o serviço está disponível.kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f - <<EOF apiVersion: networking.gdc.goog/v1 kind: ForwardingRuleInternal metadata: namespace: PROJECT_NAME Name: FORWARDING_RULE_INTERNAL_NAME spec: cidrRef: CIDR ports: - port: PORT Protocol: PROTOCOL backendServiceRef: name: BACKEND_SERVICE_NAME EOF
Substitua o seguinte:
FORWARDING_RULE_INTERNAL_NAME
: o nome escolhido para o seu recursoForwardingRuleInternal
.CIDR
: este campo é opcional. Se não for especificado, é reservado automaticamente umIPv4/32
CIDR do conjunto de IPs zonais. Especifique o nome de um recursoSubnet
no mesmo espaço de nomes que esta regra de encaminhamento. Um recursoSubnet
representa as informações de pedido e atribuição de uma sub-rede zonal. Para mais informações sobre os recursosSubnet
, consulte o artigo Exemplos de recursos personalizados.PORT
: use o campoports
para especificar uma matriz de portas L4 para as quais os pacotes são encaminhados para os back-ends configurados com esta regra de encaminhamento. Tem de especificar, pelo menos, uma porta. Use o campoport
para especificar um número de porta. A porta exposta tem de ser a mesma que a aplicação real está a expor no contentor.PROTOCOL
: o protocolo a usar para a regra de encaminhamento, comoTCP
. Uma entrada na matrizports
tem de ter o seguinte aspeto:ports: - port: 80 protocol: TCP
Para validar o ILB configurado, confirme a condição
Ready
em cada um dos objetos criados. Valide o tráfego com umcurl
pedido ao VIP:Para receber o VIP, use a app
kubectl get
:kubectl get forwardingruleinternal -n PROJECT_NAME
O resultado tem o seguinte aspeto:
NAME BACKENDSERVICE CIDR READY ilb-name BACKEND_SERVICE_NAME 10.200.32.59/32 True
Valide o tráfego com um pedido
curl
para o VIP na porta especificada no campoPORT
na regra de encaminhamento:curl http://FORWARDING_RULE_VIP:PORT
Substitua
FORWARDING_RULE_VIP
pelo VIP da regra de encaminhamento.
Serviço do Kubernetes
Pode criar ILBs no GDC criando um objeto Service
do Kubernetes do tipo LoadBalancer
num cluster do Kubernetes. Este ILB segmenta apenas cargas de trabalho no cluster onde o objeto Service
é criado.
Para criar um ILB com o objeto Service
, siga estes passos:
Crie um ficheiro YAML para a definição
Service
do tipoLoadBalancer
. Tem de criar o serviço ILB como interno através da anotaçãonetworking.gke.io/load-balancer-type: internal
.O objeto
Service
seguinte é um exemplo de um serviço ILB:apiVersion: v1 kind: Service metadata: annotations: networking.gke.io/load-balancer-type: internal name: ILB_SERVICE_NAME namespace: PROJECT_NAME spec: ports: - port: 1234 protocol: TCP targetPort: 1234 selector: k8s-app: my-app type: LoadBalancer
Substitua o seguinte:
ILB_SERVICE_NAME
: o nome do serviço ILB.PROJECT_NAME
: o espaço de nomes do seu projeto que contém as cargas de trabalho de back-end.
O campo
port
configura a porta de front-end que expõe no endereço VIP. O campotargetPort
configura a porta de back-end para a qual quer encaminhar o tráfego nas cargas de trabalho de back-end. O balanceador de carga suporta a tradução de endereços de rede (NAT). As portas de front-end e back-end podem ser diferentes.No campo
selector
da definiçãoService
, especifique pods ou máquinas virtuais como as cargas de trabalho de back-end.O seletor define que cargas de trabalho devem ser consideradas cargas de trabalho de back-end para este serviço, com base na correspondência das etiquetas especificadas com as etiquetas nas cargas de trabalho. O
Service
só pode selecionar cargas de trabalho de back-end no mesmo projeto e no mesmo cluster onde define oService
.Para mais informações sobre a seleção de serviços, consulte https://kubernetes.io/docs/concepts/services-networking/service/.
Guarde o ficheiro de definição
Service
no mesmo projeto que as cargas de trabalho de back-end. O serviço ILB só pode selecionar cargas de trabalho que estejam no mesmo cluster que a definiçãoService
.Aplique o ficheiro de definição
Service
ao cluster:kubectl apply -f ILB_FILE
Substitua
ILB_FILE
pelo nome do ficheiro de definiçãoService
para o serviço ILB.Quando cria um serviço ILB, o serviço recebe um endereço IP. Pode obter o endereço IP do serviço ILB vendo o estado do serviço:
kubectl -n PROJECT_NAME get svc ILB_SERVICE_NAME
Substitua o seguinte:
PROJECT_NAME
: o espaço de nomes do seu projeto que contém as cargas de trabalho de back-end.ILB_SERVICE_NAME
: o nome do serviço ILB.
Tem de obter um resultado semelhante ao seguinte exemplo:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE ilb-service LoadBalancer 10.0.0.1 10.0.0.1 1234:31930/TCP 22h
Os campos
CLUSTER-IP
eEXTERNAL-IP
têm de apresentar o mesmo valor, que é o endereço IP do serviço ILB. Este endereço IP está agora acessível a partir de outros clusters na organização, de acordo com as políticas de rede do projeto que o projeto tem.Se não obtiver um resultado, certifique-se de que criou o serviço ILB com êxito.
O GDC suporta nomes do Sistema de Nomes de Domínio (DNS) para serviços. No entanto, esses nomes só funcionam no mesmo cluster para serviços ILB. A partir de outros clusters, tem de usar o endereço IP para aceder ao serviço ILB.
Crie um ILB global
Crie um ILB global através da CLI gdcloud ou da API KRM.
gdcloud
Crie um ILB que segmenta cargas de trabalho de VMs ou pods através da CLI gdcloud.
Este ILB segmenta todas as cargas de trabalho no projeto que correspondem à etiqueta definida no objeto Backend
. O recurso personalizado Backend
tem de ter o âmbito de uma zona.
Para criar um ILB através da CLI gdcloud, siga estes passos:
Crie um recurso
Backend
para definir o ponto final do ILB:gdcloud compute backends create BACKEND_NAME \ --labels=LABELS \ --project=PROJECT_NAME \ --cluster=CLUSTER_NAME \ --zone=ZONE
Substitua o seguinte:
BACKEND_NAME
: o nome escolhido para o recurso de back-end, comomy-backend
.LABELS
: um seletor que define que pontos finais entre pods e VMs usar para este recurso de back-end. Por exemplo,app=web
.PROJECT_NAME
: o nome do seu projeto.CLUSTER_NAME
: o cluster ao qual o âmbito dos seletores definidos está limitado. Se este campo não for especificado, todos os pontos finais com a etiqueta fornecida são selecionados. Este campo é opcional.ZONE
: a zona a usar para esta invocação. Para predefinir a flag de zona para todos os comandos que a requerem, execute:gdcloud config set core/zone ZONE
. O indicador de zona só está disponível em ambientes com várias zonas. Este campo é opcional.
Ignore este passo se este ILB for para cargas de trabalho de pods. Se estiver a configurar um ILB para cargas de trabalho de VMs, defina uma verificação de funcionamento para o ILB:
gdcloud compute health-checks create tcp HEALTH_CHECK_NAME \ --check-interval=CHECK_INTERVAL \ --healthy-threshold=HEALTHY_THRESHOLD \ --timeout=TIMEOUT \ --unhealthy-threshold=UNHEALTHY_THRESHOLD \ --port=PORT \ --global
Substitua o seguinte:
HEALTH_CHECK_NAME
: o nome escolhido para o recurso de verificação do estado de funcionamento, comomy-health-check
.CHECK_INTERVAL
: o período em segundos desde o início de uma sondagem até ao início da seguinte. O valor predefinido é5
. Este campo é opcional.HEALTHY_THRESHOLD
: o tempo de espera antes de reclamar a falha. O valor predefinido é5
. Este campo é opcional.TIMEOUT
: o período de tempo em segundos a aguardar antes de declarar a falha. O valor predefinido é5
. Este campo é opcional.UNHEALTHY_THRESHOLD
: o número de sondagens sequenciais que têm de falhar para que o ponto final seja considerado não saudável. O valor predefinido é2
. Este campo é opcional.PORT
: a porta na qual a verificação de funcionamento é realizada. O valor predefinido é80
. Este campo é opcional.
Crie um recurso
BackendService
e adicione-lhe o recursoBackend
criado anteriormente:gdcloud compute backend-services create BACKEND_SERVICE_NAME \ --project=PROJECT_NAME \ --target-ports=TARGET_PORTS \ --health-check=HEALTH_CHECK_NAME \ --global
Substitua o seguinte:
BACKEND_SERVICE_NAME
: o nome escolhido para este serviço de back-end.TARGET_PORTS
: uma lista de portas de destino separada por vírgulas que este serviço de back-end traduz, em que cada porta de destino especifica o protocolo, a porta na regra de encaminhamento e a porta na instância de back-end. Pode especificar várias portas de destino. Este campo tem de estar no formatoprotocol:port:targetport
, comoTCP:80:8080
. Este campo é opcional.HEALTH_CHECK_NAME
: o nome do recurso de verificação de estado. Este campo é opcional. Inclua este campo apenas se estiver a configurar um ILB para cargas de trabalho de VMs.
Adicione o recurso
BackendService
ao recursoBackend
criado anteriormente:gdcloud compute backend-services add-backend BACKEND_SERVICE_NAME \ --backend-zone BACKEND_ZONE \ --backend=BACKEND_NAME \ --project=PROJECT_NAME \ --global
Crie um recurso
ForwardingRule
interno que defina o VIP no qual o serviço está disponível:gdcloud compute forwarding-rules create FORWARDING_RULE_INTERNAL_NAME \ --backend-service=BACKEND_SERVICE_NAME \ --cidr=CIDR \ --ip-protocol-port=PROTOCOL_PORT \ --load-balancing-scheme=INTERNAL \ --project=PROJECT_NAME \ --global
Substitua o seguinte:
FORWARDING_RULE_INTERNAL_NAME
: o nome escolhido para a regra de encaminhamento.CIDR
: o nome de um recursoSubnet
no mesmo espaço de nomes que esta regra de encaminhamento. Um recursoSubnet
representa as informações de pedido e atribuição de uma sub-rede global. Para mais informações sobre os recursosSubnet
, consulte o artigo Exemplos de recursos personalizados. Se não for especificado, é reservado automaticamente umIPv4/32
CIDR do conjunto de IPs global. Este campo é opcional.PROTOCOL_PORT
: o protocolo e a porta a expor na regra de encaminhamento. Este campo tem de estar no formatoip-protocol=TCP:80
. A porta exposta tem de ser a mesma que a aplicação real está a expor no contentor.
Para validar o ILB configurado, confirme a condição
Ready
em cada um dos objetos criados. Valide o tráfego com umcurl
pedido ao VIP:Para obter o VIP atribuído, descreva a regra de encaminhamento:
gdcloud compute forwarding-rules describe FORWARDING_RULE_INTERNAL_NAME --global
Valide o tráfego com um pedido
curl
para o VIP na porta especificada no campoPROTOCOL_PORT
na regra de encaminhamento:curl http://FORWARDING_RULE_VIP:PORT
Substitua o seguinte:
FORWARDING_RULE_VIP
: o VIP da regra de encaminhamento.PORT
: o número da porta do campoPROTOCOL_PORT
na regra de encaminhamento.
API
Crie um ILB que segmenta cargas de trabalho de VMs ou pods através da API KRM. Este ILB destina-se a todas as cargas de trabalho no projeto que correspondem à etiqueta definida no objeto Backend. Para criar um ILB zonal através da API KRM, siga estes passos:
Crie um recurso
Backend
para definir os pontos finais do ILB. Crie recursosBackend
para cada zona em que as cargas de trabalho estão localizadas:kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f - <<EOF apiVersion: networking.gdc.goog/v1 kind: Backend metadata: namespace: PROJECT_NAME name: BACKEND_NAME spec: clusterName: CLUSTER_NAME endpointsLabels: matchLabels: app: server EOF
Substitua o seguinte:
MANAGEMENT_API_SERVER
: o caminho kubeconfig do caminho kubeconfig do servidor da API de gestão global. Para mais informações, consulte o artigo Mude para o contexto global.PROJECT_NAME
: o nome do seu projeto.BACKEND_NAME
: o nome do recursoBackend
.CLUSTER_NAME
: este é um campo opcional. Este campo especifica o cluster ao qual o âmbito dos seletores definidos está limitado. Este campo não se aplica a cargas de trabalho de VMs. Se um recursoBackend
não tiver o campoclusterName
incluído, as etiquetas especificadas aplicam-se a todas as cargas de trabalho no projeto.
Pode usar o mesmo recurso
Backend
para cada zona ou criar recursosBackend
com diferentes conjuntos de etiquetas para cada zona.Ignore este passo se este ILB for para cargas de trabalho de pods. Se estiver a configurar um ILB para cargas de trabalho de VMs, defina uma verificação de funcionamento para o ILB:
apiVersion: networking.global.gdc.goog/v1 kind: HealthCheck metadata: namespace: PROJECT_NAME name: HEALTH_CHECK_NAME spec: tcpHealthCheck: port: PORT timeoutSec: TIMEOUT checkIntervalSec: CHECK_INTERVAL healthyThreshold: HEALTHY_THRESHOLD unhealthyThreshold: UNHEALTHY_THRESHOLD
Substitua o seguinte:
HEALTH_CHECK_NAME
: o nome escolhido para o recurso de verificação do estado de funcionamento, comomy-health-check
.PORT
: a porta na qual a verificação de funcionamento é realizada. O valor predefinido é80
.TIMEOUT
: o período de tempo em segundos a aguardar antes de declarar a falha. O valor predefinido é5
.CHECK_INTERVAL
: o período em segundos desde o início de uma sondagem até ao início da seguinte. O valor predefinido é5
.HEALTHY_THRESHOLD
: o número de sondagens sequenciais que têm de ser aprovadas para que o ponto final seja considerado em bom estado. O valor predefinido é2
.UNHEALTHY_THRESHOLD
: o número de sondagens sequenciais que têm de falhar para que o ponto final seja considerado não saudável. O valor predefinido é2
.
Uma vez que se trata de um ILB global, crie a verificação de funcionamento na API global.
Crie um objeto
BackendService
com o recursoBackend
criado anteriormente. Se estiver a configurar um ILB para cargas de trabalho de VMs, inclua o recursoHealthCheck
.kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f - <<EOF apiVersion: networking.global.gdc.goog/v1 kind: BackendService metadata: namespace: PROJECT_NAME name: BACKEND_SERVICE_NAME spec: backendRefs: - name: BACKEND_NAME zone: ZONE healthCheckName: HEALTH_CHECK_NAME targetPorts: - port: PORT protocol: PROTOCOL targetPort: TARGET_PORT EOF
Substitua o seguinte:
BACKEND_SERVICE_NAME
: o nome escolhido para o seu recursoBackendService
.HEALTH_CHECK_NAME
: o nome do recursoHealthCheck
criado anteriormente. Não inclua este campo se estiver a configurar um ILB para cargas de trabalho de pods.ZONE
: a zona na qual o recursoBackend
é criado. Pode especificar vários backends no campobackendRefs
. Por exemplo:- name: my-be zone: Zone-A - name: my-be zone: Zone-B
O campo
targetPorts
é opcional. Este recurso apresenta as portas que este recursoBackendService
traduz. Se estiver a usar este objeto, forneça valores para o seguinte:PORT
: a porta exposta pelo serviço.PROTOCOL
: o protocolo de camada 4 com o qual o tráfego tem de corresponder. Apenas são suportados os protocolos TCP e UDP.TARGET_PORT
: a porta para a qual o valorPORT
é traduzido, como8080
. Não pode repetir o valor deTARGET_PORT
num determinado objeto. Um exemplo paratargetPorts
pode ter o seguinte aspeto:targetPorts: - port: 80 protocol: TCP targetPort: 8080
Crie um recurso
ForwardingRule
interno que defina o VIP no qual o serviço está disponível.kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f - <<EOF apiVersion: networking.global.gdc.goog/v1 kind: ForwardingRuleInternal metadata: namespace: PROJECT_NAME Name: FORWARDING_RULE_INTERNAL_NAME spec: cidrRef: CIDR ports: - port: PORT Protocol: PROTOCOL backendServiceRef: name: BACKEND_SERVICE_NAME EOF
Substitua o seguinte:
FORWARDING_RULE_INTERNAL_NAME
: o nome escolhido para o seu recursoForwardingRuleInternal
.CIDR
: o nome de um recursoSubnet
no mesmo espaço de nomes que esta regra de encaminhamento. Um recursoSubnet
representa as informações de pedido e atribuição de uma sub-rede global. Para mais informações sobre os recursosSubnet
, consulte o artigo Exemplos de recursos personalizados. Se não for especificado, é reservado automaticamente umIPv4/32
CIDR do conjunto de IPs global. Este campo é opcional.PORT
: use o campoports
para especificar uma matriz de portas L4 para as quais os pacotes são encaminhados para os back-ends configurados com esta regra de encaminhamento. Tem de especificar, pelo menos, uma porta. Use o campoport
para especificar um número de porta. A porta exposta tem de ser a mesma que a aplicação real está a expor no contentor.PROTOCOL
: o protocolo a usar para a regra de encaminhamento, comoTCP
. Uma entrada na matrizports
tem de ter o seguinte aspeto:ports: - port: 80 protocol: TCP
Para validar o ILB configurado, confirme a condição
Ready
em cada um dos objetos criados. Valide o tráfego com umcurl
pedido ao VIP:Para receber o VIP, use a app
kubectl get
:kubectl get forwardingruleinternal -n PROJECT_NAME
O resultado tem o seguinte aspeto:
NAME BACKENDSERVICE CIDR READY ilb-name BACKEND_SERVICE_NAME 10.200.32.59/32 True
Teste o tráfego com um pedido
curl
para o VIP na porta especificada no campoPORT
na regra de encaminhamento:curl http://FORWARDING_RULE_VIP:PORT
Substitua
FORWARDING_RULE_VIP
pelo VIP da regra de encaminhamento.