Configurando Balanceadores de Carga e Balanceadores de Carga da Rede

Descubra como definir os balanceadores de carga e os balanceadores de carga de rede do Oracle Cloud Infrastructure provisionados pelo OKE (Kubernetes Engine) para um serviço Kubernetes do tipo LoadBalancer.

Criando Balanceadores de Carga Internos

É possível criar balanceadores de carga e de carga de rede do Oracle Cloud Infrastructure para controlar o acesso a serviços em execução em um cluster:

  • Ao criar um cluster no workflow 'Criação Personalizada', você seleciona uma VCN existente contendo os recursos de rede a serem usados pelo novo cluster. Se você quiser usar um balanceador de carga ou um balanceador de carga de rede para controlar o tráfego na VCN, selecione uma sub-rede pública ou privada existente nessa VCN para hospedá-la.
  • Quando você cria um cluster no workflow 'Criação Rápida', a VCN que é criada automaticamente contém uma sub-rede regional pública para hospedar um balanceador de carga ou um balanceador de carga de rede. Se quiser hospedar um balanceador de carga ou um balanceador de carga de rede em uma sub-rede privada, você poderá adicionar uma sub-rede privada à VCN posteriormente.

Como alternativa, você pode definir um serviço interno do Kubernetes do tipo LoadBalancer (geralmente referido simplesmente como 'balanceador de carga interno') em um cluster para permitir que outros programas em execução na mesma VCN que o cluster acessem serviços no cluster. Um balanceador de carga interno pode ser provisionado:

  • como um balanceador de carga ou como um balanceador de carga da rede
  • com um endereço IP público ou com um endereço IP privado (designado pelo serviço do Balanceador de Carga ou pelo serviço do Balanceador de Carga de Rede)
  • em uma sub-rede pública ou em uma sub-rede privada

Um balanceador de carga ou um balanceador de carga de rede com um endereço IP público é chamado de público. Um balanceador de carga público ou um balanceador de carga de rede pode ser hospedado em uma sub-rede pública ou em uma sub-rede privada.

Um balanceador de carga ou um balanceador de carga de rede com um endereço IP privado é chamado de privado. Um balanceador de carga privado ou um balanceador de carga de rede pode ser hospedado em uma sub-rede pública ou em uma sub-rede privada.

Por padrão, os balanceadores de carga internos são provisionados com endereços IP públicos e hospedados em sub-redes públicas.

Para obter mais informações:

Criar um balanceador de carga interno como um balanceador de carga do OCI

Para criar um balanceador de carga interno como um balanceador de carga do OCI com um endereço IP privado, hospedado na sub-rede especificada para balanceadores de carga quando o cluster foi criado, adicione a seguinte anotação na seção de metadados do arquivo de manifesto:

service.beta.kubernetes.io/oci-load-balancer-internal: "true"

Para criar um balanceador de carga interno como um balanceador de carga do OCI com um endereço IP privado hospedado, hospedado em uma sub-rede alternativa à especificada para balanceadores de carga quando o cluster foi criado, adicione as duas anotações a seguir na seção de metadados do arquivo de manifesto:

service.beta.kubernetes.io/oci-load-balancer-internal: "true"
service.beta.kubernetes.io/oci-load-balancer-subnet1: "ocid1.subnet.oc1..aaaaaa....vdfw"

em que ocid1.subnet.oc1..aaaaaa....vdfw corresponde ao OCID da sub-rede alternativa. A sub-rede alternativa pode ser privada ou pública.

Por exemplo:


apiVersion: v1
kind: Service
metadata:
  name: my-nginx-svc
  labels:
    app: nginx
  annotations:
    oci.oraclecloud.com/load-balancer-type: "lb"
    service.beta.kubernetes.io/oci-load-balancer-internal: "true"
    service.beta.kubernetes.io/oci-load-balancer-subnet1: "ocid1.subnet.oc1..aaaaaa....vdfw"
spec:
  type: LoadBalancer
  ports:
  - port: 8100
  selector:
    app: nginx
Criar um balanceador de carga de rede interno como um balanceador de carga de rede do OCI

Para criar um balanceador de carga de rede interno como um balanceador de carga de rede do OCI com um endereço IP privado, hospedado na sub-rede especificada para balanceadores de carga quando o cluster foi criado, adicione a seguinte anotação na seção de metadados do arquivo de manifesto:

oci-network-load-balancer.oraclecloud.com/internal: "true"

Para criar um balanceador de carga de rede interno como um balanceador de carga de rede do OCI com um endereço IP privado, hospedado em uma sub-rede alternativa à especificada para balanceadores de carga quando o cluster foi criado, adicione ambas as anotações a seguir na seção de metadados do arquivo de manifesto:

oci-network-load-balancer.oraclecloud.com/internal: "true"
oci-network-load-balancer.oraclecloud.com/subnet: "ocid1.subnet.oc1..aaaaaa....vdfw"

em que ocid1.subnet.oc1..aaaaaa....vdfw corresponde ao OCID da sub-rede privada. A sub-rede alternativa pode ser privada ou pública.

Por exemplo:


apiVersion: v1
kind: Service
metadata:
  name: my-nginx-svc
  labels:
    app: nginx
  annotations:
    oci.oraclecloud.com/load-balancer-type: "nlb"
    oci-network-load-balancer.oraclecloud.com/internal: "true"
    oci-network-load-balancer.oraclecloud.com/subnet: "ocid1.subnet.oc1..aaaaaa....vdfw"
spec:
  type: LoadBalancer
  ports:
  - port: 80
  selector:
    app: nginx

Especificando Endereços IP Públicos Reservados

Quando um serviço Kubernetes do tipo LoadBalancer é implantado em um cluster, o Kubernetes Engine cria um balanceador de carga público ou balanceador de carga de rede do Oracle Cloud Infrastructure para aceitar o tráfego no cluster. Por padrão, o balanceador de carga público do Oracle Cloud Infrastructure ou o balanceador de carga de rede recebe um endereço IP público efêmero. No entanto, um endereço IP público efêmero é temporário e dura apenas durante a vida útil do balanceador de carga público ou do balanceador de carga de rede.

Se quiser que o balanceador de carga público do Oracle Cloud Infrastructure ou o balanceador de carga de rede criado pelo Kubernetes Engine tenha a mesma implantação de endereço IP público após a implantação, você poderá designar a ele um endereço IP público reservado do pool de endereços IP públicos reservados. Para obter mais informações sobre como criar e exibir endereços IP públicos reservados, consulte Endereços IP Públicos.

Para designar um endereço IP público reservado ao balanceador de carga público do Oracle Cloud Infrastructure ou ao balanceador de carga de rede criado pelo Kubernetes Engine, adicione a propriedade LoadBalancerIP na seção de especificação do arquivo de manifesto que define o serviço do tipo LoadBalancer e especifique o endereço IP público reservado.

Designar um endereço IP público reservado a um balanceador de carga público

Por exemplo:

apiVersion: v1
kind: Service
metadata:
  name: my-nginx-svc
  labels:
    app: nginx
  annotations:
    oci.oraclecloud.com/load-balancer-type: "lb"
spec:
  loadBalancerIP: 144.25.97.173
  type: LoadBalancer
  ports:
  - port: 80
  selector:
    app: nginx
Designar um endereço IP público reservado a um balanceador de carga de rede pública

Por exemplo:

apiVersion: v1
kind: Service
metadata:
  name: my-nginx-svc
  labels:
    app: nginx
  annotations:
    oci.oraclecloud.com/load-balancer-type: "nlb"
spec:
  loadBalancerIP: 144.25.97.173
  type: LoadBalancer
  ports:
  - port: 80
  selector:
    app: nginx

Observe o seguinte:

  • Se você definir a propriedade loadBalancerIP do serviço LoadBalancer, não poderá mais tarde alterar diretamente o endereço IP do balanceador de carga público ou do balanceador de carga de rede do Oracle Cloud Infrastructure criado pelo Kubernetes Engine. Se você quiser alterar o endereço IP, exclua o serviço LoadBalancer, especifique outro endereço IP público reservado no arquivo de manifesto e implante o serviço LoadBalancer novamente.
  • Se você não definir a propriedade loadBalancerIP do serviço LoadBalancer, não poderá alternar posteriormente diretamente o endereço IP do balanceador de carga público do Oracle Cloud Infrastructure ou do balanceador de carga de rede que o Kubernetes Engine cria de um endereço IP efêmero para um endereço IP público reservado. Se você quiser alternar o endereço IP efêmero para um endereço IP público reservado, exclua o serviço do tipo LoadBalancer, defina a propriedade loadBalancerIP para um endereço IP público reservado no arquivo de manifesto e implante o serviço do tipo LoadBalancer novamente.
  • Você pode excluir o serviço do tipo LoadBalancer e liberar o endereço IP público reservado para outros usos (por exemplo, para designá-lo a outro serviço do tipo LoadBalancer).
  • Você não poderá especificar um endereço IP público reservado para um serviço do tipo LoadBalancer se o mesmo endereço IP já estiver designado a outro recurso (como uma instância de computação ou outro serviço do tipo LoadBalancer).
  • Você não pode adicionar a propriedade loadBalancerIP ao arquivo de manifesto para um serviço do balanceador de carga interno (ou seja, um arquivo de manifesto que inclua a anotação service.beta.kubernetes.io/oci-load-balancer-internal: "true" ou oci-network-load-balancer.oraclecloud.com/internal: "true").
  • Por padrão, o endereço IP público reservado que você especifica como a propriedade loadBalancerIP de um serviço do tipo LoadBalancer no arquivo de manifesto deve ser um recurso no mesmo compartimento do cluster. Se você quiser especificar um endereço IP público reservado em outro compartimento:

    • para balanceadores de carga públicos, adicione a seguinte política à tenancy:
      ALLOW any-user to read public-ips in tenancy where request.principal.type = 'cluster'
      ALLOW any-user to manage floating-ips in tenancy where request.principal.type = 'cluster'
    • para balanceadores de carga de rede, adicione a seguinte política à tenancy:
      ALLOW any-user to use private-ips in TENANCY where ALL {request.principal.type = 'cluster', request.principal.compartment.id = 'target.compartment.id'}
      ALLOW any-user to manage public-ips in TENANCY where ALL {request.principal.type = 'cluster', request.principal.compartment.id = 'target.compartment.id'}

