Os balanceadores de carga externos (ELB, na sigla em inglês) expõem serviços para acesso de fora da organização usando endereços IP de um pool atribuído à organização do pool maior de IP externo da instância.
Os endereços IP virtuais (VIPs) do ELB não entram em conflito entre organizações e são exclusivos em todas elas. Por isso, use os serviços do ELB apenas para serviços que os clientes fora da organização precisam acessar.
As cargas de trabalho em execução dentro da organização podem acessar os serviços do ELB, desde que você permita que elas saiam da organização. Esse padrão de tráfego exige o tráfego de saída da organização antes de retornar ao serviço interno.
Antes de começar
Para configurar os serviços do ELB, você precisa do seguinte:
- Ser proprietário do projeto em que você está configurando o balanceador de carga. Para mais informações, consulte Criar um projeto.
- Uma política de entrada
ProjectNetworkPolicy
(PNP) personalizada para permitir o tráfego para esse serviço do ELB. Para mais informações, consulte Configurar o PNP para permitir o tráfego para o ELB. Os papéis necessários de identidade e acesso:
- Administrador da NetworkPolicy do projeto: tem acesso para gerenciar políticas de rede do projeto
no namespace do projeto. Peça ao administrador do IAM da organização para conceder a você o papel de
Administrador da NetworkPolicy do projeto (
project-networkpolicy-admin
). - Administrador do balanceador de carga: peça ao administrador do IAM da organização para conceder a você o papel de administrador do balanceador de carga (
load-balancer-admin
). - Administrador global do balanceador de carga: para ELBs globais, peça ao administrador do IAM da organização para conceder a você o papel de administrador global do balanceador de carga (
global-load-balancer-admin
). Para mais informações, consulte Descrições de papéis predefinidos.
- Administrador da NetworkPolicy do projeto: tem acesso para gerenciar políticas de rede do projeto
no namespace do projeto. Peça ao administrador do IAM da organização para conceder a você o papel de
Administrador da NetworkPolicy do projeto (
Configurar o PNP para permitir o tráfego para o ELB
Para que os serviços do ELB funcionem, configure e aplique sua própria política de entrada
ProjectNetworkPolicy
personalizada para permitir o tráfego para as cargas de trabalho desse serviço do ELB.
As políticas de rede controlam o acesso às cargas de trabalho, não ao balanceador de carga em si.
Os ELBs expõem cargas de trabalho à rede do cliente, exigindo políticas de rede explícitas para permitir o tráfego externo à porta da carga de trabalho, como 8080
.
Especifique o endereço CIDR externo para permitir o tráfego para as cargas de trabalho deste ELB:
kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f - <<EOF
apiVersion: networking.gdc.goog/v1
kind: ProjectNetworkPolicy
metadata:
namespace: PROJECT
name: allow-inbound-traffic-from-external
spec:
policyType: Ingress
subject:
subjectType: UserWorkload
ingress:
- from:
- ipBlock:
cidr: CIDR
ports:
- protocol: TCP
port: PORT
EOF
Substitua:
MANAGEMENT_API_SERVER
: o caminho kubeconfig do servidor da API Management. Se você ainda não gerou um arquivo kubeconfig para o servidor da API na zona de destino, consulte Fazer login para mais detalhes.PROJECT
: o nome do seu projeto do GDC.CIDR
: o CIDR externo de onde o ELB precisa ser acessado. Essa política é necessária porque o balanceador de carga externo usa o retorno direto do servidor (DSR, na sigla em inglês), que preserva o endereço IP externo de origem e ignora o balanceador de carga no caminho de retorno. Para mais informações, consulte Criar uma regra de firewall de entrada global para tráfego entre organizações.PORT
: a porta de back-end nos pods atrás do balanceador de carga. Esse valor é encontrado no campo.spec.ports[].targetPort
do manifesto para o recursoService
. Este campo é opcional.
Criar um balanceador de carga externo
É possível criar ELBs globais ou zonais. O escopo dos ELBs globais abrange um universo do GDC. O escopo dos ELBs zonais é limitado à zona especificada no momento da criação. Para mais informações, consulte Balanceadores de carga globais e zonais.
Crie ELBs usando três métodos diferentes no GDC:
- Use a CLI gdcloud para criar ELBs globais ou zonais.
- Use a API Networking Kubernetes Resource Model (KRM) para criar ELBs globais ou zonais.
- Use o serviço do Kubernetes diretamente no cluster do Kubernetes. Esse método está disponível apenas para ELBs zonais.
É possível segmentar cargas de trabalho de pods ou VMs usando a API KRM e a CLI gdcloud. Só é possível segmentar cargas de trabalho no cluster em que o objeto Service
é criado ao usar o serviço do Kubernetes diretamente no cluster do Kubernetes.
Criar um ELB zonal
Crie um ELB zonal usando a CLI gdcloud, a API KRM ou o serviço do Kubernetes no cluster do Kubernetes:
gdcloud
Crie um ELB que tenha como destino cargas de trabalho de pod ou VM usando a CLI gdcloud.
Esse ELB tem como destino todas as cargas de trabalho no projeto que correspondem ao
rótulo definido no objeto Backend
.
Para criar um ELB usando a CLI gdcloud, siga estas etapas:
Crie um recurso
Backend
para definir o endpoint do ELB:gdcloud compute backends create BACKEND_NAME \ --labels=LABELS \ --project=PROJECT_NAME \ --zone=ZONE \ --cluster=CLUSTER_NAME
Substitua:
BACKEND_NAME
: o nome escolhido para o recurso de back-end, comomy-backend
.LABELS
: um seletor que define quais endpoints entre pods e VMs usar para esse recurso de back-end. Por exemplo,app=web
.PROJECT_NAME
: o nome do projeto.ZONE
: a zona a ser usada para essa invocação. Para definir previamente a flag de zona para todos os comandos que a exigem, execute:gdcloud config set core/zone ZONE
. A flag de zona está disponível apenas em ambientes multizona. Este campo é opcional.CLUSTER_NAME
: o cluster a que o escopo dos seletores definidos é limitado. Se esse campo não for especificado, todos os endpoints com o rótulo indicado serão selecionados. Este campo é opcional.
Pule esta etapa se o ELB for para cargas de trabalho de pod. Se você estiver configurando um ELB para cargas de trabalho de VM, defina uma verificação de integridade para o ELB:
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:
HEALTH_CHECK_NAME
: o nome escolhido para o recurso de verificação de integridade, comomy-health-check
.CHECK_INTERVAL
: o tempo em segundos entre o início de uma sondagem e o início da próxima. O valor padrão é5
. Este campo é opcional.HEALTHY_THRESHOLD
: o tempo a ser aguardado antes de declarar falha. O valor padrão é5
. Este campo é opcional.TIMEOUT
: o tempo em segundos para aguardar antes de declarar falha. O valor padrão é5
. Este campo é opcional.UNHEALTHY_THRESHOLD
: o número de sondagens seguidas que precisam falhar para que o endpoint seja considerado não íntegro. O valor padrão é2
. Este campo é opcional.PORT
: a porta em que a verificação de integridade é realizada. O valor padrão é80
. Este campo é opcional.ZONE
: a zona em que você está criando o ELB.
Crie um recurso
BackendService
e adicione a ele 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:
BACKEND_SERVICE_NAME
: o nome escolhido para esse serviço de back-end.TARGET_PORT
: uma lista separada por vírgulas de portas de destino que esse 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. É possível especificar várias portas de destino. Esse campo precisa estar no formatoprotocol:port:targetport
, comoTCP:80:8080
. Este campo é opcional.HEALTH_CHECK_NAME
: o nome do recurso de verificação de integridade. Este campo é opcional. Inclua esse campo apenas se você estiver configurando um ELB para cargas de trabalho de VM.
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
Opcional: use afinidade da sessão para ELBs e garanta que as solicitações do mesmo cliente sejam sempre encaminhadas para o mesmo back-end. Para ativar afinidade da sessão para balanceadores de carga, crie uma política de serviço de back-end usando o comando
gdcloud compute load-balancer-policy create
:gdcloud compute load-balancer-policy create POLICY_NAME --session-affinity=MODE --selectors=RESOURCE_LABEL
Substitua:
POLICY_NAME
: o nome escolhido para a política de serviço de back-end.MODE
: o modo de afinidade da sessão. Há dois modos compatíveis:NONE
: a afinidade da sessão está desativada. As solicitações são encaminhadas para qualquer back-end disponível. Esse é o modo padrão.CLIENT_IP_DST_PORT_PROTO
: as solicitações da mesma tupla de quatro elementos (endereço IP de origem, endereço IP de destino, porta de destino e protocolo) são roteadas para o mesmo back-end.
RESOURCE_LABEL
: o seletor de rótulos que seleciona a qual serviço de back-end o recursoBackendServicePolicy
é aplicado no namespace do projeto. Se vários recursosBackendServicePolicy
corresponderem ao mesmo serviço de back-end e pelo menos uma dessas políticas tiver a afinidade da sessão ativada, a afinidade da sessão para esse recursoBackendService
será ativada.
Crie um recurso
ForwardingRule
externo que defina o VIP em que o serviço está disponível:gdcloud compute forwarding-rules create FORWARDING_RULE_EXTERNAL_NAME \ --backend-service=BACKEND_SERVICE_NAME \ --cidr=CIDR \ --ip-protocol-port=PROTOCOL_PORT \ --load-balancing-scheme=EXTERNAL \ --zone=ZONE \ --project=PROJECT_NAME
Substitua:
BACKEND_SERVICE_NAME
: o nome do seu serviço de back-end.FORWARDING_RULE_EXTERNAL_NAME
: o nome escolhido para a regra de encaminhamento.CIDR
: este campo é opcional. Se não for especificado, um CIDRIPv4/32
será reservado automaticamente do pool de IP zonal. Especifique o nome de um recursoSubnet
no mesmo namespace que esta regra de encaminhamento. Um recursoSubnet
representa as informações de solicitação e alocação de uma sub-rede zonal. Para mais informações sobre recursosSubnet
, consulte Exemplo de recursos personalizados.PROTOCOL_PORT
: o protocolo e a porta a serem expostos na regra de encaminhamento. Esse campo precisa estar no formatoip-protocol=TCP:80
. A porta exposta precisa ser a mesma que o aplicativo real está expondo dentro do contêiner.
Para verificar o ELB configurado, confirme a condição
Ready
em cada um dos objetos criados. Para receber o endereço IP atribuído do balanceador de carga, descreva a regra de encaminhamento:gdcloud compute forwarding-rules describe FORWARDING_RULE_EXTERNAL_NAME
Para validar o ELB configurado, confirme a condição
Ready
em cada um dos objetos criados. Verifique o tráfego com uma solicitaçãocurl
para o VIP:Para receber o VIP atribuído, descreva a regra de encaminhamento:
gdcloud compute forwarding-rules describe FORWARDING_RULE_EXTERNAL_NAME
Verifique o tráfego com uma solicitação
curl
para o VIP na porta especificada no campoPROTOCOL_PORT
da regra de encaminhamento:curl http://FORWARDING_RULE_VIP:PORT
Substitua:
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 ELB que tenha como destino cargas de trabalho de pod ou VM usando a API KRM.
Esse ELB tem como destino todas as cargas de trabalho no projeto que correspondem ao
rótulo definido no objeto Backend
.
Para criar um ELB zonal usando a API KRM, siga estas etapas:
Crie um recurso
Backend
para definir os endpoints do ELB. 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:
MANAGEMENT_API_SERVER
: o caminho kubeconfig do servidor da API Management zonal. Para mais informações, consulte Mudar para um contexto zonal.PROJECT_NAME
: o nome do projeto.BACKEND_NAME
: o nome do recurso ;Backend
CLUSTER_NAME
: este é um campo opcional. Esse campo especifica o cluster a que o escopo dos seletores definidos está limitado. Esse campo não se aplica a cargas de trabalho de VM. Se um recursoBackend
não tiver o campoclusterName
incluído, os rótulos especificados serão aplicados a todas as cargas de trabalho no projeto.
Pule esta etapa se o ELB for para cargas de trabalho de pod. Se você estiver configurando um ELB para cargas de trabalho de VM, defina uma verificação de integridade para o ELB:
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:
HEALTH_CHECK_NAME
: o nome escolhido para o recurso de verificação de integridade, comomy-health-check
.PORT
: a porta em que a verificação de integridade é realizada. O valor padrão é80
.TIMEOUT
: o tempo em segundos para aguardar antes de declarar falha. O valor padrão é5
.CHECK_INTERVAL
: o tempo em segundos entre o início de uma sondagem e o início da próxima. O valor padrão é5
.HEALTHY_THRESHOLD
: o número de sondagens sequenciais que precisam ser aprovadas para que o endpoint seja considerado íntegro. O valor padrão é2
.UNHEALTHY_THRESHOLD
: o número de sondagens seguidas que precisam falhar para que o endpoint seja considerado não íntegro. O valor padrão é2
.
Crie um objeto
BackendService
usando o recursoBackend
criado anteriormente. Se você estiver configurando um ELB para cargas de trabalho de VM, 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:
BACKEND_SERVICE_NAME
: o nome escolhido para o recursoBackendService
.HEALTH_CHECK_NAME
: o nome do recursoHealthCheck
criado anteriormente. Não inclua esse campo se estiver configurando um ELB para cargas de trabalho de pod.
Opcional: use afinidade da sessão para ELBs e garanta que as solicitações do mesmo cliente sejam sempre encaminhadas para o mesmo back-end. Para ativar afinidade da sessão para balanceadores de carga, crie um recurso
BackendServicePolicy
. Esse recurso define as configurações de afinidade da sessão e aplica o recursoBackendServicePolicy
ao recursoBackendService
. Crie e aplique o recursoBackendServicePolicy
:kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f - <<EOF apiVersion: networking.global.gdc.goog/v1 kind: BackendServicePolicy metadata: namespace: PROJECT_NAME name: POLICY_NAME spec: sessionAffinity: MODE selector: matchLabels: RESOURCE_LABEL
Substitua:
POLICY_NAME
: o nome escolhido para a política de serviço de back-end.MODE
: o modo de afinidade da sessão. Há dois modos compatíveis:NONE
: a afinidade da sessão está desativada. As solicitações são encaminhadas para qualquer back-end disponível. Esse é o modo padrão.CLIENT_IP_DST_PORT_PROTO
: as solicitações da mesma tupla de quatro elementos (endereço IP de origem, endereço IP de destino, porta de destino e protocolo) são roteadas para o mesmo back-end.
RESOURCE_LABEL
: o seletor de rótulos que seleciona a qual serviço de back-end o recursoBackendServicePolicy
é aplicado no namespace do projeto. Se vários recursosBackendServicePolicy
corresponderem ao mesmo serviço de back-end e pelo menos uma dessas políticas tiver a afinidade da sessão ativada, a afinidade da sessão para esse recursoBackendService
será ativada.
Crie um recurso
ForwardingRule
externo que defina o VIP em que o serviço está disponível.kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f - <<EOF apiVersion: networking.gdc.goog/v1 kind: ForwardingRuleExternal metadata: namespace: PROJECT_NAME Name: FORWARDING_RULE_EXTERNAL_NAME spec: cidrRef: CIDR ports: - port: PORT Protocol: PROTOCOL backendServiceRef: name: BACKEND_SERVICE_NAME EOF
Substitua:
BACKEND_SERVICE_NAME
: o nome do recursoBackendService
.FORWARDING_RULE_EXTERNAL_NAME
: o nome escolhido para o recursoForwardingRuleExternal
.CIDR
: este campo é opcional. Se não for especificado, um CIDRIPv4/32
será reservado automaticamente do pool de IP zonal. Especifique o nome de um recursoSubnet
no mesmo namespace que esta regra de encaminhamento. Um recursoSubnet
representa as informações de solicitação e alocação de uma sub-rede zonal. Para mais informações sobre recursosSubnet
, consulte Exemplos de recursos personalizados.PORT
: use o campoports
para especificar uma matriz de portas L4 para as quais os pacotes são encaminhados aos back-ends configurados com essa regra de encaminhamento. É necessário especificar pelo menos uma porta. Use o campoport
para especificar um número de porta. A porta exposta precisa ser a mesma que o aplicativo real está expondo dentro do contêiner.PROTOCOL
: o protocolo a ser usado para a regra de encaminhamento, comoTCP
. Uma entrada na matrizports
precisa ser assim:ports: - port: 80 protocol: TCP
Para validar o ELB configurado, confirme a condição
Ready
em cada um dos objetos criados. Verifique o tráfego com uma solicitaçãocurl
para o VIP:Para conseguir o VIP, use
kubectl get
:kubectl get forwardingruleexternal -n PROJECT_NAME
A saída será assim:
NAME BACKENDSERVICE CIDR READY elb-name BACKEND_SERVICE_NAME 10.200.32.59/32 True
Verifique o tráfego com uma solicitação
curl
para o VIP na porta especificada no campoPORT
da regra de encaminhamento:curl http://FORWARDING_RULE_VIP:PORT
Substitua
FORWARDING_RULE_VIP
pelo VIP da regra de encaminhamento.
Serviço do Kubernetes
Para criar ELBs no GDC, crie um
Service
do Kubernetes do tipo LoadBalancer
em um cluster do Kubernetes.
Para criar um serviço do ELB, faça o seguinte:
Crie um arquivo YAML para a definição
Service
do tipoLoadBalancer
.O objeto
Service
a seguir é um exemplo de serviço do ELB:apiVersion: v1 kind: Service metadata: name: ELB_SERVICE_NAME namespace: PROJECT_NAME spec: ports: - port: 1235 protocol: TCP targetPort: 1235 selector: k8s-app: my-app type: LoadBalancer
Substitua:
ELB_SERVICE_NAME
: o nome do serviço ELB.PROJECT_NAME
: o namespace do projeto que contém as cargas de trabalho de back-end.
O campo
port
configura a porta de front-end que você expõe no endereço VIP. O campotargetPort
configura a porta de back-end para onde você quer encaminhar o tráfego nas cargas de trabalho de back-end. O balanceador de carga é compatível com a conversão de endereços de rede (NAT, na sigla em inglês). 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 quais cargas de trabalho serão usadas como back-end para esse serviço, com base na correspondência entre os rótulos especificados e os rótulos das cargas de trabalho. O
Service
só pode selecionar cargas de trabalho de back-end no mesmo projeto e no mesmo cluster em que você define oService
.Para mais informações sobre a seleção de serviços, consulte https://kubernetes.io/docs/concepts/services-networking/service/.
Salve o arquivo de definição
Service
no mesmo projeto que as cargas de trabalho de back-end.Aplique o arquivo de definição
Service
ao cluster:kubectl apply -f ELB_FILE
Substitua
ELB_FILE
pelo nome do arquivo de definiçãoService
do serviço ELB.Quando você cria um ELB, o serviço recebe dois endereços IP. Um é um endereço IP interno acessível apenas no mesmo cluster. O outro é o endereço IP externo, acessível de dentro e de fora da organização. Para conseguir os endereços IP do serviço ELB, consulte o status dele:
kubectl -n PROJECT_NAME get svc ELB_SERVICE_NAME
Substitua:
PROJECT_NAME
: o namespace do projeto que contém as cargas de trabalho de back-end.ELB_SERVICE_NAME
: o nome do serviço ELB.
Você vai receber uma saída semelhante a este exemplo:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE elb-service LoadBalancer 10.0.0.1 20.12.1.11 1235:31931/TCP 22h
O
EXTERNAL-IP
é o endereço IP do serviço acessível de fora da organização.Se você não receber uma saída, verifique se criou o serviço ELB com sucesso.
Criar um ELB global
Crie um ELB global usando a CLI gdcloud ou a API KRM.
gdcloud
Crie um ELB que tenha como destino cargas de trabalho de pod ou VM usando a CLI gdcloud.
Esse ELB tem como destino todas as cargas de trabalho no projeto que correspondem ao
rótulo definido no objeto Backend
. O recurso personalizado Backend
precisa ter escopo em uma zona.
Para criar um ELB usando a CLI gdcloud, siga estas etapas:
Crie um recurso
Backend
para definir o endpoint do ELB:gdcloud compute backends create BACKEND_NAME \ --labels=LABELS \ --project=PROJECT_NAME \ --cluster=CLUSTER_NAME \ --zone=ZONE
Substitua:
BACKEND_NAME
: o nome escolhido para o recurso de back-end, comomy-backend
.LABELS
: um seletor que define quais endpoints entre pods e VMs usar para esse recurso de back-end. Por exemplo,app=web
.PROJECT_NAME
: o nome do projeto.CLUSTER_NAME
: o cluster a que o escopo dos seletores definidos é limitado. Se esse campo não for especificado, todos os endpoints com o rótulo indicado serão selecionados. Este campo é opcional.ZONE
: a zona a ser usada para essa invocação. Para definir a flag de zona para todos os comandos que a exigem, execute:gdcloud config set core/zone ZONE
. A flag de zona só está disponível em ambientes multizonais. Este campo é opcional.
Pule esta etapa se o ELB for para cargas de trabalho de pod. Se você estiver configurando um ELB para cargas de trabalho de VM, defina uma verificação de integridade para o ELB:
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:
HEALTH_CHECK_NAME
: o nome escolhido para o recurso de verificação de integridade, comomy-health-check
.CHECK_INTERVAL
: o tempo em segundos entre o início de uma sondagem e o início da próxima. O valor padrão é5
. Este campo é opcional.HEALTHY_THRESHOLD
: o tempo a ser aguardado antes de declarar falha. O valor padrão é5
. Este campo é opcional.TIMEOUT
: o tempo em segundos para aguardar antes de declarar falha. O valor padrão é5
. Este campo é opcional.UNHEALTHY_THRESHOLD
: o número de sondagens seguidas que precisam falhar para que o endpoint seja considerado não íntegro. O valor padrão é2
. Este campo é opcional.PORT
: a porta em que a verificação de integridade é realizada. O valor padrão é80
. Este campo é opcional.
Crie um recurso
BackendService
e adicione a ele 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:
BACKEND_SERVICE_NAME
: o nome escolhido para esse serviço de back-end.TARGET_PORTS
: uma lista separada por vírgulas de portas de destino que esse 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. É possível especificar várias portas de destino. Esse campo precisa estar no formatoprotocol:port:targetport
, comoTCP:80:8080
. Este campo é opcional.HEALTH_CHECK_NAME
: o nome do recurso de verificação de integridade. Este campo é opcional. Inclua esse campo apenas se você estiver configurando um ELB para cargas de trabalho de VM.
Adicione o recurso
BackendService
ao recursoBackend
criado anteriormente:gdcloud compute backend-services add-backend BACKEND_SERVICE_NAME \ --backend=BACKEND_NAME \ --backend-zone BACKEND_ZONE \ --project=PROJECT_NAME \ --global
Opcional: use afinidade da sessão para ELBs e garanta que as solicitações do mesmo cliente sejam sempre encaminhadas para o mesmo back-end. Para ativar afinidade da sessão para balanceadores de carga, crie uma política de serviço de back-end usando o comando
gdcloud compute load-balancer-policy create
:gdcloud compute load-balancer-policy create POLICY_NAME --session-affinity=MODE --selectors=RESOURCE_LABEL
Substitua:
POLICY_NAME
: o nome escolhido para a política de serviço de back-end.MODE
: o modo de afinidade da sessão. Há dois modos compatíveis:NONE
: a afinidade da sessão está desativada. As solicitações são encaminhadas para qualquer back-end disponível. Esse é o modo padrão.CLIENT_IP_DST_PORT_PROTO
: as solicitações da mesma tupla de quatro elementos (endereço IP de origem, endereço IP de destino, porta de destino e protocolo) são roteadas para o mesmo back-end.
RESOURCE_LABEL
: o seletor de rótulos que seleciona a qual serviço de back-end o recursoBackendServicePolicy
é aplicado no namespace do projeto. Se vários recursosBackendServicePolicy
corresponderem ao mesmo serviço de back-end e pelo menos uma dessas políticas tiver a afinidade da sessão ativada, a afinidade da sessão para esse recursoBackendService
será ativada.
Crie um recurso
ForwardingRule
externo que defina o VIP em que o serviço está disponível:gdcloud compute forwarding-rules create FORWARDING_RULE_EXTERNAL_NAME \ --backend-service=BACKEND_SERVICE_NAME \ --cidr=CIDR \ --ip-protocol-port=PROTOCOL_PORT \ --load-balancing-scheme=EXTERNAL \ --project=PROJECT_NAME \ --global
Substitua:
BACKEND_SERVICE_NAME
: o nome do seu serviço de back-end.FORWARDING_RULE_EXTERNAL_NAME
: o nome escolhido para a regra de encaminhamento.CIDR
: este campo é opcional. Se não for especificado, um CIDRIPv4/32
será reservado automaticamente do pool de IP global. Especifique o nome de um recursoSubnet
no mesmo namespace que esta regra de encaminhamento. Um recursoSubnet
representa as informações de solicitação e alocação de uma sub-rede global. Para mais informações sobre recursosSubnet
, consulte Exemplo de recursos personalizados.PROTOCOL_PORT
: o protocolo e a porta a serem expostos na regra de encaminhamento. Esse campo precisa estar no formatoip-protocol=TCP:80
. A porta exposta precisa ser a mesma que o aplicativo real está expondo dentro do contêiner.
Para verificar o ELB configurado, confirme a condição
Ready
em cada um dos objetos criados. Para receber o endereço IP atribuído do balanceador de carga, descreva a regra de encaminhamento:gdcloud compute forwarding-rules describe FORWARDING_RULE_EXTERNAL_NAME
Para validar o ELB configurado, confirme a condição
Ready
em cada um dos objetos criados. Verifique o tráfego com uma solicitaçãocurl
para o VIP:Para receber o VIP atribuído, descreva a regra de encaminhamento:
gdcloud compute forwarding-rules describe FORWARDING_RULE_EXTERNAL_NAME --global
Verifique o tráfego com uma solicitação
curl
para o VIP na porta especificada no campoPROTOCOL_PORT
da regra de encaminhamento:curl http://FORWARDING_RULE_VIP:PORT
Substitua:
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 ELB que tenha como destino cargas de trabalho de pod ou VM usando a API KRM. Esse ELB direciona todas as cargas de trabalho no projeto que correspondem ao rótulo definido no objeto de back-end. Para criar um ELB zonal usando a API KRM, siga estas etapas:
Crie um recurso
Backend
para definir os endpoints do ELB. 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:
MANAGEMENT_API_SERVER
: o caminho kubeconfig do servidor da API Management global. Para mais informações, consulte Mudar para o contexto global.PROJECT_NAME
: o nome do projeto.BACKEND_NAME
: o nome do recurso ;Backend
CLUSTER_NAME
: este é um campo opcional. Esse campo especifica o cluster a que o escopo dos seletores definidos está limitado. Esse campo não se aplica a cargas de trabalho de VM. Se um recursoBackend
não tiver o campoclusterName
incluído, os rótulos especificados serão aplicados a todas as cargas de trabalho no projeto.
Pule esta etapa se o ELB for para cargas de trabalho de pod. Se você estiver configurando um ELB para cargas de trabalho de VM, defina uma verificação de integridade para o ELB:
kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f - <<EOF 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 EOF
Substitua:
HEALTH_CHECK_NAME
: o nome escolhido para o recurso de verificação de integridade, comomy-health-check
.PORT
: a porta em que a verificação de integridade é realizada. O valor padrão é80
.TIMEOUT
: o tempo em segundos para aguardar antes de declarar falha. O valor padrão é5
.CHECK_INTERVAL
: o tempo em segundos entre o início de uma sondagem e o início da próxima. O valor padrão é5
.HEALTHY_THRESHOLD
: o número de sondagens sequenciais que precisam ser aprovadas para que o endpoint seja considerado íntegro. O valor padrão é2
.UNHEALTHY_THRESHOLD
: o número de sondagens seguidas que precisam falhar para que o endpoint seja considerado não íntegro. O valor padrão é2
.
Como este é um ELB global, crie a verificação de integridade na API global.
Crie um objeto
BackendService
usando o recursoBackend
criado anteriormente. Se você estiver configurando um ELB para cargas de trabalho de VM, 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:
BACKEND_SERVICE_NAME
: o nome escolhido para o recursoBackendService
.HEALTH_CHECK_NAME
: o nome do recursoHealthCheck
criado anteriormente. Não inclua esse campo se você estiver configurando um ELB para cargas de trabalho de pod.ZONE
: a zona em que o recursoBackend
é criado. É possível especificar vários back-ends no campobackendRefs
. Exemplo:- name: my-be zone: Zone-A - name: my-be zone: Zone-B
O campo
targetPorts
é opcional. Esse recurso lista as portas que o recursoBackendService
traduz. Se você estiver usando esse objeto, forneça valores para o seguinte:PORT
: a porta exposta pelo serviço.PROTOCOL
: o protocolo da camada 4 que o tráfego precisa corresponder. Somente TCP e UDP são aceitos.TARGET_PORT
: a porta para a qual o valor dePORT
é traduzido, como8080
. O valor deTARGET_PORT
não pode ser repetido em um determinado objeto. Um exemplo detargetPorts
pode ser assim:targetPorts: - port: 80 protocol: TCP targetPort: 8080
Opcional: use afinidade da sessão para ELBs e garanta que as solicitações do mesmo cliente sejam sempre encaminhadas para o mesmo back-end. Para ativar afinidade da sessão para balanceadores de carga, crie um recurso
BackendServicePolicy
. Esse recurso define as configurações de afinidade da sessão e aplica o recursoBackendServicePolicy
ao recursoBackendService
. Crie e aplique o recursoBackendServicePolicy
:kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f - <<EOF apiVersion: networking.global.gdc.goog/v1 kind: BackendServicePolicy metadata: namespace: PROJECT_NAME name: POLICY_NAME spec: sessionAffinity: MODE selector: matchLabels: RESOURCE_LABEL
Substitua:
POLICY_NAME
: o nome escolhido para a política de serviço de back-end.MODE
: o modo de afinidade da sessão. Há dois modos compatíveis:NONE
: a afinidade da sessão está desativada. As solicitações são encaminhadas para qualquer back-end disponível. Esse é o modo padrão.CLIENT_IP_DST_PORT_PROTO
: as solicitações da mesma tupla de quatro elementos (endereço IP de origem, endereço IP de destino, porta de destino e protocolo) são roteadas para o mesmo back-end.
RESOURCE_LABEL
: o seletor de rótulos que seleciona a qual serviço de back-end o recursoBackendServicePolicy
é aplicado no namespace do projeto. Se vários recursosBackendServicePolicy
corresponderem ao mesmo serviço de back-end e pelo menos uma dessas políticas tiver a afinidade da sessão ativada, a afinidade da sessão para esse recursoBackendService
será ativada.
Crie um recurso
ForwardingRule
externo que defina o VIP em que o serviço está disponível.kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f - <<EOF apiVersion: networking.global.gdc.goog/v1 kind: ForwardingRuleExternal metadata: namespace: PROJECT_NAME Name: FORWARDING_RULE_EXTERNAL_NAME spec: cidrRef: CIDR ports: - port: PORT Protocol: PROTOCOL backendServiceRef: name: BACKEND_SERVICE_NAME EOF
Substitua:
FORWARDING_RULE_EXTERNAL_NAME
: o nome escolhido para o recursoForwardingRuleExternal
.CIDR
: este campo é opcional. Se não for especificado, um CIDRIPv4/32
será reservado automaticamente do pool de IP global. Especifique o nome de um recursoSubnet
no mesmo namespace que esta regra de encaminhamento. Um recursoSubnet
representa as informações de solicitação e alocação de uma sub-rede global. Para mais informações sobre recursosSubnet
, consulte Exemplo de recursos personalizados.PORT
: use o campoports
para especificar uma matriz de portas L4 para as quais os pacotes são encaminhados aos back-ends configurados com essa regra de encaminhamento. É necessário especificar pelo menos uma porta. Use o campoport
para especificar um número de porta. A porta exposta precisa ser a mesma que o aplicativo real está expondo dentro do contêiner.PROTOCOL
: o protocolo a ser usado para a regra de encaminhamento, comoTCP
. Uma entrada na matrizports
precisa ser assim:ports: - port: 80 protocol: TCP
Para validar o ELB configurado, confirme a condição
Ready
em cada um dos objetos criados. Verifique o tráfego com uma solicitaçãocurl
para o VIP:Para conseguir o VIP, use
kubectl get
:kubectl get forwardingruleexternal -n PROJECT_NAME
A saída será assim:
NAME BACKENDSERVICE CIDR READY elb-name BACKEND_SERVICE_NAME 10.200.32.59/32 True
Verifique o tráfego com uma solicitação
curl
para o VIP na porta especificada no campoPORT
da regra de encaminhamento:curl http://FORWARDING_RULE_VIP:PORT
Substitua
FORWARDING_RULE_VIP
pelo VIP da regra de encaminhamento.