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 do seletor de label padrão do Kubernetes para especificar as chaves e os valores de label nas anotações na seção de metadados do arquivo de manifesto. Para obter mais informações sobre a notação do seletor de label do Kubernetes padrão, 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 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 preparação para pods são condições adicionais para indicar que um pod está pronto para receber tráfego. Os portões de preparação para pods 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.

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.