Especificando Grupos de Segurança de Rede (recomendado)

Os grupos de segurança de rede (NSGs) do Oracle Cloud Infrastructure permitem controlar o tráfego dentro e fora de recursos e entre recursos. As regras de segurança definidas para um NSG garantem que todos os recursos desse NSG tenham a mesma postura de segurança. Para obter mais informações, consulte Grupos de Segurança de Rede.

Você pode usar NSGs para controlar o acesso ao balanceador de carga ou balanceador de carga de rede do Oracle Cloud Infrastructure provisionado pelo Kubernetes Engine para um serviço Kubernetes do tipo LoadBalancer.

Ao usar NSGs para controlar o acesso, devem existir regras de segurança apropriadas para permitir tráfego de entrada e saída de/para a sub-rede do balanceador de carga ou do balanceador de carga de rede. Consulte Regras de Segurança para Balanceadores de Carga e Balanceadores de Carga de Rede.

Se você decidir usar NSGs para controlar o acesso a balanceadores de carga ou balanceadores de carga de rede:

Para controlar o acesso usando um NSG que você gerencia, inclua anotações no arquivo de manifesto para especificar o NSG ao qual deseja adicionar o balanceador de carga ou o balanceador de carga de rede.

Adicionar um balanceador de carga a um NSG existente

Para adicionar o balanceador de carga do Oracle Cloud Infrastructure criado pelo Kubernetes Engine a um NSG que você gerencia, adicione a seguinte anotação na seção de metadados do arquivo de manifesto:

oci.oraclecloud.com/oci-network-security-groups: "<nsg-ocid>"

em que <nsg-ocid> corresponde ao OCID de um NSG existente.

Por exemplo:


apiVersion: v1
kind: Service
metadata:
  name: my-nginx-svc
  labels:
    app: nginx
  annotations:
    oci.oraclecloud.com/load-balancer-type: "lb"
    oci.oraclecloud.com/oci-network-security-groups: "ocid1.networksecuritygroup.oc1.phx.aaaaaa....vdfw"
spec:
  type: LoadBalancer
  ports:
  - port: 80
  selector:
    app: nginx
Adicionar um balanceador de carga de rede a um NSG existente

Para adicionar o balanceador de carga de rede do Oracle Cloud Infrastructure criado pelo Kubernetes Engine a um NSG que você gerencia, adicione a seguinte anotação na seção de metadados do arquivo de manifesto:

oci-network-load-balancer.oraclecloud.com/oci-network-security-groups: "<nsg-ocid>"

em que <nsg-ocid> corresponde ao OCID de um NSG existente.

Por exemplo:


apiVersion: v1
kind: Service
metadata:
  name: my-nginx-svc
  labels:
    app: nginx
  annotations:
    oci.oraclecloud.com/load-balancer-type: "nlb"
    oci-network-load-balancer.oraclecloud.com/oci-network-security-groups: "ocid1.networksecuritygroup.oc1.phx.aaaaaa....vdfw"
spec:
  type: LoadBalancer
  ports:
  - port: 80
  selector:
    app: nginx

Observe o seguinte:

  • O NSG especificado deve estar na mesma VCN que o balanceador de carga ou o balanceador de carga de rede do Oracle Cloud Infrastructure.
  • Se o NSG especificado pertencer a outro compartimento do cluster, inclua uma instrução de política semelhante à seguinte em uma política do serviço IAM:
    ALLOW any-user to use network-security-groups in TENANCY where ALL { request.principal.type = 'cluster' }

    Se você considerar essa instrução de política muito permissiva, poderá restringir a permissão para especificar explicitamente o compartimento ao qual o NSG pertence e/ou especificar explicitamente o cluster. Por exemplo:

    Allow any-user to use network-security-groups in compartment <compartment-ocid> where all { request.principal.id = '<cluster-ocid>' }
  • Você pode especificar até cinco NSGs, em uma lista separada por vírgulas, no formato:
    oci.oraclecloud.com/oci-network-security-groups: "<nsg1-ocid>,<nsg2-ocid>,<nsg3-ocid>,<nsg4-ocid>,<nsg5-ocid>"
  • Para remover um balanceador de carga ou um balanceador de carga de rede de um NSG ou alterar o NSG em que o balanceador de carga ou o balanceador de carga de rede está, atualize a anotação e aplique novamente o manifesto.
  • Se você decidir controlar o acesso a um balanceador de carga ou balanceador de carga de rede do Oracle Cloud Infrastructure usando um NSG que você gerencia, a Oracle recomenda que você desative o gerenciamento da lista de segurança do Kubernetes adicionando uma das seguintes anotações na seção de metadados do arquivo de manifesto para o balanceador de carga ou o balanceador de carga de rede, respectivamente:

    service.beta.kubernetes.io/oci-load-balancer-security-list-management-mode: "None"
    oci-network-load-balancer.oraclecloud.com/security-list-management-mode:  "None"

    Como alternativa, você pode adicionar a seguinte anotação equivalente:

    oci.oraclecloud.com/security-rule-management-mode: "None" 

    Se você seguir a recomendação e adicionar a anotação, o gerenciamento da lista de segurança do Kubernetes não será ativado. Você precisa configurar NSGs com regras de segurança de entrada e saída para pools de nós e para o ponto final da API do Kubernetes (para obter mais informações, consulte Configuração de Regra de Segurança em Grupos de Segurança de Rede e/ou Listas de Segurança e Exemplo de Configurações de Recursos de Rede). Você também precisa configurar NSGs com regras de segurança de entrada e saída para a porta de integridade do kube-proxy, para o intervalo de portas de verificação de integridade e para balanceadores de carga.

Especificando Opções de Gerenciamento de Regra de Segurança para Balanceadores de Carga e Balanceadores de Carga de Rede

As regras de segurança controlam o acesso aos balanceadores de carga e aos balanceadores de carga de rede do Oracle Cloud Infrastructure provisionados para serviços do Kubernetes do tipo LoadBalancer. As regras de segurança podem ser gerenciadas (ou seja, criadas, atualizadas e excluídas) das seguintes maneiras:

  • Em um grupo de segurança de rede ou NSG (recomendado) As regras de segurança em um NSG se aplicam a qualquer recurso do Kubernetes adicionado ao NSG. Como tal, os NSGs podem fornecer controle de acesso refinado a recursos individuais.
  • Em uma lista de segurança. As regras de segurança em uma lista de segurança se aplicam a todos os recursos do Kubernetes em uma sub-rede. As listas de segurança não fornecem controle de acesso refinado a recursos individuais na sub-rede.

Para obter informações importantes sobre como as regras de segurança funcionam e verificar uma comparação geral entre listas de segurança e grupos de segurança de rede, consulte Regras de Segurança.

Observação

Se as regras de segurança forem gerenciadas em listas de segurança, a configuração e o gerenciamento de segurança poderão se tornar complicados quando a infraestrutura for complexa e ao usar ferramentas como o Terraform. Observe também que a capacidade de usar listas de segurança para gerenciar regras de segurança será descontinuada em uma release futura. Por esses motivos, a Oracle recomenda o uso de grupos de segurança de rede (NSGs) e a anotação oci.oraclecloud.com/security-rule-management-mode para gerenciar regras de segurança.

Você mesmo pode gerenciar as regras de segurança, criando, atualizando e excluindo regras conforme necessário. Como alternativa, você pode especificar que o oci-cloud-controller-manager (que é executado no plano de controle do cluster) deve gerenciar algumas ou todas as regras de segurança para você. O Kubernetes Engine usa o oci-cloud-controller-manager para provisionar balanceadores de carga e balanceadores de carga de rede para serviços do Kubernetes do tipo LoadBalancer.

Você usa anotações diferentes para especificar se o oci-cloud-controller-manager gerencia regras de segurança para um balanceador de carga ou balanceador de carga de rede em um NSG ou em uma lista de segurança, da seguinte forma:

Independentemente das anotações que você usa e se você ou o oci-cloud-controller-manager gerencia regras de segurança em uma lista de segurança ou em um NSG, também é possível especificar o OCID de um ou mais NSGs adicionais aos quais você deseja que o oci-cloud-controller-manager adicione o balanceador de carga ou o balanceador de carga de rede. Nesse caso, você usa a anotação oci.oraclecloud.com/oci-network-security-groups ou oci-network-load-balancer.oraclecloud.com/oci-network-security-groups. Observe que o oci-cloud-controller-manager não gerencia as regras de segurança nos NSGs adicionais especificados por essas anotações; portanto, é sua responsabilidade gerenciar as regras de segurança. Para obter mais informações sobre como usar as anotações oci.oraclecloud.com/oci-network-security-groups ou oci-network-load-balancer.oraclecloud.com/oci-network-security-groups, consulte Especificando Grupos de Segurança de Rede (recomendado).

Usando a anotação oci.oraclecloud.com/security-rule-management-mode para gerenciar regras de segurança em NSGs e listas de segurança

Políticas Obrigatórias do Serviço IAM para Gerenciar Regras de Segurança em NSGs

Para permitir que o oci-cloud-controller-manager gerencie as regras de segurança do balanceador de carga de um cluster em NSGs, você deve conceder ao cluster permissão para gerenciar NSGs. Por exemplo, para conceder essa permissão em um compartimento específico:

ALLOW any-user to manage network-security-groups in compartment <compartment-name> where request.principal.type = 'cluster' 

Além disso, para permitir que o oci-cloud-controller-manager crie um grupo de segurança de rede, você também deve conceder ao cluster permissão para gerenciar VCNs ou gerenciar famílias de redes virtuais. Por exemplo, especificando uma ou outra das seguintes instruções de política:

  • ALLOW any-user to manage vcns in compartment <compartment-name> where request.principal.type = 'cluster'
  • ALLOW any-user to manage virtual-network-family in compartment <compartment-name> where request.principal.type = 'cluster'

Usando a anotação oci.oraclecloud.com/security-rule-management-mode

Para especificar que o oci-cloud-controller-manager deve gerenciar regras de segurança para um balanceador de carga ou balanceador de carga de rede em um NSG (conforme recomendado pela Oracle), primeiro configure as políticas de IAM necessárias. Consulte Políticas Obrigatórias do Serviço IAM para Gerenciar Regras de Segurança em NSGs. Após configurar as políticas de IAM de pré-requisito, você poderá adicionar a seguinte anotação na seção de metadados do arquivo de manifesto:

oci.oraclecloud.com/security-rule-management-mode: "NSG"

O oci-cloud-controller-manager gerencia todas as regras de segurança necessárias para entrada no balanceador de carga ou no serviço de balanceador de carga de rede, em um NSG que o oci-cloud-controller-manager cria para o propósito. Esse NSG é conhecido como NSG de front-end e permite tráfego de entrada para o balanceador de carga ou balanceador de carga de rede de 0.0.0.0/0 ou do bloco CIDR de origem (e no intervalo de portas de origem) se especificado no arquivo de manifesto. O oci-cloud-controller-manager cria as seguintes regras de segurança no NSG de frontend:

Direção Origem Protocolo/Dest. Porta Descrição
Entrada 0.0.0.0/0 (ou bloco CIDR de origem, se especificado no arquivo de manifesto) Portas especificadas no arquivo de manifesto. Permitir tráfego de entrada para o balanceador de carga do OCI.
Saída NSG de Backend (se o OCID de um NSG de backend for especificado no arquivo de manifesto) ALL/(Nodeports para serviço) Permita tráfego para nós de trabalho.
Saída NSG de Backend (se o OCID de um NSG de backend for especificado no arquivo de manifesto) Porta de verificação de integridade TCP/ (10256)

Se o endereço IP de origem for preservado, a porta de verificação de integridade será selecionada automaticamente pelo serviço.

Permitir que o balanceador de carga ou o balanceador de carga de rede do OCI se comunique com o kube-proxy nos nós de trabalho para a porta de verificação de integridade.

Se você quiser que o oci-cloud-controller-manager gerencie regras de segurança para tráfego de entrada para os nós de trabalho no conjunto de backend, juntamente com o tráfego de saída do balanceador de carga ou do serviço de balanceador de carga de rede, especifique o OCID de um NSG existente a ser usado para essa finalidade. Esse NSG é conhecido como NSG de backend. O oci-cloud-controller-manager só adiciona regras de saída ao NSG de frontend se você especificar um NSG de backend. Para especificar o NSG a ser usado como o NSG de backend, adicione a seguinte anotação na seção de metadados do arquivo de manifesto:

oci.oraclecloud.com/oci-backend-network-security-group: "<nsg-ocid>"

em que <NSG-OCID> é o OCID de um NSG existente que está na mesma VCN do cluster e também um NSG ao qual as instâncias de computação que hospedam nós de trabalho já foram adicionadas. Por exemplo:

oci.oraclecloud.com/oci-backend-network-security-group: "ocid1.networksecuritygroup.oc1.phx.aaaaaa....cwex"

Você pode especificar os OCIDs de vários NSGs de backend em uma lista delimitada por vírgulas. Por exemplo:

oci.oraclecloud.com/oci-backend-network-security-group: "ocid1.networksecuritygroup.oc1.phx.aaaaaa....cwex,ocid1.networksecuritygroup.oc1.phx.aaaaaa....jfle,ocid1.networksecuritygroup.oc1.phx.aaaaaa....pkrj"

Observe que as instâncias de computação que hospedam os nós de trabalho no conjunto de backend já devem ter sido adicionadas ao NSG de backend especificado como o valor da anotação oci.oraclecloud.com/oci-backend-network-security-group. Você pode adicionar as instâncias de computação ao NSG de backend de uma das seguintes maneiras:

  • Especificando o NSG ao criar um pool de nós (no caso de nós gerenciados e nós virtuais).
  • Adicionando manualmente as VNICs principais das instâncias de computação que hospedam os nós de trabalho ao NSG usando o serviço Compute (no caso de nós gerenciados). Por exemplo, usando as páginas da Console do serviço Compute (ou a CLI ou a API do serviço Compute).

O oci-cloud-controller-manager cria as seguintes regras de segurança no NSG de backend:

Direção Origem Protocolo/Dest. Porta Descrição
Entrada OCID do NSG do Front-end Porta de verificação de integridade TCP/ (10256)

Se o endereço IP de origem for preservado, a porta de verificação de integridade será selecionada automaticamente pelo serviço.

Permitir que o balanceador de carga ou o balanceador de carga de rede do OCI se comunique com o kube-proxy nos nós de trabalho para verificações de integridade.
Entrada OCID do NSG do Front-end ALL/(Nodeports para serviço) Permitir que o balanceador de carga ou o balanceador de carga de rede do OCI se comunique com os nós de trabalho.

Se você não especificar um OCID para o NSG de backend, o oci-cloud-controller-manager não gerenciará as regras de segurança para tráfego de entrada para os nós de trabalho no conjunto de backend nem as regras de segurança para tráfego de saída do balanceador de carga ou do balanceador de carga de rede.

Você também pode definir a anotação oci.oraclecloud.com/security-rule-management-mode para outros valores para especificar que você mesmo deseja gerenciar regras de segurança ou deseja que o oci-cloud-controller-manager gerencie regras de segurança em listas de segurança. A sintaxe completa da anotação é a seguinte:

oci.oraclecloud.com/security-rule-management-mode: <value>

em que <value> é um dos seguintes:

  • "NSG": (recomendado) O oci-cloud-controller-manager gerencia todas as regras de segurança necessárias para entrada no serviço do balanceador de carga ou do balanceador de carga de rede, em um grupo de segurança de rede (NSG) que ele cria para essa finalidade.
  • "None": (padrão para balanceadores de carga de rede) Nenhum gerenciamento de lista de segurança está ativado e o oci-cloud-controller-manager não gerencia regras de segurança. É sua responsabilidade configurar uma regra de segurança que permita o tráfego de entrada para as portas apropriadas para intervalos de portas de nó, porta de integridade kube-proxy e intervalos de portas de verificação de integridade. Além disso, você precisa configurar regras de segurança para permitir o tráfego de entrada para balanceadores de carga e balanceadores de carga de rede (consulte Regras de Segurança para Balanceadores de Carga e Balanceadores de Carga de Rede). Isso é equivalente a definir service.beta.kubernetes.io/oci-load-balancer-security-list-management-mode ou oci-network-load-balancer.oraclecloud.com/security-list-management-mode como "None".
  • "SL-All": (padrão para balanceadores de carga) O oci-cloud-controller-manager gerencia todas as regras de segurança necessárias para entrada e saída de/para o serviço do balanceador de carga ou do balanceador de carga de rede, em uma lista de segurança. Isso é equivalente a definir service.beta.kubernetes.io/oci-load-balancer-security-list-management-mode ou oci-network-load-balancer.oraclecloud.com/security-list-management-mode como "All".
  • "SL-Frontend": O oci-cloud-controller-manager só gerencia regras de segurança para entrada em serviços de balanceador de carga e balanceador de carga de rede, em uma lista de segurança. É sua responsabilidade configurar uma regra de segurança que permita o tráfego de entrada para as portas apropriadas para intervalos de portas de nó, porta de integridade kube-proxy e intervalos de portas de verificação de integridade. Isso é equivalente a definir service.beta.kubernetes.io/oci-load-balancer-security-list-management-mode ou oci-network-load-balancer.oraclecloud.com/security-list-management-mode como "Frontend".

Em clusters com nós gerenciados, se você não especificar explicitamente um modo de gerenciamento ou especificar um valor inválido, o oci-cloud-controller-manager gerenciará todas as regras de segurança necessárias para entrada e saída de/para o serviço do balanceador de carga ou do balanceador de carga de rede, em uma lista de segurança (equivalente a "SL-All"). Lembre-se de que, nesse caso, o oci-cloud-controller-manager cria uma regra de segurança que permite o tráfego de entrada de 0.0.0.0/0 (ou dos intervalos de portas de origem especificados no arquivo de manifesto) para portas de listener. Em clusters com nós virtuais, o gerenciamento da lista de segurança nunca é ativado e você sempre precisa configurar manualmente as regras de segurança (equivalente a "None").

Observe o seguinte:

  • Se você incluir a anotação oci.oraclecloud.com/security-rule-management-mode e as anotações service.beta.kubernetes.io/oci-load-balancer-security-list-management-mode ou oci-network-load-balancer.oraclecloud.com/security-list-management-mode no manifesto, o oci-cloud-controller-manager sempre usará o oci.oraclecloud.com/security-rule-management-mode e ignorará a outra anotação.
  • Há limites para o número de regras de entrada e saída permitidas em listas de segurança e grupos de segurança de rede (consulte Limites da Lista de Segurança e Limites do Grupo de Segurança de Rede respectivamente). Se o número de regras de entrada ou saída exceder o limite, a criação ou atualização do balanceador de carga ou do grupo de segurança de rede falhará.
  • Um balanceador de carga ou balanceador de carga de rede pode ser adicionado a um máximo de cinco NSGs. Se o número de NSGs exceder o limite, um erro será retornado.
  • Se o serviço Kubernetes do tipo LoadBalancer for excluído, os recursos do OCI criados pelo OCI-cloud-controller-manager (o NSG de front-end e as regras de segurança criadas no NSG de front-end ou no NSG de backend) serão removidos. O NSG de backend e todas as regras de segurança que o oci-cloud-controller-manager não criou não são removidos.
  • Ao provisionar um balanceador de carga de rede para um serviço do Kubernetes do tipo LoadBalancer, você pode usar a anotação is-preserve-source: "true" para especificar a preservação do endereço IP do cliente nos cabeçalhos de pacotes IP (somente válido quando a anotação externalTrafficPolicy é definida como "Local"). Nesse caso, o oci-cloud-controller-manager cria regras de segurança no NSG de backend para permitir o acesso aos nós de trabalho no conjunto de backend dos blocos CIDR especificados por loadBalancerSourceRanges no manifesto do serviço LoadBalancer. Observe que, se os blocos CIDR não forem especificados por loadBalancerSourceRanges, o oci-cloud-controller-manager criará uma regra de segurança para permitir o acesso pela internet (0.0.0.0/0) no número da porta especificado por nodePort.
  • O NSG de backend especificado como o valor da anotação oci.oraclecloud.com/oci-backend-network-security-group deve estar na mesma VCN que o cluster.
  • As instâncias de computação que hospedam os nós de trabalho no conjunto de backend já devem ter sido adicionadas ao NSG de backend especificado como o valor da anotação oci.oraclecloud.com/oci-backend-network-security-group.

Exemplos de anotações de gerenciamento de regras de segurança

Exemplo 1: Criar um novo NSG de frontend com regras de segurança gerenciadas e ter regras de segurança gerenciadas em um NSG de backend existente

Neste exemplo:

  • Você deseja que o oci-cloud-controller-manager crie um NSG de frontend para um balanceador de carga e gerencie as regras de segurança nesse NSG.
  • Você deseja que o oci-cloud-controller-manager use um NSG de backend existente e gerencie as regras de segurança nesse NSG.

Você especifica "NSG" como o valor da anotação oci.oraclecloud.com/security-rule-management-mode e especifica o OCID do NSG existente como o valor da anotação oci.oraclecloud.com/oci-backend-network-security-group:

apiVersion: v1
kind: Service
metadata:
  name: my-nginx-svc
  labels:
    app: nginx
  annotations:
    oci.oraclecloud.com/load-balancer-type: "lb"    
    oci.oraclecloud.com/security-rule-management-mode: "NSG"
    oci.oraclecloud.com/oci-backend-network-security-group: <nsg_ocid> 
spec:
  type: LoadBalancer
  ports:
  - port: 80
  selector:
    app: nginx

Nesse caso:

  • O oci-cloud-controller-manager cria o NSG frontend para o balanceador de carga e gerencia suas regras de segurança.
  • O oci-cloud-controller-manager gerencia as regras de segurança do NSG de backend que tem o OCID especificado pela anotação oci-backend-network-security-group.

Observe o seguinte:

  • O NSG de backend especificado como o valor da anotação oci.oraclecloud.com/oci-backend-network-security-group deve estar na mesma VCN que o cluster.
  • As instâncias de computação que hospedam os nós de trabalho no conjunto de backend já devem ter sido adicionadas ao NSG de backend especificado como o valor da anotação oci.oraclecloud.com/oci-backend-network-security-group.

Exemplo 2: Criar um novo NSG de frontend com regras de segurança gerenciadas e gerenciar manualmente regras de segurança em um NSG de backend existente

Neste exemplo:

  • Você deseja que o oci-cloud-controller-manager crie um NSG de frontend para um balanceador de carga e gerencie as regras de segurança nesse NSG.
  • Você deseja definir manualmente regras de segurança para controlar o tráfego do front-end do balanceador de carga para o back-end em um NSG que você cria e gerencia. Por exemplo, talvez você queira criar regras de segurança para evitar que o tráfego seja roteado do LB para os nós de trabalho.

Você especifica "NSG" como o valor da anotação oci.oraclecloud.com/security-rule-management-mode:

apiVersion: v1
kind: Service
metadata:
  name: my-nginx-svc
  labels:
    app: nginx
  annotations:
    oci.oraclecloud.com/load-balancer-type: "lb"    
    oci.oraclecloud.com/security-rule-management-mode: "NSG"
spec:
  type: LoadBalancer
  ports:
  - port: 80
  selector:
    app: nginx

Nesse caso:

  • O oci-cloud-controller-manager cria o NSG frontend para o balanceador de carga e gerencia suas regras de segurança.
  • Você é responsável por criar e gerenciar regras de segurança em um NSG de backend para controlar o tráfego do NSG de frontend para o NSG de backend.

Exemplo 3: Criar um novo NSG de frontend com regras de segurança gerenciadas e ter regras de segurança gerenciadas em um NSG de backend existente (mas anotações usadas incorretamente)

Neste exemplo:

  • Você deseja que o oci-cloud-controller-manager crie um NSG de frontend para um balanceador de carga e gerencie as regras de segurança nesse NSG.
  • Você deseja que o oci-cloud-controller-manager use um NSG de backend existente e gerencie as regras de segurança nesse NSG. No entanto, você especifica as anotações incorretamente.

Você especifica corretamente "NSG" como o valor da anotação oci.oraclecloud.com/security-rule-management-mode. No entanto, inclua por engano a anotação service.beta.kubernetes.io/oci-load-balancer-security-list-management-mode e omita a anotação oci.oraclecloud.com/oci-backend-network-security-group:

apiVersion: v1
kind: Service
metadata:
  name: my-nginx-svc
  labels:
    app: nginx
  annotations:
    oci.oraclecloud.com/load-balancer-type: "lb"    
    oci.oraclecloud.com/security-rule-management-mode: "NSG"
    service.beta.kubernetes.io/oci-load-balancer-security-list-management-mode: "All"
  spec:
  type: LoadBalancer
  ports:
  - port: 80
  selector:
    app: nginx

Nesse caso:

  • O oci-cloud-controller-manager cria o NSG frontend para o balanceador de carga e gerencia suas regras de segurança.
  • O oci-cloud-controller-manager ignora a anotação service.beta.kubernetes.io/oci-load-balancer-security-list-management-mode (porque a anotação oci.oraclecloud.com/security-rule-management-mode está presente).
  • Você é responsável por criar e gerenciar regras de segurança em um NSG de backend para controlar o tráfego do NSG de frontend para o NSG de backend (porque a anotação oci.oraclecloud.com/oci-backend-network-security-group não está presente).

Exemplo 4: Criar um novo NSG de frontend com regras de segurança gerenciadas, ter regras de segurança gerenciadas em um NSG de backend existente e adicionar o balanceador de carga a um NSG existente

Neste exemplo:

  • Você deseja que o oci-cloud-controller-manager crie um NSG de frontend para um balanceador de carga e gerencie as regras de segurança nesse NSG.
  • Você deseja que o oci-cloud-controller-manager use um NSG de backend existente e gerencie as regras de segurança nesse NSG.
  • Você deseja que o oci-cloud-controller-manager adicione o balanceador de carga a um NSG existente que tenha regras de segurança que você gerencia.

Você especifica:

  • "NSG" como o valor da anotação oci.oraclecloud.com/security-rule-management-mode.
  • O OCID do NSG existente que você deseja que o oci-cloud-controller-manager use como o valor da anotação oci.oraclecloud.com/oci-backend-network-security-group.
  • O OCID do NSG existente ao qual você deseja que o oci-cloud-controller-manager adicione o balanceador de carga.

O manifesto é o seguinte:

apiVersion: v1
kind: Service
metadata:
  name: my-nginx-svc
  labels:
    app: nginx
  annotations:
    oci.oraclecloud.com/load-balancer-type: "lb"    
    oci.oraclecloud.com/security-rule-management-mode: "NSG"
    oci.oraclecloud.com/oci-backend-network-security-group: <nsg_ocid>
    oci.oraclecloud.com/oci-network-security-groups: "<nsg-ocid>"
  spec:
  type: LoadBalancer
  ports:
  - port: 80
  selector:
    app: nginx

Nesse caso:

  • O oci-cloud-controller-manager cria o NSG frontend para o balanceador de carga e gerencia suas regras de segurança.
  • O oci-cloud-controller-manager gerencia as regras de segurança do NSG de backend que tem o OCID especificado pela anotação oci.oraclecloud.com/oci-backend-network-security-group.
  • O oci-cloud-controller-manager adiciona o balanceador de carga ao NSG especificado pela anotação oci.oraclecloud.com/oci-network-security-groups.

Especificando Parâmetros de Verificação de Integridade

Os balanceadores de carga e os balanceadores de carga de rede do Oracle Cloud Infrastructure aplicam uma política de verificação de integridade para monitorar continuamente os servidores de backend. Verificação de integridade é um teste para confirmar a disponibilidade do servidor de backend e pode ser uma solicitação ou uma tentativa de conexão. Se um servidor falhar na verificação de integridade, o balanceador de carga ou o balanceador de carga da rede colocará o servidor temporariamente fora de rotação. Se subsequentemente o servidor for aprovado na verificação de integridade, o balanceador de carga ou o balanceador de carga da rede o retornará à rotação.

As políticas de verificação de integridade incluem vários parâmetros, cada um com um valor padrão. Quando o Kubernetes Engine provisiona um balanceador de carga do OCI ou balanceador de carga de rede para um serviço Kubernetes do tipo LoadBalancer, você pode substituir os valores padrão do parâmetro de verificação de integridade incluindo anotações na seção de metadados do arquivo de manifesto. Posteriormente, você poderá adicionar, modificar e excluir essas anotações. Se você excluir uma anotação que especificava um valor para um parâmetro de verificação de integridade, o balanceador de carga ou o balanceador de carga de rede usará o valor padrão do parâmetro.

Configurar parâmetros de verificação de integridade para balanceadores de carga

Para configurar parâmetros de verificação de integridade quando o Kubernetes Engine provisionar um balanceador de carga para um serviço Kubernetes do tipo LoadBalancer, adicione as seguintes anotações na seção de metadados do arquivo de manifesto:

  • Para especificar quantas solicitações de verificação de integridade malsucedidas tentar antes que um servidor de backend seja considerado não íntegro, adicione a seguinte anotação na seção de metadados do arquivo de manifesto:

    service.beta.kubernetes.io/oci-load-balancer-health-check-retries: "<value>"

    em que <value> é o número de solicitações de verificação de integridade malsucedidas.

  • Para especificar o intervalo entre as solicitações de verificação de integridade, adicione a seguinte anotação na seção de metadados do arquivo de manifesto:

    service.beta.kubernetes.io/oci-load-balancer-health-check-interval: "<value>"

    em que <value> é um valor numérico em milissegundos. O mínimo é 1000.

  • Para especificar o tempo máximo de espera de uma resposta a uma solicitação de verificação de integridade, adicione a seguinte anotação na seção de metadados do arquivo de manifesto:

    service.beta.kubernetes.io/oci-load-balancer-health-check-timeout: "<value>"

    em que <value> é um valor numérico em milissegundos. Uma verificação de integridade só será bem-sucedida se o balanceador de carga receber uma resposta dentro desse período.

Por exemplo:


apiVersion: v1
kind: Service
metadata:
  name: my-nginx-svc
  labels:
    app: nginx
  annotations:
    oci.oraclecloud.com/load-balancer-type: "lb"
    service.beta.kubernetes.io/oci-load-balancer-health-check-retries: "5"
    service.beta.kubernetes.io/oci-load-balancer-health-check-interval: "15000"
    service.beta.kubernetes.io/oci-load-balancer-health-check-timeout: "4000"
spec:
  type: LoadBalancer
  ports:
  - port: 80
  selector:
    app: nginx
Configurar parâmetros de verificação de integridade para balanceadores de carga de rede

Para configurar parâmetros de verificação de integridade quando o Kubernetes Engine provisionar um balanceador de carga de rede para um serviço Kubernetes do tipo LoadBalancer, adicione as seguintes anotações na seção de metadados do arquivo de manifesto:

  • Para especificar quantas solicitações de verificação de integridade malsucedidas tentar antes que um servidor de backend seja considerado não íntegro, adicione a seguinte anotação na seção de metadados do arquivo de manifesto:

    oci-network-load-balancer.oraclecloud.com/health-check-retries: "<value>"

    em que <value> é o número de solicitações de verificação de integridade malsucedidas.

  • Para especificar o intervalo entre as solicitações de verificação de integridade, adicione a seguinte anotação na seção de metadados do arquivo de manifesto:

    oci-network-load-balancer.oraclecloud.com/health-check-interval: "<value>"

    em que <value> é um valor numérico em milissegundos. O mínimo é 1000.

  • Para especificar o tempo máximo de espera de uma resposta a uma solicitação de verificação de integridade, adicione a seguinte anotação na seção de metadados do arquivo de manifesto:

    oci-network-load-balancer.oraclecloud.com/health-check-timeout: "<value>"

    em que <value> é um valor numérico em milissegundos. Uma verificação de integridade só será bem-sucedida se o balanceador de carga de rede receber uma resposta dentro desse período.

Por exemplo:


apiVersion: v1
kind: Service
metadata:
  name: my-nginx-svc
  labels:
    app: nginx
  annotations:
    oci.oraclecloud.com/load-balancer-type: "nlb"
    oci-network-load-balancer.oraclecloud.com/health-check-retries: "5"
    oci-network-load-balancer.oraclecloud.com/health-check-interval: "15000"
    oci-network-load-balancer.oraclecloud.com/health-check-timeout: "4000"
spec:
  type: LoadBalancer
  ports:
  - port: 80
  selector:
    app: nginx

Observe que, se você não especificar explicitamente os valores do parâmetro de verificação de integridade, incluindo anotações na seção de metadados do arquivo de manifesto, os seguintes padrões serão usados:

Anotação do Balanceador de Carga Anotação do Serviço Network Load Balancer

Valor Padrão Usado

service.beta.kubernetes.io/oci-load-balancer-health-check-retries oci-network-load-balancer.oraclecloud.com/health-check-retries "3"
service.beta.kubernetes.io/oci-load-balancer-health-check-interval oci-network-load-balancer.oraclecloud.com/health-check-interval "10,000"
service.beta.kubernetes.io/oci-load-balancer-health-check-timeout oci-network-load-balancer.oraclecloud.com/health-check-timeout "3,000"

Para obter mais informações sobre o balanceador de carga do Oracle Cloud Infrastructure e as políticas de verificação de integridade do balanceador de carga da rede, consulte:

Selecionando Nós de Trabalho para Incluir em Conjuntos de Backend

O tráfego de entrada para um balanceador de carga ou balanceador de carga de rede do Oracle Cloud Infrastructure é distribuído entre os servidores de backend em um conjunto de backend. Por padrão, quando o Kubernetes Engine provisiona um balanceador de carga ou balanceador de carga de rede do Oracle Cloud Infrastructure para um serviço Kubernetes do tipo LoadBalancer, todos os nós de trabalho do cluster são incluídos no conjunto de backend.

No entanto, você tem a opção de selecionar apenas um subconjunto de nós de trabalho em um cluster para incluir no conjunto de backend de um determinado balanceador de carga ou balanceador de carga de rede. A inclusão de subconjuntos dos nós de trabalho de um cluster nos conjuntos de backend de diferentes balanceadores de carga e balanceadores de carga de rede permite que você apresente um único cluster do Kubernetes como vários clusters lógicos (serviços).

Selecionar nós de trabalho a serem incluídos no conjunto de backend do balanceador de carga

Para selecionar os nós de trabalho a serem incluídos no conjunto de backend quando o Kubernetes Engine provisionar um balanceador de carga para um serviço Kubernetes do tipo LoadBalancer, adicione a seguinte anotação na seção de metadados do arquivo de manifesto:

oci.oraclecloud.com/node-label-selector: <label>

em que <label> é uma ou mais chaves e valores de label, identificados usando a notação do seletor de label do Kubernetes padrão. Por exemplo, lbset=set1

Por exemplo:


apiVersion: v1
kind: Service
metadata:
  name: my-nginx-svc
  labels:
    app: nginx
  annotations:
    oci.oraclecloud.com/load-balancer-type: "lb"
    oci.oraclecloud.com/node-label-selector: lbset=set1
spec:
  type: LoadBalancer
  ports:
  - port: 80
  selector:
    app: nginx

Selecionar nós de trabalho a serem incluídos no conjunto de backend do balanceador de carga da rede

Para selecionar os nós de trabalho a serem incluídos no conjunto de backend quando o Kubernetes Engine provisionar um balanceador de carga de rede para um serviço Kubernetes do tipo LoadBalancer, adicione a seguinte anotação na seção de metadados do arquivo de manifesto:

oci-network-load-balancer.oraclecloud.com/node-label-selector: <label>

em que <label> é uma ou mais chaves e valores de label, identificados usando a notação do seletor de label do Kubernetes padrão. Por exemplo, lbset=set1

Por exemplo:


apiVersion: v1
kind: Service
metadata:
  name: my-nginx-svc
  labels:
    app: nginx
  annotations:
    oci.oraclecloud.com/load-balancer-type: "nlb"
    oci-network-load-balancer.oraclecloud.com/node-label-selector: lbset=set1
spec:
  type: LoadBalancer
  ports:
  - port: 80
  selector:
    app: nginx

Use a notação padrão do seletor de label do Kubernetes para especificar as chaves de label e os valores nas anotações na seção de metadados do arquivo de manifesto. Para obter mais informações sobre notação de seletor de label padrão do Kubernetes, consulte Seletores de label na documentação do Kubernetes.

A tabela fornece alguns exemplos de notação do seletor de label do Kubernetes padrão.

Anotação do Balanceador de Carga Anotação do Serviço Network Load Balancer

Inclua no conjunto de backend:

oci.oraclecloud.com/node-label-selector: lbset=set1 oci-network-load-balancer.oraclecloud.com/node-label-selector: lbset=set1

Todos os nós de trabalho com a chave de label lbset que tem o valor set1

oci.oraclecloud.com/node-label-selector: lbset in (set1, set3) oci-network-load-balancer.oraclecloud.com/node-label-selector: lbset in (set1, set3)

Todos os nós de trabalho com a chave de label lbset que tem o valor set1 ou set3

oci.oraclecloud.com/node-label-selector: lbset oci-network-load-balancer.oraclecloud.com/node-label-selector: lbset Todos os nós de trabalho com a chave de label lbset, independentemente de seu valor.
oci.oraclecloud.com/node-label-selector: env=prod,lbset in (set1, set3) oci-network-load-balancer.oraclecloud.com/node-label-selector: env=prod,lbset in (set1, set3)

Todos os nós de trabalho com a chave de label env que tem o valor prod e com a chave de label lbset que tem o valor set1 ou o valor set3

oci.oraclecloud.com/node-label-selector: env!=test oci-network-load-balancer.oraclecloud.com/node-label-selector: env!=test

Todos os nós de trabalho com a chave de label env que não tem o valor test

Especificando Políticas do Conjunto de Backend

Quando o Kubernetes Engine provisiona um balanceador de carga ou balanceador de carga de rede para um serviço Kubernetes do tipo LoadBalancer, você pode definir uma política para o conjunto de backend a fim de especificar como distribuir o tráfego de entrada para os servidores de backend.

Para obter mais informações:

Especificando uma política de conjunto de backend para um balanceador de carga

Para especificar uma política para o conjunto de backend quando o Kubernetes Engine provisionar um balanceador de carga para um serviço Kubernetes do tipo LoadBalancer, adicione a seguinte anotação na seção de metadados do arquivo de manifesto:

oci.oraclecloud.com/loadbalancer-policy: <value>

em que <value> é um dos seguintes:

  • "ROUND_ROBIN": Roteia o tráfego de entrada sequencialmente para cada servidor em uma lista de conjuntos de backend.
  • "LEAST_CONNECTIONS": Roteia o tráfego de solicitações não persistentes recebidas para o servidor de backend com menos conexões ativas.
  • "IP_HASH": Roteia o tráfego de solicitações não persistentes recebidas do mesmo cliente para o mesmo servidor de backend, desde que esse servidor esteja disponível, usando o endereço IP de origem da solicitação recebida como uma chave de hash.

Por exemplo:


apiVersion: v1
kind: Service
metadata:
  name: my-nginx-svc
  labels:
    app: nginx
  annotations:
    oci.oraclecloud.com/load-balancer-type: "lb"
    oci.oraclecloud.com/loadbalancer-policy: "LEAST_CONNECTIONS"
spec:
  type: LoadBalancer
  ports:
  - port: 80
  selector:
    app: nginx

Observe que, se você não especificar explicitamente uma política para o conjunto de backend, "ROUND_ROBIN" será usado como o valor padrão.

Especificando uma política de conjunto de backend para um balanceador de carga de rede

Para especificar uma política para o conjunto de backend quando o Kubernetes Engine provisionar um balanceador de carga de rede para um serviço Kubernetes do tipo LoadBalancer, adicione a seguinte anotação na seção de metadados do arquivo de manifesto:

oci-network-load-balancer.oraclecloud.com/backend-policy: <value>

em que <value> é um dos seguintes:

  • "TWO_TUPLE": Roteia o tráfego de entrada com base no Hash de 2 Tuplas (IP de origem, IP de destino).
  • "THREE_TUPLE": Roteia o tráfego de entrada com base no Hash de 3 Tuplas (IP de origem, IP de destino, protocolo).
  • "FIVE_TUPLE": Roteia o tráfego de entrada com base no Hash de 5 Tuplas (IP e porta de origem, IP e porta de destino, protocolo).

Por exemplo:


apiVersion: v1
kind: Service
metadata:
  name: my-nginx-svc
  labels:
    app: nginx
  annotations:
    oci.oraclecloud.com/load-balancer-type: "nlb"
    oci-network-load-balancer.oraclecloud.com/backend-policy: "THREE_TUPLE"
spec:
  type: LoadBalancer
  ports:
  - port: 80
  selector:
    app: nginx

Observe que, se você não especificar explicitamente uma política para o conjunto de backend, "FIVE_TUPLE" será usado como o valor padrão.

Especificando Gates de Prontidão do Pod

Observação

Você pode especificar portas de preparação de pod para clusters com nós virtuais, mas não para clusters com nós gerenciados.

Quando o Kubernetes Engine provisiona um balanceador de carga ou balanceador de carga de rede do Oracle Cloud Infrastructure para um serviço Kubernetes do tipo LoadBalancer, você pode usar um portão de preparação de pod para garantir que o tráfego só seja roteado para pods que foram adicionados com sucesso ao conjunto de backend e que estejam prontos para receber tráfego. Observe que você pode especificar portas de preparação de pods para pods em execução em nós virtuais, mas não para pods em execução em nós gerenciados. Não defina portas de preparação de pods para pods em execução em nós gerenciados.

Os portões de prontidão do pod são condições adicionais para indicar que um pod está pronto para receber tráfego. Os portões de prontidão do pod permitem implementar verificações de prontidão personalizadas complexas e podem ajudar a obter tempo de inatividade zero durante implantações contínuas. Para obter mais informações, consulte detalhes de preparação do pod na documentação do Kubernetes.

Ao provisionar um balanceador de carga ou balanceador de carga de rede, o conjunto de backend compreende os endereços IP das réplicas de pod de uma implantação que têm uma condição de Ready. A atualização da implantação (por exemplo, para usar uma nova imagem) aciona a substituição de réplicas de pod existentes por novas réplicas de pod. No entanto, a substituição de todas as réplicas de pod pode levar algum tempo e causar indisponibilidade de backend porque:

  • As réplicas de pod existentes podem ser encerradas antes que o conjunto de backend seja atualizado com os endereços IP das novas réplicas de pod.
  • O conjunto de backend pode ser atualizado com os endereços IP das novas réplicas de pod antes que as novas réplicas de pod estejam prontas para receber tráfego.

A especificação do uso de um gate de preparação de pod garante que os backends estejam sempre disponíveis para o balanceador de carga ou o balanceador de carga de rede. Os pods existentes não são encerrados até que novos pods sejam adicionados ao conjunto de backend e os novos pods estejam prontos para receber tráfego.

Para especificar que o Kubernetes Engine deve injetar um portão de preparação de pod na especificação de pod de cada pod criado em um namespace específico, adicione o label loadbalancer.oci.oraclecloud.com/pod-readiness-gate-inject=enabled ao namespace digitando:

kubectl label ns <namespace> loadbalancer.oci.oraclecloud.com/pod-readiness-gate-inject=enabled

O exemplo a seguir mostra como criar um balanceador de carga com um gate de preparação de pod.

Primeiro, rotule o namespace pdr para especificar o gate de preparação de pod para o namespace, digitando:

kubectl label ns pdr loadbalancer.oci.oraclecloud.com/pod-readiness-gate-inject=enabled

A saída do comando confirma que o namespace foi rotulado:

namespace/pdr labeled

Em seguida, implante o Nginx no namespace pdr digitando:

kubectl apply -f https://raw.githubusercontent.com/oracle-devrel/oci-oke-virtual-nodes/main/nginx-svc/nginx.yaml -n pdr

Liste os pods no namespace pdr digitando:

kubectl get pods -n pdr

Agora você pode demonstrar o uso do gate de preparação do pod atualizando a versão da imagem no manifesto Nginx e reaplicando o manifesto, para que os pods existentes sejam substituídos por novos pods.

Faça download do manifesto Nginx em https://raw.githubusercontent.com/oracle-devrel/oci-oke-virtual-nodes/main/nginx-svc/nginx.yaml e altere a versão da imagem para nginx:1.25.1, conforme mostrado:
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.25.1
...

Reaplique o manifesto digitando:

kubectl apply -f ./nginx.yaml -n pdr

Observe os novos pods que estão sendo implantados digitando:

kubectl get pods -o wide -n pdr

Por exemplo:

NAME                     READY   STATUS    RESTARTS   AGE   IP            NODE          NOMINATED NODE   READINESS GATES
nginx-678976847c-8bqs7   1/1     Running   0          44m   10.0.10.153   10.0.10.253   <none>           1/1
nginx-678976847c-ttqms   1/1     Running   0          47m   10.0.10.201   10.0.10.253   <none>           1/1

Observe o status de um dos novos pods digitando:

kubectl describe pod <pod-name> -n pdr

Por exemplo:

kubectl describe pod nginx-678976847c-ttqms  -n pdr

A saída do comando confirma o status do gate de preparação podreadiness.loadbalancer.oraclecloud.com. Por exemplo:

...
Readiness Gates:
  Type                                                             Status
  podreadiness.loadbalancer.oraclecloud.com/f913fe603a9be9b5d51f   True 
Conditions:
  Type                                                             Status
  podreadiness.loadbalancer.oraclecloud.com/f913fe603a9be9b5d51f   True 
  PodScheduled                                                     True 
  Initialized                                                      True 
  Ready                                                            True 
  ContainersReady                                                  True 

Especificando IPMode para ajustar o roteamento de tráfego

Quando o Kubernetes Engine provisiona um balanceador de carga ou balanceador de carga de rede do Oracle Cloud Infrastructure para um serviço Kubernetes do tipo LoadBalancer, você pode especificar como rotear o tráfego originado de dentro de um cluster para o endereço IP do balanceador de carga ou do balanceador de carga de rede.

Em clusters que executam o Kubernetes versão 1.30 ou posterior, o portão de recursos do Kubernetes LoadBalancerIPMode está ativado e o campo ipMode de um serviço do tipo LoadBalancer tem o valor padrão "VIP". Quando ipMode tem o valor "VIP", o tráfego enviado para o endereço IP de um serviço do tipo LoadBalancer de um pod dentro do cluster é roteado diretamente para pods de aplicativos para otimizar o desempenho, ignorando o serviço LoadBalancer. Para obter mais informações, consulte Especificando IPMode do status do balanceador de carga na documentação do Kubernetes.

No entanto, em algumas situações, você pode decidir que o roteamento de tráfego direto para pods de aplicativos não é apropriado. Por exemplo, se o tráfego originado em um cluster for roteado diretamente para pods de aplicativos, você não poderá implementar o encerramento de SSL no nível do balanceador de carga.

Para especificar como rotear o tráfego enviado para o endereço IP do balanceador de carga ou do balanceador de carga de rede de dentro do cluster, adicione a seguinte anotação na seção de metadados do arquivo de manifesto:

oci.oraclecloud.com/ingress-ip-mode: <value>

em que <value> é um dos seguintes:

  • "VIP" : Todo o tráfego proveniente do cluster e enviado para o endereço IP de um serviço do tipo LoadBalancer é roteado diretamente para os pods do aplicativo para otimizar o desempenho, ignorando o serviço LoadBalancer.
  • "proxy" : Todo o tráfego originado no cluster e enviado para o endereço IP de um serviço do tipo LoadBalancer é roteado para o balanceador de carga ou balanceador de carga de rede do Oracle Cloud Infrastructure que foi provisionado para o serviço LoadBalancer. O balanceador de carga ou o balanceador de carga de rede encaminha o tráfego para os pods do aplicativo.

Por exemplo:


apiVersion: v1
kind: Service
metadata:
  name: my-nginx-svc
  labels:
    app: nginx
  annotations:
    oci.oraclecloud.com/load-balancer-type: "lb"
    oci.oraclecloud.com/ingress-ip-mode: "proxy"
spec:
  type: LoadBalancer
  ports:
  - port: 80
  selector:
    app: nginx

Observe que, se você não especificar a anotação oci.oraclecloud.com/ingress-ip-mode ou posteriormente remover a anotação, a propriedade ipMode de um serviço do tipo LoadBalancer terá o valor padrão "VIP".

Observe também que, ao usar um balanceador de carga de rede privada com a anotação oci-network-load-balancer.oraclecloud.com/is-preserve-source definida como true, o balanceador de carga de rede tem uma limitação conhecida que não permite tráfego em que o nó de origem e o nó de backend de destino são o mesmo nó. Essa limitação impede a comunicação entre pods no mesmo nó por meio do balanceador de carga de rede quando as seguintes condições são atendidas:

  • A anotação oci.oraclecloud.com/ingress-ip-mode está definida como proxy .
  • A anotação oci-network-load-balancer.oraclecloud.com/is-preserve-source está definida como true .
  • O balanceador de carga da rede é privado.

Especificando Famílias de Endereços IP para Balanceadores de Carga e Balanceadores de Carga de Rede

Quando o Kubernetes Engine provisiona um balanceador de carga ou balanceador de carga de rede do Oracle Cloud Infrastructure para um serviço Kubernetes do tipo LoadBalancer, a sub-rede do balanceador de carga determina o controle que você tem sobre a família de endereços IP do endereço IP no qual o balanceador de carga ou o balanceador de carga de rede recebe tráfego.

  • Se a sub-rede for uma sub-rede de pilha única IPv4, a sub-rede será configurada somente para endereçamento IPv4. O balanceador de carga ou o balanceador de carga de rede só recebe um endereço IPv4 no qual receberá tráfego externo. Não é possível alterar a família de endereços IP do endereço IP no qual o balanceador de carga ou o balanceador de carga de rede recebe tráfego externo.
  • Se a sub-rede for uma sub-rede de pilha dupla IPv4/IPv6, a sub-rede será configurada para os endereçamentos IPv4 e IPv6. O balanceador de carga ou o balanceador de carga de rede pode ser alocado ou um endereço IPv4 e um endereço IPv6 no qual o tráfego externo será recebido. Nessa situação, você pode usar os campos spec.ipFamilyPolicy e spec.ipFamilies do Kubernetes no manifesto de serviço para especificar se o balanceador de carga ou o balanceador de carga de rede recebe tráfego externo apenas no endereço IPv4 ou apenas no endereço IPv6 ou no endereço IPv4 e no endereço IPv6.

Observe que a família de endereços IP usada para o tráfego entre o listener e o conjunto de backend é determinada de forma diferente para balanceadores de carga e balanceadores de carga de rede:

  • Balanceadores de carga: O tráfego entre um listener de balanceador de carga e o conjunto de backend sempre usa endereços IPv4.
  • Balanceadores de carga de rede: O tráfego entre um listener do balanceador de carga de rede e o conjunto de backend usa a mesma família de endereços IP que o endereço IP no qual o listener do balanceador de carga de rede recebe tráfego externo.

A tabela mostra a interação entre a família de endereços IP da sub-rede do balanceador de carga, as definições de spec.ipFamilyPolicy e spec.ipFamilies, a família de endereços IP da qual os endereços IP são alocados para o balanceador de carga ou o balanceador de carga de rede e o protocolo IP entre o listener e o conjunto de backend. Observe que somente combinações válidas são mostradas.

Família de Endereços IP de Sub-rede ipFamilyPolicy definido como: ipFamilies definido como: Família de endereços IP do ponto final do balanceador de carga de rede Família de endereços IP do balanceador de carga Listener do balanceador de carga de rede para tráfego do conjunto de backend Listener do balanceador de carga para tráfego do conjunto de backend
IPv4 SingleStack IPv4 IPv4 IPv4 IPv4 IPv4
IPv4/IPv6 SingleStack IPv4 IPv4 IPv4 IPv4 IPv4
IPv4/IPv6 SingleStack IPv6 IPv6 não suportado IPv6 não suportado
IPv4 PreferDualStack IPv4 IPv4 IPv4 IPv4 IPv4
IPv4 PreferDualStack IPv6 IPv4 IPv4 IPv4 IPv4
IPv4 PreferDualStack IPv4,IPv6 IPv4 IPv4 IPv4 IPv4
IPv4 PreferDualStack IPv6,IPv4 IPv4 IPv4 IPv4 IPv4
IPv4/IPv6 PreferDualStack IPv4 IPv4(principal) e IPv6 IPv4(principal) e IPv6 IPv4(principal) e IPv6 IPv4
IPv4/IPv6 PreferDualStack IPv6 IPv6(principal) e IPv4 IPv6(principal) e IPv4 IPv6(principal) e IPv4 IPv4
IPv4/IPv6 PreferDualStack IPv4,IPv6 IPv4(principal) e IPv6 IPv4(principal) e IPv6 IPv4(principal) e IPv6 IPv4
IPv4/IPv6 PreferDualStack IPv6,IPv4 IPv6(principal) e IPv4 IPv6(principal) e IPv4 IPv6(principal) e IPv4 IPv4
IPv4/IPv6 RequireDualStack IPv4,IPv6 IPv4(principal) e IPv6 IPv4(principal) e IPv6 IPv4(principal) e IPv6 IPv4
IPv4/IPv6 RequireDualStack IPv6,IPv4 IPv6(principal) e IPv4 IPv6(principal) e IPv4 IPv6(principal) e IPv4 IPv4

Observe que, se você usar a anotação service.beta.kubernetes.io/oci-load-balancer-subnet1 para especificar uma sub-rede alternativa para a sub-rede especificada para balanceadores de carga quando o cluster for criado, certifique-se de que a família de endereços da sub-rede alternativa seja compatível com os campos spec.ipFamilyPolicy e spec.ipFamilies no manifesto de serviço.

Para obter mais informações sobre o suporte a IPv4 e IPv6 no Kubernetes, consulte IPv4/IPv6 dual-stack na documentação do Kubernetes.

Exemplo 1:

Neste exemplo:

  • Você deseja usar a sub-rede especificada para balanceadores de carga quando o cluster foi criado.
  • Você só deseja implantar o serviço do tipo LoadBalancer se puder ser designado a ele um endereço IPv4 e um endereço IPv6; portanto, defina ipFamilyPolicy: RequireDualStack.
  • Você deseja que o endereço IP principal do balanceador de carga seja um endereço IPv6 (e seu endereço secundário seja um endereço IPv4), portanto, defina spec.ipFamilies: IPv6,IPv4.
apiVersion: v1
kind: Service
metadata:
  name: nginx-lb
  labels:
    app: nginx
  annotations:
    oci.oraclecloud.com/load-balancer-type: "lb" 
spec:
  type: LoadBalancer
  ipFamilyPolicy: RequireDualStack
  ipFamilies:
  - IPv6
  - IPv4
  ports:
  - name: http
    port: 80
    targetPort: 80
  selector:
    app: nginx

Neste exemplo, a sub-rede do balanceador de carga do cluster é uma sub-rede IPv4/IPv6 de pilha dupla, portanto, a implantação é bem-sucedida. O balanceador de carga recebe um endereço IPv6 como seu endereço principal e um endereço IPv4 como seu endereço secundário.

Exemplo 2:

Neste exemplo:

  • Você deseja hospedar o serviço do tipo LoadBalancer em uma sub-rede alternativa à especificada para balanceadores de carga quando o cluster foi criado; portanto, use a anotação service.beta.kubernetes.io/oci-load-balancer-subnet1 para especificar o OCID da sub-rede alternativa.
  • Você deseja alocar endereços IPv4 e IPv6 para o serviço do tipo LoadBalancer se o serviço estiver hospedado em uma sub-rede IPv4/IPv6 de pilha dupla. Caso contrário, se o serviço estiver hospedado em uma sub-rede IPv4 de pilha única, você desejará um endereço IP alocado para o serviço dessa família de endereços IP. Então você define ipFamilyPolicy: PreferDualStack.
  • Você deseja que o endereço IP principal do balanceador de carga seja um endereço IPv4 (e seu endereço secundário seja um endereço IPv6, se suportado pela sub-rede), portanto, defina spec.ipFamilies: IPv4,IPv6.
apiVersion: v1
kind: Service
metadata:
  name: nginx-lb
  labels:
    app: nginx
  annotations:
    oci.oraclecloud.com/load-balancer-type: "lb"
    service.beta.kubernetes.io/oci-load-balancer-subnet1: "ocid1.subnet.oc1..aaaaaa....vdfw"  
spec:
  type: LoadBalancer
  ipFamilyPolicy: PreferDualStack
  ipFamilies:
  - IPv4
  - IPv6
  ports:
  - name: http
    port: 80
    targetPort: 80
  selector:
    app: nginx

Neste exemplo, a sub-rede alternativa é uma sub-rede IPv4/IPv6 de pilha dupla, portanto, a implantação é bem-sucedida. O balanceador de carga recebe um endereço IPv4 como seu endereço principal e um endereço IPv6 como seu endereço secundário.

Designando Endereços IPv4 e IPv6 Específicos aos Balanceadores de Carga de Rede

Quando o Kubernetes Engine provisiona um balanceador de carga de rede do Oracle Cloud Infrastructure para um serviço Kubernetes do tipo LoadBalancer, o serviço Network Load Balancer designa um ou mais endereços IP ao balanceador de carga de rede.

O serviço Network Load Balancer designa um endereço IPv4 privado e, no caso de um balanceador de carga de rede externo, também designa um endereço IPv4 público adicional. Se a sub-rede do balanceador de carga de rede for compatível, o serviço Network Load Balancer também poderá designar um endereço IPv6 (consulte Especificando Famílias de Endereços IP para Balanceadores de Carga e Balanceadores de Carga de Rede).

Em clusters que executam o Kubernetes versão 1.29 ou posterior, você pode especificar o endereço IP a ser designado ao balanceador de carga de rede, em vez do serviço Network Load Balancer selecionar o endereço IP a ser designado. O endereço IP que você pode designar depende da família de endereços IP da sub-rede do balanceador de carga de rede, da seguinte forma:

  • IPv4: Se a sub-rede do balanceador de carga de rede for uma sub-rede de pilha única IPv4 ou uma sub-rede de pilha dupla IPv4/IPv6, você poderá designar um endereço IPv4 privado ao balanceador de carga de rede.
  • IPv4 e IPv6: Se a sub-rede do balanceador de carga de rede for uma sub-rede de pilha dupla IPv4/IPv6, você poderá designar um ou ambos os endereços IPv4 privados e IPv6 ao balanceador de carga de rede.

Para especificar um endereço IPv4 privado a ser designado a um balanceador de carga de rede, adicione a seguinte anotação na seção de metadados do arquivo de manifesto:

oci-network-load-balancer.oraclecloud.com/assigned-private-ipv4: "<ipv4-address>"

em que <ipv4-address> é um endereço IPv4 válido, do bloco IPv4 CIDR especificado para a sub-rede do balanceador de carga da rede. Por exemplo:

oci-network-load-balancer.oraclecloud.com/assigned-private-ipv4: "10.0.0.1"

Para especificar um endereço IPv6 a ser designado a um balanceador de carga de rede, adicione a seguinte anotação na seção de metadados do arquivo de manifesto:

oci-network-load-balancer.oraclecloud.com/assigned-ipv6: "<ipv6-address>"

em que <ipv6-address> é um endereço ULA ou GUA IPv6 válido do bloco CIDR IPv6 especificado para a sub-rede do balanceador de carga da rede. Por exemplo:

  • oci-network-load-balancer.oraclecloud.com/assigned-ipv6: "fd8a:4b3c:7d91:abcd::1"
  • oci-network-load-balancer.oraclecloud.com/assigned-ipv6: "2607:9b80:9a0a:9a7e:abcd:ef01:2345:6789"

Por exemplo:

apiVersion: v1
kind: Service
metadata:
  name: my-nginx-svc
  labels:
    app: nginx
  annotations:
    oci.oraclecloud.com/load-balancer-type: "nlb"
    oci-network-load-balancer.oraclecloud.com/assigned-private-ipv4: "10.0.0.1"
    oci-network-load-balancer.oraclecloud.com/assigned-ipv6: "fd8a:4b3c:7d91:abcd::1"
spec:
  type: LoadBalancer
  ipFamilyPolicy: RequireDualStack
  ipFamilies:
  - IPv6
  - IPv4
  ports:
  - port: 80
  selector:
    app: nginx

É sua responsabilidade especificar um endereço IP válido. Para que um endereço IP seja válido, as seguintes condições devem ser atendidas:

  • O endereço IP deve estar no formato correto para a anotação usada (IPv4 ou IPv6).
  • O endereço IP deve ser do bloco CIDR apropriado especificado para a sub-rede do balanceador de carga de rede.
  • O endereço IP ainda não deve estar em uso por outro recurso.

Observe o seguinte:

  • Se o endereço IP não estiver no formato correto ou não for do bloco CIDR apropriado, a solicitação de criação do balanceador de carga de rede não será aceita.
  • Se o endereço IP estiver no formato correto e no bloco CIDR apropriado, mas o endereço IP já estiver em uso por outro recurso, a solicitação de criação do balanceador de carga de rede será aceita. No entanto, a solicitação de serviço associada falhará e o compartimento conterá um balanceador de carga de rede em um estado com Falha.
  • Se o endereço IP for válido, o balanceador de carga de rede será criado com o endereço IP especificado designado a ele.

Ocultando o Endereço IP Privado de um Balanceador de Carga de Rede

Quando o Kubernetes Engine provisiona um balanceador de carga de rede público do Oracle Cloud Infrastructure para um serviço Kubernetes do tipo LoadBalancer, o serviço Network Load Balancer designa um endereço IP público e um endereço IP privado ao balanceador de carga de rede. O endereço IP privado é usado para verificações de integridade e conversão de endereço de porta (PAT), mas não pode receber tráfego externo de fora da VCN (inclusive da internet pública).

Para ver os endereços IP públicos e privados que o serviço Network Load Balancer designou ao balanceador de carga de rede, digite o comando kubectl get service (ou semelhante). Por exemplo:

kubectl get service my-nginx-svc -o json | jq .status

{
  "loadBalancer": {
    "ingress": [
      {
        "ip": "203.0.113.2"
      },
      {
        "ip": "10.30.3.24"
      }
    ]
  }
}

Em algumas situações, talvez você só queira expor o endereço IP público do balanceador de carga de rede e ocultar o endereço IP privado. Por exemplo:

  • Você pode especificar um nome de DNS amigável para o balanceador de carga de rede ao usar o complemento ExternalDNS, incluindo a anotação external-dns.alpha.kubernetes.io/hostname no manifesto do serviço Kubernetes do tipo LoadBalancer. O ExternalDNS cria um registro de DNS para o balanceador de carga de rede no provedor de DNS externo que você configurou para o cluster. O registro de DNS mapeia o nome de DNS para o endereço IP público e o endereço IP privado. Como resultado, se o tráfego externo usar o nome DNS, haverá a possibilidade de o tráfego ser roteado para o endereço IP privado do balanceador de carga de rede, mesmo que o endereço IP privado não possa receber tráfego externo.
  • Você pode configurar a automação que usa o comando kubectl get service (ou semelhante) para obter o endereço IP do balanceador de carga de rede. Se seu caso de uso incluir roteamento de tráfego externo, você só desejará o endereço IP público do balanceador de carga de rede. No entanto, por padrão, o comando kubectl get service retorna o endereço IP público do balanceador de carga de rede e seu endereço IP privado.

Para especificar que o comando kubectl get service (ou semelhante) retorne apenas o endereço IP público do balanceador de carga de rede, adicione a seguinte anotação na seção de metadados do arquivo de manifesto:

oci-network-load-balancer.oraclecloud.com/external-ip-only: "true"

Observe que "false" é o valor padrão da anotação oci-network-load-balancer.oraclecloud.com/external-ip-only. Se você não incluir explicitamente a anotação na definição do serviço, o comando kubectl get service (ou semelhante) retornará o endereço IP público e o endereço IP privado do balanceador de carga de rede

Por exemplo:


apiVersion: v1
kind: Service
metadata:
  name: my-nginx-svc
  labels:
    app: nginx
  annotations:
    oci.oraclecloud.com/load-balancer-type: "nlb"
    oci-network-load-balancer.oraclecloud.com/external-ip-only: "true"
spec:
  type: LoadBalancer
  ports:
  - port: 80
  selector:
    app: nginx

Se você incluir a anotação oci-network-load-balancer.oraclecloud.com/external-ip-only: "true" no manifesto, quando informar o comando kubectl get service (ou semelhante), somente o endereço IP público será retornado. Por exemplo:

kubectl get service my-nginx-svc -o json | jq .status

{
  "loadBalancer": {
    "ingress": [
      {
        "ip": "203.0.113.2"
      }
    ]
  }
}

Impedindo que Nós Gerenciem o Tráfego

Você pode excluir nós de trabalho específicos da lista de servidores de backend no conjunto de backend de um balanceador de carga ou de rede do Oracle Cloud Infrastructure. Para obter mais informações, consulte node.kubernetes.io/exclude-from-external-load-balancers.

Marcando Balanceadores de Carga e Balanceadores de Carga da Rede

Você pode adicionar tags a um balanceador de carga ou balanceador de carga de rede que o Kubernetes Engine provisiona para um serviço Kubernetes do tipo LoadBalancer. O serviço Tagging permite que você agrupe recursos diferentes entre compartimentos e também permite anotar recursos com seus próprios metadados. Consulte Aplicando Tags a Balanceadores de Carga.

Ativando o Protocolo do Proxy

Quando o Kubernetes Engine provisiona um balanceador de carga ou balanceador de carga de rede do Oracle Cloud Infrastructure para um serviço Kubernetes do tipo LoadBalancer, você pode especificar se deseja ativar o recurso de protocolo de proxy com listeners baseados em TCP. A ativação do protocolo de proxy permite que informações de conexão de transporte, como o endereço IP de um cliente, sejam transportadas com segurança entre várias camadas de proxies até o servidor de backend. As seguintes versões do protocolo de proxy estão disponíveis:

  • Versão 1, que usa um cabeçalho baseado em texto para passar informações entre proxies, e é melhor para implementações pequenas.
  • Versão 2, que usa um cabeçalho baseado em texto e binário para maior eficiência na produção e parsing, e é melhor para implementações maiores.

Os balanceadores de carga provisionados pelo Kubernetes Engine suportam o protocolo de proxy versão 1 e versão 2. Os balanceadores de carga de rede provisionados pelo Kubernetes Engine suportam o protocolo de proxy versão 2.

Para obter mais informações:

Ativando o protocolo de proxy para balanceadores de carga

Para ativar o protocolo de proxy para balanceadores de carga provisionados pelo Kubernetes Engine, adicione a seguinte anotação na seção de metadados do arquivo de manifesto:

service.beta.kubernetes.io/oci-load-balancer-connection-proxy-protocol-version: "<value>"

em que "<value>" é um dos seguintes:

  • "1" para especificar que você deseja ativar o protocolo de proxy versão 1 em todos os listeners do balanceador de carga.
  • "2" para especificar que você deseja ativar o protocolo de proxy versão 2 em todos os listeners do balanceador de carga.

Após ativar o recurso de protocolo de proxy para balanceadores de carga, observe o seguinte:

  • Não é possível desativar o recurso de protocolo de proxy nos listeners do balanceador de carga.
  • É possível alternar entre a versão 1 e a versão 2 do protocolo de proxy atualizando a anotação.
  • Se você subsequentemente remover a anotação do manifesto ou cancelar a definição da anotação (definindo "<value>" como ""), a última definição aplicada com sucesso para "<value>" será mantida em todos os listeners.
Ativando e desativando o protocolo de proxy para balanceadores de carga de rede

Para ativar o protocolo de proxy para balanceadores de carga de rede provisionados pelo Kubernetes Engine, adicione a seguinte anotação na seção de metadados do arquivo de manifesto:

oci-network-load-balancer.oraclecloud.com/is-ppv2-enabled: "<value>"

em que "<value>" é um dos seguintes:

  • "true" para especificar que você deseja ativar o protocolo de proxy versão 2 em todos os listeners do balanceador de carga de rede.
  • "false" para especificar que você deseja desativar a versão 2 do protocolo de proxy em todos os listeners do balanceador de carga de rede.

Após ativar o recurso de protocolo de proxy para balanceadores de carga de rede, observe o seguinte:

  • Você pode desativar o recurso de protocolo de proxy nos listeners do balanceador de carga de rede definindo "<value>" como "false".
  • Se você subsequentemente remover a anotação do manifesto ou cancelar a definição da anotação (definindo "<value>" como "") ou especificar um valor inválido (como "enable") para a anotação, a última definição aplicada com sucesso para "<value>" será mantida em todos os listeners.