Configuración de equilibradores de carga y balanceadores de carga de red

Descubra cómo definir los equilibradores de carga y equilibradores de carga de red de Oracle Cloud Infrastructure que aprovisiona Kubernetes Engine (OKE) para un servicio de Kubernetes de tipo LoadBalancer.

Creación de equilibradores de carga internos

Puede crear equilibradores de carga y equilibradores de carga de red de Oracle Cloud Infrastructure para controlar el acceso a los servicios que se ejecutan en un cluster:

  • Al crear un cluster en el flujo de trabajo "Creación personalizada", seleccione una VCN existente que contenga los recursos de red que utilizará el nuevo cluster. Si desea utilizar un equilibrador de carga o un equilibrador de carga de red para controlar el tráfico a la VCN, seleccione una subred pública o privada existente en esa VCN para alojarla.
  • Al crear un cluster en el flujo de trabajo "Creación rápida", la VCN creada automáticamente contiene una subred regional pública para alojar un equilibrador de carga o un equilibrador de carga de red. Si desea alojar un equilibrador de carga o un equilibrador de carga de red en una subred privada, puede agregar una subred privada a la VCN más adelante.

También puede definir un servicio de Kubernetes interno de tipo LoadBalancer (a menudo denominado simplemente "equilibrador de carga interno") en un cluster para permitir que otros programas que se ejecuten en la misma VCN que el cluster accedan a los servicios del cluster. Se puede aprovisionar un equilibrador de carga interno:

  • como equilibrador de carga o como equilibrador de carga de red
  • con una dirección IP pública o con una dirección IP privada (asignada por el servicio Equilibrador de carga o el servicio Equilibrador de carga de red)
  • en una subred pública o en una subred privada

Un equilibrador de carga o un equilibrador de carga de red con una dirección IP pública se denomina público. Un equilibrador de carga público o un equilibrador de carga de red se pueden alojar en una subred pública o en una subred privada.

Un equilibrador de carga o un equilibrador de carga de red con una dirección IP privada se denomina privado. Un equilibrador de carga privado o un equilibrador de carga de red se pueden alojar en una subred pública o en una subred privada.

Por defecto, los equilibradores de carga internos se aprovisionan con direcciones IP públicas y se alojan en subredes públicas.

Para obtener más información:

Crear un equilibrador de carga interno como equilibrador de carga de OCI

Para crear un equilibrador de carga interno como un equilibrador de carga de OCI con una dirección IP privada, alojado en la subred especificada para los equilibradores de carga cuando se creó el cluster, agregue la siguiente anotación en la sección de metadatos del archivo de manifiesto:

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

Para crear un equilibrador de carga interno como equilibrador de carga de OCI con una dirección IP privada alojada, alojada en una subred alternativa a la especificada para los equilibradores de carga cuando se creó el cluster, agregue las dos siguientes anotaciones en la sección de metadatos del archivo de manifiesto:

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

donde ocid1.subnet.oc1..aaaaaa....vdfw es el OCID de la subred alternativa. La subred alternativa puede ser una subred privada o una subred pública.

Por ejemplo:


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
Crear un equilibrador de carga de red interno como equilibrador de carga de red de OCI

Para crear un equilibrador de carga de red interno como equilibrador de carga de red de OCI con una dirección IP privada, alojada en la subred especificada para los equilibradores de carga cuando se creó el cluster, agregue la siguiente anotación en la sección de metadatos del archivo de manifiesto:

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

Para crear un equilibrador de carga de red interno como equilibrador de carga de red de OCI con una dirección IP privada, alojado en una subred alternativa a la especificada para los equilibradores de carga cuando se creó el cluster, agregue las dos anotaciones siguientes en la sección de metadatos del archivo de manifiesto:

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

donde ocid1.subnet.oc1..aaaaaa....vdfw es el OCID de la subred privada. La subred alternativa puede ser una subred privada o una subred pública.

Por ejemplo:


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

Especificación de direcciones IP públicas reservadas

Cuando se despliega un servicio de Kubernetes de tipo LoadBalancer en un cluster, Kubernetes Engine crea un equilibrador de carga público o un equilibrador de carga de red de Oracle Cloud Infrastructure para aceptar tráfico en el cluster. Por defecto, al equilibrador de carga público o al equilibrador de carga de red de Oracle Cloud Infrastructure se le asigna una dirección IP pública de corta duración. Sin embargo, una dirección IP pública efímera es temporal y solo dura toda la vida útil del equilibrador de carga público o del equilibrador de carga de red.

Si desea que el equilibrador de carga público o el equilibrador de carga de red de Kubernetes Engine de Oracle Cloud Infrastructure tengan el mismo despliegue de dirección IP pública después del despliegue, puede asignarle una dirección IP pública reservada desde el grupo de direcciones IP públicas reservadas. Para obtener más información sobre la creación y visualización de direcciones IP públicas reservadas, consulte Direcciones IP públicas.

Para asignar una dirección IP pública reservada al equilibrador de carga público de Oracle Cloud Infrastructure o al equilibrador de carga de red que crea Kubernetes Engine, agregue la propiedad LoadBalancerIP en la sección de especificaciones del archivo de manifiesto que define el servicio de tipo LoadBalancer y especifique la dirección IP pública reservada.

Asignar una dirección IP pública reservada a un equilibrador de carga público

Ejemplo:

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
Asignar una dirección IP pública reservada a un equilibrador de carga de red público

Ejemplo:

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

Tenga en cuenta lo siguiente:

  • Si define la propiedad loadBalancerIP del servicio LoadBalancer, no podrá cambiar más adelante directamente la dirección IP del equilibrador de carga público o el equilibrador de carga de red de Oracle Cloud Infrastructure que crea Kubernetes Engine. Si desea cambiar la dirección IP, suprima el servicio LoadBalancer, especifique una dirección IP pública reservada diferente en el archivo de manifiesto y vuelva a desplegar el servicio LoadBalancer.
  • Si no define la propiedad loadBalancerIP del servicio LoadBalancer, no podrá cambiar más adelante directamente la dirección IP del equilibrador de carga público o el equilibrador de carga de red de Oracle Cloud Infrastructure que Kubernetes Engine crea desde una dirección IP efímera a una dirección IP pública reservada. Si desea cambiar la dirección IP de corta duración a una dirección IP pública reservada, suprima el servicio de tipo LoadBalancer, defina la propiedad loadBalancerIP en una dirección IP pública reservada en el archivo de manifiesto y vuelva a desplegar el servicio de tipo LoadBalancer.
  • Puede suprimir el servicio de tipo LoadBalancer y liberar la dirección IP pública reservada para otros usos (por ejemplo, para asignarlo a otro servicio de tipo LoadBalancer).
  • No puede especificar una dirección IP pública reservada para un servicio de tipo LoadBalancer si la misma dirección IP ya está asignada a otro recurso (como una instancia informática u otro servicio de tipo LoadBalancer).
  • No puede agregar la propiedad loadBalancerIP al archivo de manifiesto para un servicio de equilibrador de carga interno (es decir, un archivo de manifiesto que incluye la anotación service.beta.kubernetes.io/oci-load-balancer-internal: "true" o oci-network-load-balancer.oraclecloud.com/internal: "true").
  • Por defecto, se espera que la dirección IP pública reservada que especifique como propiedad loadBalancerIP de un servicio de tipo LoadBalancer en el archivo de manifiesto sea un recurso en el mismo compartimento que el cluster. Si desea especificar una dirección IP pública reservada en un compartimento diferente:

    • para equilibradores de carga públicos, agregue la siguiente política al arrendamiento:
      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 equilibradores de carga de red, agregue la siguiente política al arrendamiento:
      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'}

Especificación de grupos de seguridad de red (recomendado)

Los grupos de seguridad de red (NSG) de Oracle Cloud Infrastructure permiten controlar el tráfico que entra y sale de los recursos, así como entre los recursos. Las reglas de seguridad definidas para un NSG garantizan que todos los recursos de ese NSG tengan la misma estrategia de seguridad. Para obtener más información, consulte Grupos de seguridad de red.

Puede utilizar los NSG para controlar el acceso al equilibrador de carga o al equilibrador de carga de red de Oracle Cloud Infrastructure que aprovisiona Kubernetes Engine para un servicio de Kubernetes de tipo LoadBalancer.

Al utilizar NSG para controlar el acceso, deben existir reglas de seguridad adecuadas para permitir el tráfico entrante y saliente hacia y desde la subred del equilibrador de carga o del equilibrador de carga de red. Consulte Reglas de seguridad para equilibrador de carga y equilibrador de carga de red.

Si decide utilizar NSG para controlar el acceso a equilibradores de carga o equilibradores de carga de red:

Para controlar el acceso mediante un NSG que gestione, debe incluir anotaciones en el archivo de manifiesto para especificar el NSG al que desea agregar el equilibrador de carga o el equilibrador de carga de red.

Agregar un equilibrador de carga a un NSG existente

Para agregar el equilibrador de carga de Oracle Cloud Infrastructure creado por Kubernetes Engine a un NSG que gestione, agregue la siguiente anotación en la sección de metadatos del archivo de manifiesto:

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

donde <nsg-ocid> es el OCID de un NSG existente.

Por ejemplo:


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
Agregar un equilibrador de carga de red a un NSG existente

Para agregar el equilibrador de carga de red de Oracle Cloud Infrastructure creado por Kubernetes Engine a un NSG que gestione, agregue la siguiente anotación en la sección de metadatos del archivo de manifiesto:

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

donde <nsg-ocid> es el OCID de un NSG existente.

Por ejemplo:


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

Tenga en cuenta lo siguiente:

  • El NSG que especifique debe estar en la misma VCN que el equilibrador de carga o el equilibrador de carga de red de Oracle Cloud Infrastructure.
  • Si el NSG que especifique pertenece a un compartimento diferente del cluster, debe incluir una sentencia de política similar a la siguiente en una política de IAM:
    ALLOW any-user to use network-security-groups in TENANCY where ALL { request.principal.type = 'cluster' }

    Si considera que esta sentencia de política es demasiado permisiva, puede restringir el permiso para especificar explícitamente el compartimento al que pertenece el NSG y/o para especificar explícitamente el cluster. Por ejemplo:

    Allow any-user to use network-security-groups in compartment <compartment-ocid> where all { request.principal.id = '<cluster-ocid>' }
  • Puede especificar hasta cinco NSG, en una lista separada por comas, con el siguiente formato:
    oci.oraclecloud.com/oci-network-security-groups: "<nsg1-ocid>,<nsg2-ocid>,<nsg3-ocid>,<nsg4-ocid>,<nsg5-ocid>"
  • Para eliminar un equilibrador de carga o un equilibrador de carga de red de un NSG, o para cambiar el NSG en el que se encuentra el equilibrador de carga o el equilibrador de carga de red, actualice la anotación y vuelva a aplicar el manifiesto.
  • Si decide controlar el acceso a un equilibrador de carga o un equilibrador de carga de red de Oracle Cloud Infrastructure mediante un NSG que gestione, Oracle recomienda desactivar la gestión de listas de seguridad de Kubernetes agregando una de las siguientes anotaciones en la sección de metadatos del archivo de manifiesto para el equilibrador de carga o el equilibrador de carga de red, respectivamente:

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

    También puede agregar la siguiente anotación equivalente:

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

    Si sigue la recomendación y agrega la anotación, la gestión de listas de seguridad de Kubernetes no está activada. Debe configurar NSG con reglas de seguridad de entrada y salida para pools de nodos y para el punto final de API de Kubernetes (para obtener más información, consulte Configuración de reglas de seguridad en grupos de seguridad de red y/o listas de seguridad y Configuraciones de recursos de red de ejemplo). También debe configurar NSG con reglas de seguridad de entrada y salida para el puerto de estado de kube-proxy, para el rango de puertos de comprobación del sistema y para los equilibradores de carga.

Especificación de opciones de gestión de reglas de seguridad para equilibradores de carga y equilibradores de carga de red

Las reglas de seguridad controlan el acceso a los equilibradores de carga y equilibradores de carga de red de Oracle Cloud Infrastructure aprovisionados para servicios de Kubernetes de tipo LoadBalancer. Las reglas de seguridad se pueden gestionar (es decir, crear, actualizar y suprimir) de las siguientes formas:

  • En un grupo de seguridad de red o NSG (recomendado) Las reglas de seguridad de un NSG se aplican a cualquier recurso de Kubernetes agregado al NSG. Como tal, los NSG pueden proporcionar control de acceso detallado a recursos individuales.
  • En una lista de seguridad. Las reglas de seguridad de una lista se aplican a todos los recursos de Kubernetes de una subred. Las listas de seguridad no proporcionan control de acceso detallado a los recursos individuales de la subred.

Para obtener información importante sobre el funcionamiento de las reglas de seguridad y la comparación general de las listas de seguridad y los grupos de seguridad de red, consulte Reglas de seguridad.

Nota

Si las reglas de seguridad se gestionan en listas de seguridad, la configuración y la gestión de la seguridad pueden complicarse cuando la infraestructura es compleja y cuando se utilizan herramientas como Terraform. Tenga en cuenta también que la capacidad de utilizar listas de seguridad para gestionar reglas de seguridad quedará en desuso en futuras versiones. Por estos motivos, Oracle recomienda el uso de grupos de seguridad de red (NSG) y la anotación oci.oraclecloud.com/security-rule-management-mode para gestionar reglas de seguridad.

Puede gestionar las reglas de seguridad usted mismo, creando, actualizando y suprimiendo reglas según sea necesario. También puede especificar que oci-cloud-controller-manager (que se ejecuta en el plano de control de cluster) gestione algunas o todas las reglas de seguridad. Kubernetes Engine utiliza oci-cloud-controller-manager para aprovisionar equilibradores de carga y equilibradores de carga de red para servicios de Kubernetes de tipo LoadBalancer.

Puede utilizar diferentes anotaciones para especificar si oci-cloud-controller-manager gestiona reglas de seguridad para un equilibrador de carga o un equilibrador de carga de red en un NSG o en una lista de seguridad, de la siguiente manera:

Independientemente de las anotaciones que utilice y de si oci-cloud-controller-manager gestiona reglas de seguridad en una lista de seguridad o en un NSG, también puede especificar el OCID de uno o más NSG adicionales a los que desea que el oci-cloud-controller-manager agregue el equilibrador de carga o el equilibrador de carga de red. En este caso, utilice la anotación oci.oraclecloud.com/oci-network-security-groups o oci-network-load-balancer.oraclecloud.com/oci-network-security-groups. Tenga en cuenta que oci-cloud-controller-manager no gestiona las reglas de seguridad en los NSG adicionales especificados por estas anotaciones, por lo que es su responsabilidad gestionar las reglas de seguridad. Para obtener más información sobre el uso de las anotaciones oci.oraclecloud.com/oci-network-security-groups o oci-network-load-balancer.oraclecloud.com/oci-network-security-groups, consulte Especificación de grupos de seguridad de red (recomendado).

Uso de la anotación oci.oraclecloud.com/security-rule-management-mode para gestionar reglas de seguridad en NSG y listas de seguridad

Políticas de IAM necesarias para gestionar reglas de seguridad en NSG

Para permitir que oci-cloud-controller-manager gestione las reglas de seguridad para el equilibrador de carga de un cluster en los NSG, debe otorgar permiso al cluster para gestionar los NSG. Por ejemplo, para otorgar este permiso en un compartimento concreto:

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

Además, para permitir que oci-cloud-controller-manager cree un grupo de seguridad de red, también debe otorgar permiso al cluster para gestionar VCN o para gestionar familias de redes virtuales. Por ejemplo, especificando una u otra de las siguientes sentencias 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'

Uso de la anotación oci.oraclecloud.com/security-rule-management-mode

Para especificar que oci-cloud-controller-manager gestione reglas de seguridad para un equilibrador de carga o un equilibrador de carga de red en un NSG (según lo recomendado por Oracle), primero debe configurar las políticas de IAM necesarias. Consulte Políticas de IAM necesarias para gestionar reglas de seguridad en NSG. Después de configurar las políticas de IAM necesarias, puede agregar la siguiente anotación en la sección de metadatos del archivo de manifiesto:

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

El oci-cloud-controller-manager gestiona todas las reglas de seguridad necesarias para la entrada en el equilibrador de carga o servicio de equilibrador de carga de red, en un NSG que el oci-cloud-controller-manager crea para ese fin. Este NSG se conoce como NSG frontend y permite el tráfico entrante al equilibrador de carga o al equilibrador de carga de red desde 0.0.0.0/0, o desde el bloque de CIDR de origen (y en el rango de puertos de origen) si se especifica en el archivo de manifiesto. El gestor-controlador-oci-cloud crea las siguientes reglas de seguridad en el NSG frontend:

Dirección Origen Protocolo/puerto de destino Descripción
Entrada 0.0.0.0/0 (o bloque CIDR de origen si se especifica en el archivo de manifiesto) Puertos especificados en el archivo de manifiesto. Permitir tráfico entrante al equilibrador de carga de OCI.
Salida NSG de backend (si el OCID de un NSG de backend se especifica en el archivo de manifiesto) ALL/(Nodeports para servicio) Permitir tráfico a nodos de trabajador.
Salida NSG de backend (si el OCID de un NSG de backend se especifica en el archivo de manifiesto) Puerto de comprobación del sistema TCP/ (10256)

Si se conserva la dirección IP de origen, el servicio selecciona automáticamente el puerto de comprobación del sistema.

Permitir que el equilibrador de carga de OCI o el equilibrador de carga de red se comuniquen con kube-proxy en nodos de trabajador para el puerto de comprobación del sistema.

Si desea que oci-cloud-controller-manager gestione reglas de seguridad para el tráfico de entrada a los nodos de trabajador del juego de backends, junto con el tráfico de salida del equilibrador de carga o el servicio de equilibrador de carga de red, debe especificar el OCID de un NSG existente que se utilizará para ese fin. Este NSG se conoce como el NSG backend. El gestor de controladores oci-cloud solo agrega reglas de salida al NSG de frontend si especifica un NSG de backend. Para especificar el NSG que se utilizará como NSG de backend, agregue la siguiente anotación en la sección de metadatos del archivo de manifiesto:

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

donde <NSG-OCID> es el OCID de un NSG existente que está en la misma VCN que el cluster y también un NSG al que ya se han agregado las instancias informáticas que alojan nodos de trabajador. Por ejemplo:

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

Puede especificar los OCID de varios NSG de backend en una lista delimitada por comas. Por ejemplo:

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"

Tenga en cuenta que las instancias informáticas que alojan los nodos de trabajador en el juego de backends ya se deben haber agregado al NSG de backend que especifique como valor de la anotación oci.oraclecloud.com/oci-backend-network-security-group. Puede agregar las instancias informáticas al NSG backend de una de las siguientes formas:

  • Especificando el NSG al crear un pool de nodos (en el caso de nodos gestionados y nodos virtuales).
  • Mediante la adición manual de las VNIC primarias de las instancias informáticas que alojan los nodos de trabajador al NSG mediante el servicio Compute (en el caso de los nodos gestionados). Por ejemplo, mediante las páginas de la consola del servicio Compute (o la CLI o API del servicio Compute).

El gestor-controlador-oci-cloud crea las siguientes reglas de seguridad en el NSG backend:

Dirección Origen Protocolo/puerto de destino Descripción
Entrada OCID de NSG de frontend Puerto de comprobación del sistema TCP/ (10256)

Si se conserva la dirección IP de origen, el servicio selecciona automáticamente el puerto de comprobación del sistema.

Permitir que el equilibrador de carga de OCI o el equilibrador de carga de red se comuniquen con kube-proxy en los nodos de trabajador para las comprobaciones del sistema.
Entrada OCID de NSG de frontend ALL/(Nodeports para servicio) Permitir que el equilibrador de carga de OCI o el equilibrador de carga de red se comuniquen con los nodos de trabajador.

Si no especifica un OCID para el NSG de backend, oci-cloud-controller-manager no gestiona las reglas de seguridad para el tráfico de entrada a los nodos de trabajador del juego de backends, ni las reglas de seguridad para el tráfico de salida del equilibrador de carga o el equilibrador de carga de red.

También puede definir la anotación oci.oraclecloud.com/security-rule-management-mode en otros valores para especificar que desea gestionar las reglas de seguridad usted mismo o que desea que oci-cloud-controller-manager gestione las reglas de seguridad en las listas de seguridad. La sintaxis completa de la anotación es la siguiente:

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

donde <value> es uno de:

  • "NSG": (recomendado) oci-cloud-controller-manager gestiona todas las reglas de seguridad necesarias para la entrada en el equilibrador de carga o el servicio de equilibrador de carga de red, en un grupo de seguridad de red (NSG) que crea para ese fin.
  • "None": (por defecto para los equilibradores de carga de red) no está activada la gestión de listas de seguridad y oci-cloud-controller-manager no gestiona las reglas de seguridad. Es su responsabilidad configurar una regla de seguridad que permita tráfico entrante a los puertos adecuados para rangos de puertos de nodo, el puerto de estado de kube-proxy y los rangos de puertos de comprobación del sistema. Además, debe configurar reglas de seguridad para permitir el tráfico entrante a equilibradores de carga y equilibradores de carga de red (consulte Reglas de seguridad para equilibradores de carga y equilibradores de carga de red). Esto equivale a definir service.beta.kubernetes.io/oci-load-balancer-security-list-management-mode o oci-network-load-balancer.oraclecloud.com/security-list-management-mode en "None".
  • "SL-All": (por defecto para equilibradores de carga) oci-cloud-controller-manager gestiona todas las reglas de seguridad necesarias para la entrada y salida desde y hacia el equilibrador de carga o el servicio de equilibrador de carga de red, en una lista de seguridad. Esto equivale a definir service.beta.kubernetes.io/oci-load-balancer-security-list-management-mode o oci-network-load-balancer.oraclecloud.com/security-list-management-mode en "All".
  • "SL-Frontend": oci-cloud-controller-manager solo gestiona reglas de seguridad para la entrada en los servicios de equilibrador de carga y equilibrador de carga de red, en una lista de seguridad. Es su responsabilidad configurar una regla de seguridad que permita tráfico entrante a los puertos adecuados para rangos de puertos de nodo, el puerto de estado de kube-proxy y los rangos de puertos de comprobación del sistema. Esto equivale a definir service.beta.kubernetes.io/oci-load-balancer-security-list-management-mode o oci-network-load-balancer.oraclecloud.com/security-list-management-mode en "Frontend".

En los clusters con nodos gestionados, si no especifica explícitamente un modo de gestión o especifica un valor no válido, oci-cloud-controller-manager gestiona todas las reglas de seguridad necesarias para la entrada y salida del servicio de equilibrador de carga o equilibrador de carga de red, en una lista de seguridad (equivalente a "SL-All"). Tenga en cuenta que, en este caso, oci-cloud-controller-manager crea una regla de seguridad que permite el tráfico entrante de 0.0.0.0/0 (o de los rangos de puertos de origen especificados en el archivo de manifiesto) a los puertos del listener. En los clusters con nodos virtuales, la gestión de listas de seguridad nunca se activa y siempre tiene que configurar manualmente las reglas de seguridad (equivalente a "None").

Tenga en cuenta lo siguiente:

  • Si incluye la anotación oci.oraclecloud.com/security-rule-management-mode y cualquiera de las anotaciones service.beta.kubernetes.io/oci-load-balancer-security-list-management-mode o oci-network-load-balancer.oraclecloud.com/security-list-management-mode en el manifiesto, oci-cloud-controller-manager siempre utiliza oci.oraclecloud.com/security-rule-management-mode e ignora la otra anotación.
  • Hay límites en el número de reglas de entrada y salida que se permiten tanto en listas de seguridad como en grupos de seguridad de red (consulte Límites de lista de seguridad y Límites de grupo de seguridad de red respectivamente). Si el número de reglas de entrada o salida supera el límite, se produce un fallo al crear o actualizar el equilibrador de carga o el grupo de seguridad de red.
  • Se puede agregar un equilibrador de carga o un equilibrador de carga de red a un máximo de cinco NSG. Si el número de NSG supera el límite, se devuelve un error.
  • Si se suprime el servicio de Kubernetes de tipo LoadBalancer, se eliminan los recursos de OCI creados por OCI-cloud-controller-manager (el NSG de frontend y las reglas de seguridad creadas en el NSG de frontend o el NSG de backend). El NSG de backend y las reglas de seguridad que no haya creado oci-cloud-controller-manager no se eliminan.
  • Al aprovisionar un equilibrador de carga de red para un servicio de Kubernetes de tipo LoadBalancer, puede utilizar la anotación is-preserve-source: "true" para especificar la conservación de la dirección IP del cliente en las cabeceras de los paquetes IP (solo válido cuando la anotación externalTrafficPolicy está definida en "Local"). En este caso, oci-cloud-controller-manager crea reglas de seguridad en el NSG de backend para permitir el acceso a los nodos de trabajador en el juego de backends desde los bloques de CIDR especificados por loadBalancerSourceRanges en el manifiesto de servicio LoadBalancer. Tenga en cuenta que si loadBalancerSourceRanges no especifica los bloques de CIDR, oci-cloud-controller-manager crea una regla de seguridad para permitir el acceso desde Internet (0.0.0.0/0) en el número de puerto especificado por nodePort.
  • El NSG de backend que especifique como valor de la anotación oci.oraclecloud.com/oci-backend-network-security-group debe estar en la misma VCN que el cluster.
  • Las instancias informáticas que alojan los nodos de trabajador en el juego de backends ya deben haberse agregado al NSG de backend que especifique como valor de la anotación oci.oraclecloud.com/oci-backend-network-security-group.

Ejemplos de anotaciones de gestión de reglas de seguridad

Ejemplo 1: creación de un nuevo NSG de frontend con reglas de seguridad gestionadas y reglas de seguridad gestionadas en un NSG de backend existente

En este ejemplo:

  • Desea que el administrador de controladores oci-cloud cree un NSG frontend para un equilibrador de carga y gestione las reglas de seguridad en ese NSG.
  • Desea que oci-cloud-controller-manager utilice un NSG backend existente y gestione las reglas de seguridad en ese NSG.

Especifique "NSG" como valor de la anotación oci.oraclecloud.com/security-rule-management-mode y especifique el OCID del NSG existente como valor de la anotación 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

En este caso:

  • El gestor de controladores oci-cloud crea el NSG frontend para el equilibrador de carga y gestiona sus reglas de seguridad.
  • El oci-cloud-controller-manager gestiona las reglas de seguridad del NSG backend que tiene el OCID especificado por la anotación oci-backend-network-security-group.

Tenga en cuenta lo siguiente:

  • El NSG de backend que especifique como valor de la anotación oci.oraclecloud.com/oci-backend-network-security-group debe estar en la misma VCN que el cluster.
  • Las instancias informáticas que alojan los nodos de trabajador en el juego de backends ya deben haberse agregado al NSG de backend que especifique como valor de la anotación oci.oraclecloud.com/oci-backend-network-security-group.

Ejemplo 2: creación de un nuevo NSG de frontend con reglas de seguridad gestionadas y gestión manual de reglas de seguridad en un NSG de backend existente

En este ejemplo:

  • Desea que el administrador de controladores oci-cloud cree un NSG frontend para un equilibrador de carga y gestione las reglas de seguridad en ese NSG.
  • Desea definir reglas de seguridad manualmente para controlar el tráfico desde el front-end del equilibrador de carga hasta el backend en un NSG que cree y gestione. Por ejemplo, puede que desee crear reglas de seguridad para evitar que el tráfico se enrute del LB a los nodos de trabajador.

Especifique "NSG" como valor de la anotación 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

En este caso:

  • El gestor de controladores oci-cloud crea el NSG frontend para el equilibrador de carga y gestiona sus reglas de seguridad.
  • Es responsable de crear y gestionar reglas de seguridad en un NSG de backend para controlar el tráfico del NSG de frontend al NSG de backend.

Ejemplo 3: creación de un nuevo NSG de frontend con reglas de seguridad gestionadas y reglas de seguridad gestionadas en un NSG de backend existente (pero anotaciones utilizadas incorrectamente)

En este ejemplo:

  • Desea que el administrador de controladores oci-cloud cree un NSG frontend para un equilibrador de carga y gestione las reglas de seguridad en ese NSG.
  • Desea que oci-cloud-controller-manager utilice un NSG backend existente y gestione las reglas de seguridad en ese NSG. Sin embargo, las anotaciones se especifican incorrectamente.

Especifique correctamente "NSG" como valor de la anotación oci.oraclecloud.com/security-rule-management-mode. Sin embargo, incluye por error la anotación service.beta.kubernetes.io/oci-load-balancer-security-list-management-mode y omite la anotación 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

En este caso:

  • El gestor de controladores oci-cloud crea el NSG frontend para el equilibrador de carga y gestiona sus reglas de seguridad.
  • oci-cloud-controller-manager ignora la anotación service.beta.kubernetes.io/oci-load-balancer-security-list-management-mode (porque la anotación oci.oraclecloud.com/security-rule-management-mode está presente).
  • Es responsable de crear y gestionar reglas de seguridad en un NSG de backend para controlar el tráfico del NSG de frontend al NSG de backend (porque la anotación oci.oraclecloud.com/oci-backend-network-security-group no está presente).

Ejemplo 4: creación de un nuevo NSG de frontend con reglas de seguridad gestionadas, gestión de reglas de seguridad en un NSG de backend existente y adición del equilibrador de carga a un NSG existente

En este ejemplo:

  • Desea que el administrador de controladores oci-cloud cree un NSG frontend para un equilibrador de carga y gestione las reglas de seguridad en ese NSG.
  • Desea que oci-cloud-controller-manager utilice un NSG backend existente y gestione las reglas de seguridad en ese NSG.
  • Desea que el gestor de controladores de oci-cloud agregue el equilibrador de carga a un NSG existente que tenga reglas de seguridad que gestione.

Especifique:

  • "NSG" como valor de la anotación oci.oraclecloud.com/security-rule-management-mode.
  • OCID del NSG existente que desea que utilice oci-cloud-controller-manager, como valor de la anotación oci.oraclecloud.com/oci-backend-network-security-group.
  • OCID del NSG existente al que desea que el gestor de controladores oci-cloud agregue el equilibrador de carga.

El manifiesto es el siguiente:

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

En este caso:

  • El gestor de controladores oci-cloud crea el NSG frontend para el equilibrador de carga y gestiona sus reglas de seguridad.
  • El oci-cloud-controller-manager gestiona las reglas de seguridad del NSG backend que tiene el OCID especificado por la anotación oci.oraclecloud.com/oci-backend-network-security-group.
  • El gestor de controladores oci-cloud agrega el equilibrador de carga al NSG especificado por la anotación oci.oraclecloud.com/oci-network-security-groups.

Especificación de parámetros de comprobación del sistema

Los equilibradores de carga y los equilibradores de carga de red de Oracle Cloud Infrastructure aplican una política de comprobación del sistema para controlar continuamente los servidores backend. Una comprobación del sistema es una prueba para confirmar la disponibilidad del servidor backend y puede ser una solicitud o un intento de conexión. Si un servidor no supera la comprobación del sistema, el equilibrador de carga o el equilibrador de carga de red sacan temporalmente al servidor de la rotación. Si el servidor supera posteriormente la comprobación del sistema, el equilibrador de carga o el equilibrador de carga de red lo devuelve a la rotación.

Las políticas de comprobación del sistema incluyen varios parámetros que tienen un valor por defecto. Cuando Kubernetes Engine aprovisiona un equilibrador de carga de OCI o un equilibrador de carga de red para un servicio de Kubernetes de tipo LoadBalancer, puede sustituir los valores por defecto del parámetro de comprobación del sistema mediante la inclusión de anotaciones en la sección de metadatos del archivo de manifiesto. Posteriormente, puede agregar, modificar y suprimir esas anotaciones. Si suprime una anotación que especificó un valor para un parámetro de comprobación del sistema, el equilibrador de carga o el equilibrador de carga de red utilizará en su lugar el valor por defecto del parámetro.

Configurar parámetros de comprobación del sistema para equilibradores de carga

Para configurar parámetros de comprobación del sistema cuando Kubernetes Engine aprovisione un equilibrador de carga para un servicio de Kubernetes de tipo LoadBalancer, agregue las siguientes anotaciones en la sección de metadatos del archivo de manifiesto:

  • Para especificar cuántas solicitudes de comprobación del sistema fallidas se deben intentar antes de que se considere que un servidor backend está en mal estado, agregue la siguiente anotación en la sección de metadatos del archivo de manifiesto:

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

    donde <value> es el número de solicitudes de comprobación del sistema incorrectas.

  • Para especificar el intervalo entre las solicitudes de comprobación del sistema, agregue la siguiente anotación en la sección de metadatos del archivo de manifiesto:

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

    donde <value> es un valor numérico en milisegundos. El mínimo es 1000.

  • Para especificar el tiempo máximo de espera de una respuesta a una solicitud de comprobación del sistema, agregue la siguiente anotación en la sección de metadatos del archivo de manifiesto:

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

    donde <value> es un valor numérico en milisegundos. Una comprobación del sistema solo resulta correcta si el equilibrador de carga recibe una respuesta en este período de timeout.

Por ejemplo:


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 comprobación del sistema para equilibradores de carga de red

Para configurar parámetros de comprobación del sistema cuando Kubernetes Engine aprovisione un equilibrador de carga de red para un servicio de Kubernetes de tipo LoadBalancer, agregue las siguientes anotaciones en la sección de metadatos del archivo de manifiesto:

  • Para especificar cuántas solicitudes de comprobación del sistema fallidas se deben intentar antes de que se considere que un servidor backend está en mal estado, agregue la siguiente anotación en la sección de metadatos del archivo de manifiesto:

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

    donde <value> es el número de solicitudes de comprobación del sistema incorrectas.

  • Para especificar el intervalo entre las solicitudes de comprobación del sistema, agregue la siguiente anotación en la sección de metadatos del archivo de manifiesto:

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

    donde <value> es un valor numérico en milisegundos. El mínimo es 1000.

  • Para especificar el tiempo máximo de espera de una respuesta a una solicitud de comprobación del sistema, agregue la siguiente anotación en la sección de metadatos del archivo de manifiesto:

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

    donde <value> es un valor numérico en milisegundos. Una comprobación del sistema solo es correcta si el equilibrador de carga de red recibe una respuesta en este período de timeout.

Por ejemplo:


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

Tenga en cuenta que si no especifica explícitamente los valores de los parámetros de comprobación del sistema mediante la introducción de anotaciones en la sección de metadatos del archivo de manifiesto, se utilizan los siguientes valores por defecto:

Anotación de equilibrador de carga Anotación de equilibrador de carga de red

Valor por defecto 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 obtener más información sobre las políticas de comprobación del sistema del equilibrador de carga y el equilibrador de carga de red de Oracle Cloud Infrastructure, consulte:

Selección de nodos de trabajador para incluir en juegos de backends

El tráfico entrante a un equilibrador de carga o equilibrador de carga de red de Oracle Cloud Infrastructure se distribuye entre los servidores backend de un juego de backends. Por defecto, cuando Kubernetes Engine aprovisiona un equilibrador de carga o un equilibrador de carga de red de Oracle Cloud Infrastructure para un servicio de Kubernetes de tipo LoadBalancer, todos los nodos de trabajador del cluster se incluyen en el juego de backends.

Sin embargo, tiene la opción de seleccionar solo un subjuego de nodos de trabajador en un cluster para incluirlos en el juego de backends de un equilibrador de carga o equilibrador de carga de red determinados. La inclusión de subjuegos de nodos de trabajador de un cluster en los juegos de backends de diferentes equilibradores de carga y equilibradores de carga de red permite presentar un único cluster de Kubernetes como varios clusters lógicos (servicios).

Seleccionar nodos de trabajador para incluir en el juego de backends del equilibrador de carga

Para seleccionar los nodos de trabajador que se incluirán en el juego de backends cuando Kubernetes Engine aprovisione un equilibrador de carga para un servicio de Kubernetes de tipo LoadBalancer, agregue la siguiente anotación en la sección de metadatos del archivo de manifiesto:

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

donde <label> es una o más claves y valores de etiqueta, identificados mediante la notación de selector de etiquetas de Kubernetes estándar. Por ejemplo, lbset=set1

Por ejemplo:


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

Seleccionar nodos de trabajador para incluir en el juego de backends del equilibrador de carga de red

Para seleccionar los nodos de trabajador que se incluirán en el juego de backends cuando Kubernetes Engine aprovisione un equilibrador de carga de red para un servicio de Kubernetes de tipo LoadBalancer, agregue la siguiente anotación en la sección de metadatos del archivo de manifiesto:

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

donde <label> es una o más claves y valores de etiqueta, identificados mediante la notación de selector de etiquetas de Kubernetes estándar. Por ejemplo, lbset=set1

Por ejemplo:


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

Utilice la notación de selector de etiquetas de Kubernetes estándar para especificar las claves y los valores de etiqueta en las anotaciones de la sección de metadatos del archivo de manifiesto. Para obtener más información sobre la notación de selector de etiquetas de Kubernetes estándar, consulte Seleccionadores de etiquetas en la documentación de Kubernetes.

En la tabla se proporcionan algunos ejemplos de notación de selector de etiquetas de Kubernetes estándar.

Anotación de equilibrador de carga Anotación de equilibrador de carga de red

Incluir en el juego de backends:

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

Todos los nodos de trabajador con la clave de etiqueta lbset que tiene el 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 los nodos de trabajador con la clave de etiqueta lbset que tiene el valor set1 o set3

oci.oraclecloud.com/node-label-selector: lbset oci-network-load-balancer.oraclecloud.com/node-label-selector: lbset Todos los nodos de trabajador con la clave de etiqueta lbset, independientemente de su 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 los nodos de trabajador con la clave de etiqueta env que tiene el valor prod y con la clave de etiqueta lbset que tiene el valor set1 o el valor set3

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

Todos los nodos de trabajador con la clave de etiqueta env que no tienen el valor test

Especificación de políticas de juegos de backends

Cuando el motor de Kubernetes aprovisiona un equilibrador de carga o un equilibrador de carga de red para un servicio de Kubernetes de tipo LoadBalancer, puede definir una política para el juego de backends para especificar cómo distribuir el tráfico entrante entre los servidores backend.

Para obtener más información:

Especificación de una política de juego de backends para un equilibrador de carga

Para especificar una política para el juego de backends cuando Kubernetes Engine aprovisione un equilibrador de carga para un servicio de Kubernetes de tipo LoadBalancer, agregue la siguiente anotación en la sección de metadatos del archivo de manifiesto:

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

donde <value> es uno de:

  • "ROUND_ROBIN": enruta el tráfico entrante de forma secuencial a cada uno de los servidores de una lista de juegos de backends.
  • "LEAST_CONNECTIONS": enruta el tráfico de solicitudes entrantes al servidor backend con el menor número de conexiones activas.
  • "IP_HASH": enruta el tráfico de solicitud entrante no permanente del mismo cliente al mismo servidor backend siempre que ese servidor esté disponible, utilizando la dirección IP de origen de la solicitud entrante como clave de hashing.

Por ejemplo:


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

Tenga en cuenta que si no especifica explícitamente una política para el juego de backends, se utiliza "ROUND_ROBIN" como valor por defecto.

Especificación de una política de juego de backends para un equilibrador de carga de red

Para especificar una política para el juego de backends cuando Kubernetes Engine aprovisione un equilibrador de carga de red para un servicio de Kubernetes de tipo LoadBalancer, agregue la siguiente anotación en la sección de metadatos del archivo de manifiesto:

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

donde <value> es uno de:

  • "TWO_TUPLE": enruta el tráfico entrante según el hash de 2-tupla (IP de origen, IP de destino).
  • "THREE_TUPLE": enruta el tráfico entrante según el hash de 3-tupla (IP de origen, IP de destino, protocolo).
  • "FIVE_TUPLE": enruta el tráfico de entrada mediante el hash de 5-tupla (IP y puerto de origen, IP y puerto de destino, protocolo).

Por ejemplo:


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

Tenga en cuenta que si no especifica explícitamente una política para el juego de backends, se utiliza "FIVE_TUPLE" como valor por defecto.

Especificación de marcas de preparación de pod

Nota

Puede especificar puertas de preparación de pod para clusters con nodos virtuales, pero no para clusters con nodos gestionados.

Cuando el motor de Kubernetes aprovisiona un equilibrador de carga o un equilibrador de carga de red de Oracle Cloud Infrastructure para un servicio de Kubernetes de tipo LoadBalancer, puede utilizar una puerta de preparación de pod para garantizar que el tráfico solo se enrute a pods que se hayan agregado correctamente al juego de backends y que estén listos para recibir tráfico. Tenga en cuenta que puede especificar puertas de preparación de pod para pods que se ejecutan en nodos virtuales, pero no para pods que se ejecutan en nodos gestionados. No defina las puertas de preparación de pod para los pods que se ejecutan en nodos gestionados.

Las puertas de preparación de pods son condiciones adicionales para indicar que un pod está listo para recibir tráfico. Las puertas de preparación de pod le permiten implementar complejas comprobaciones de preparación personalizadas y pueden ayudar a lograr un tiempo de inactividad cero durante los despliegues sucesivos. Para obtener más información, consulte la sección sobre detalles sobre la preparación de los pods en la documentación de Kubernetes.

Al aprovisionar un equilibrador de carga o un equilibrador de carga de red, el juego de backends consta de las direcciones IP de las réplicas de pod de un despliegue que tienen la condición Ready. Al actualizar el despliegue (por ejemplo, para utilizar una nueva imagen), se dispara la sustitución de las réplicas de pod existentes por nuevas réplicas de pod. Sin embargo, la sustitución de todas las réplicas de pod puede llevar algún tiempo y provocar que el backend no esté disponible porque:

  • Es posible que las réplicas de pod existentes terminen antes de que el juego de backends se haya actualizado con las direcciones IP de las nuevas réplicas de pod.
  • Es posible que el juego de backends se actualice con las direcciones IP de las nuevas réplicas de pod antes de que las nuevas réplicas de pod estén listas para recibir tráfico.

La especificación del uso de una puerta de preparación de pod garantiza que los backends estén siempre disponibles para el equilibrador de carga o el equilibrador de carga de red. Los pods existentes no se terminan hasta que se hayan agregado nuevos pods al juego de backends y los nuevos pods estén listos para recibir tráfico.

Para especificar que Kubernetes Engine inyecte una puerta de preparación de pod en la especificación de pod de cada pod creado en un espacio de nombres concreto, agregue la etiqueta loadbalancer.oci.oraclecloud.com/pod-readiness-gate-inject=enabled al espacio de nombres introduciendo:

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

En el siguiente ejemplo se muestra cómo crear un equilibrador de carga con una puerta de preparación de pod.

En primer lugar, etiquete el espacio de nombres pdr para especificar la puerta de preparación de pod para el espacio de nombres, introduciendo:

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

La salida del comando confirma que el espacio de nombres se ha etiquetado:

namespace/pdr labeled

A continuación, despliegue Nginx en el espacio de nombres pdr introduciendo:

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

Muestre los pods en el espacio de nombres pdr introduciendo:

kubectl get pods -n pdr

Ahora puede demostrar el uso de la puerta de preparación de pod actualizando la versión de imagen en el manifiesto de Nginx y volviendo a aplicar el manifiesto, de modo que los pods existentes se sustituyan por nuevos pods.

Descargue el manifiesto de Nginx de https://raw.githubusercontent.com/oracle-devrel/oci-oke-virtual-nodes/main/nginx-svc/nginx.yaml y cambie la versión de la imagen a nginx:1.25.1, como se muestra:
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
...

Vuelva a aplicar el manifiesto introduciendo:

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

Observe los nuevos pods que se están desplegando introduciendo:

kubectl get pods -o wide -n pdr

Por ejemplo:

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 el estado de uno de los nuevos pods introduciendo:

kubectl describe pod <pod-name> -n pdr

Por ejemplo:

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

La salida del comando confirma el estado de la puerta de preparación podreadiness.loadbalancer.oraclecloud.com. Por ejemplo:

...
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 

Especificación de IPMode para ajustar el enrutamiento de tráfico

Cuando Kubernetes Engine aprovisiona un equilibrador de carga o un equilibrador de carga de red de Oracle Cloud Infrastructure para un servicio de Kubernetes de tipo LoadBalancer, puede especificar cómo enrutar el tráfico que se origina en un cluster a la dirección IP del equilibrador de carga o del equilibrador de carga de red.

En clusters que ejecutan la versión 1.30 o posterior de Kubernetes, la puerta de función de Kubernetes LoadBalancerIPMode está activada y el campo ipMode de un servicio de tipo LoadBalancer tiene el valor por defecto "VIP". Cuando ipMode tiene el valor "VIP", el tráfico enviado a la dirección IP de un servicio de tipo LoadBalancer desde un pod dentro del cluster se enruta directamente a los pods de aplicación para optimizar el rendimiento, omitiendo el servicio LoadBalancer. Para obtener más información, consulte Especificación de IPMode del estado del equilibrador de carga en la documentación de Kubernetes.

Sin embargo, en algunas situaciones, puede decidir que el enrutamiento del tráfico directo a los pods de la aplicación no es adecuado. Por ejemplo, si el tráfico que se origina en un cluster se enruta directamente a los pods de aplicación, no puede implantar la terminación SSL en el nivel del equilibrador de carga.

Para especificar cómo enrutar el tráfico que se envía a la dirección IP del equilibrador de carga o del equilibrador de carga de red desde el cluster, agregue la siguiente anotación en la sección de metadatos del archivo de manifiesto:

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

donde <value> es uno de:

  • "VIP": todo el tráfico que se origina en el cluster y se envía a la dirección IP de un servicio de tipo LoadBalancer se enruta directamente a los pods de la aplicación para optimizar el rendimiento, omitiendo el servicio LoadBalancer.
  • "proxy": todo el tráfico que se origina en el cluster y se envía a la dirección IP de un servicio de tipo LoadBalancer se enruta al equilibrador de carga o equilibrador de carga de red de Oracle Cloud Infrastructure que se ha aprovisionado para el servicio LoadBalancer. A continuación, el equilibrador de carga o el equilibrador de carga de red reenvía el tráfico a los pods de la aplicación.

Por ejemplo:


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

Tenga en cuenta que si no especifica la anotación oci.oraclecloud.com/ingress-ip-mode o, posteriormente, elimina la anotación, la propiedad ipMode de un servicio de tipo LoadBalancer tiene el valor por defecto "VIP".

Tenga en cuenta también que al utilizar un equilibrador de carga de red privado con la anotación oci-network-load-balancer.oraclecloud.com/is-preserve-source definida en true, el equilibrador de carga de red tiene una limitación conocida que no permite el tráfico en el que el nodo de origen y el nodo de backend de destino son el mismo nodo. Esta limitación impide la comunicación entre pods en el mismo nodo a través del equilibrador de carga de red cuando se cumplen las siguientes condiciones:

  • La anotación oci.oraclecloud.com/ingress-ip-mode está definida en proxy.
  • La anotación oci-network-load-balancer.oraclecloud.com/is-preserve-source está definida en true.
  • El equilibrador de carga de red es privado.

Especificación de Familias de Direcciones IP para Equilibradores de Carga y Equilibradores de Carga de Red

Cuando Kubernetes Engine aprovisiona un equilibrador de carga o un equilibrador de carga de red de Oracle Cloud Infrastructure para un servicio de Kubernetes de tipo LoadBalancer, la subred del equilibrador de carga determina el control que tiene sobre la familia de direcciones IP de la dirección IP en la que el equilibrador de carga o el equilibrador de carga de red recibe tráfico.

  • Si la subred es una subred de una sola pila IPv4, la subred se configura solo para direcciones IPv4. Al equilibrador de carga o equilibrador de carga de red solo se le asigna una dirección IPv4 en la que recibir tráfico externo. No puede cambiar la familia de direcciones IP de la dirección IP en la que el equilibrador de carga o el equilibrador de carga de red recibe tráfico externo.
  • Si la subred es una subred de doble pila IPv4/IPv6, la subred se configura para las direcciones IPv4 y IPv6. El equilibrador de carga o el equilibrador de carga de red se pueden asignar una dirección IPv4 o ambas, y una dirección IPv6 en la que recibir tráfico externo. En esta situación, puede utilizar los campos spec.ipFamilyPolicy y spec.ipFamilies de Kubernetes en el manifiesto de servicio para especificar si el equilibrador de carga o el equilibrador de carga de red recibe tráfico externo solo en la dirección IPv4, solo en la dirección IPv6 o en la dirección IPv4 y la dirección IPv6.

Tenga en cuenta que la familia de direcciones IP utilizada para el tráfico entre el listener y el juego de backends se determina de forma diferente para los equilibradores de carga y los equilibradores de carga de red:

  • Equilibradores de carga: el tráfico entre un listener de equilibrador de carga y el juego de backends siempre utiliza direcciones IPv4.
  • Equilibradores de carga de red: el tráfico entre un listener de equilibrador de carga de red y el juego de backends utiliza la misma familia de direcciones IP que la dirección IP en la que el listener de equilibrador de carga de red recibe tráfico externo.

En la tabla se muestra la interacción entre la familia de direcciones IP de la subred del equilibrador de carga, la configuración de spec.ipFamilyPolicy y spec.ipFamilies, la familia de direcciones IP de la que se asignan direcciones IP al equilibrador de carga o equilibrador de carga de red, y el protocolo IP entre el listener y el juego de backends. Tenga en cuenta que solo se muestran combinaciones válidas.

Familia de direcciones IP de subred ipFamilyPolicy definido en: ipFamilies definido en: Familia de direcciones IP del punto final del equilibrador de carga de red Familia de direcciones IP del equilibrador de carga Listener de equilibrador de carga de red para tráfico de juego de backends Listener de equilibrador de carga en tráfico de juego de backends
IPv4 SingleStack IPv4 IPv4 IPv4 IPv4 IPv4
IPv4/IPv6 SingleStack IPv4 IPv4 IPv4 IPv4 IPv4
IPv4/IPv6 SingleStack IPv6 IPv6 no soportado IPv6 no soportado
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(primario) y IPv6 IPv4(primario) y IPv6 IPv4(primario) y IPv6 IPv4
IPv4/IPv6 PreferDualStack IPv6 IPv6(primario) y IPv4 IPv6(primario) y IPv4 IPv6(primario) y IPv4 IPv4
IPv4/IPv6 PreferDualStack IPv4,IPv6 IPv4(primario) y IPv6 IPv4(primario) y IPv6 IPv4(primario) y IPv6 IPv4
IPv4/IPv6 PreferDualStack IPv6,IPv4 IPv6(primario) y IPv4 IPv6(primario) y IPv4 IPv6(primario) y IPv4 IPv4
IPv4/IPv6 RequireDualStack IPv4,IPv6 IPv4(primario) y IPv6 IPv4(primario) y IPv6 IPv4(primario) y IPv6 IPv4
IPv4/IPv6 RequireDualStack IPv6,IPv4 IPv6(primario) y IPv4 IPv6(primario) y IPv4 IPv6(primario) y IPv4 IPv4

Tenga en cuenta que si utiliza la anotación service.beta.kubernetes.io/oci-load-balancer-subnet1 para especificar una subred alternativa a la subred especificada para los equilibradores de carga cuando se creó el cluster, asegúrese de que la familia de direcciones de la subred alternativa sea compatible con los campos spec.ipFamilyPolicy y spec.ipFamilies del manifiesto de servicio.

Para obtener más información sobre el soporte de IPv4 y IPv6 en Kubernetes, consulte pila doble IPv4/IPv6 en la documentación de Kubernetes.

Ejemplo1:

En este ejemplo:

  • Desea utilizar la subred especificada para los equilibradores de carga al crear el cluster.
  • Solo desea desplegar el servicio de tipo LoadBalancer si se le puede asignar una dirección IPv4 y una dirección IPv6, por lo que define ipFamilyPolicy: RequireDualStack.
  • Desea que la dirección IP principal del equilibrador de carga sea una dirección IPv6 (y su dirección secundaria sea una dirección IPv4), por lo que define 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

En este ejemplo, la subred del equilibrador de carga del cluster es una subred de doble pila IPv4/IPv6, por lo que el despliegue se realiza correctamente. Al equilibrador de carga se le asigna una dirección IPv6 como dirección principal y una dirección IPv4 como dirección secundaria.

Ejemplo2:

En este ejemplo:

  • Desea alojar el servicio de tipo LoadBalancer en una subred alternativa a la especificada para los equilibradores de carga cuando se creó el cluster, por lo que utiliza la anotación service.beta.kubernetes.io/oci-load-balancer-subnet1 para especificar el OCID de la subred alternativa.
  • Desea asignar tanto las direcciones IPv4 como IPv6 al servicio de tipo LoadBalancer si el servicio está alojado en una subred IPv4/IPv6 de doble pila. De lo contrario, si el servicio está alojado en una única subred IPv4 de pila, desea que se asigne una dirección IP al servicio de esa familia de direcciones IP. Por lo tanto, defina ipFamilyPolicy: PreferDualStack.
  • Desea que la dirección IP principal del equilibrador de carga sea una dirección IPv4 (y su dirección secundaria sea una dirección IPv6, si está soportada por la subred), por lo que define 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

En este ejemplo, la subred alternativa es una subred IPv4/IPv6 de doble pila, por lo que el despliegue se realiza correctamente. Al equilibrador de carga se le asigna una dirección IPv4 como dirección principal y una dirección IPv6 como dirección secundaria.

Asignación de direcciones IPv4 y IPv6 específicas a equilibradores de carga de red

Cuando Kubernetes Engine aprovisiona un equilibrador de carga de red de Oracle Cloud Infrastructure para un servicio de Kubernetes de tipo LoadBalancer, el servicio del equilibrador de carga de red asigna una o más direcciones IP al equilibrador de carga de red.

El servicio de equilibrador de carga de red asigna una dirección IPv4 privada y, en el caso de un equilibrador de carga de red externo, también asigna una dirección IPv4 pública adicional. Si la subred del equilibrador de carga de red es compatible, el servicio de equilibrador de carga de red también puede asignar una dirección IPv6 (consulte Especificación de familias de direcciones IP para equilibradores de carga y equilibradores de carga de red).

En clusters que ejecutan Kubernetes versión 1.29 o posterior, puede especificar la dirección IP que desea asignar al equilibrador de carga de red, en lugar de que el servicio del equilibrador de carga de red seleccione la dirección IP que desea asignar. La dirección IP que puede asignar depende de la familia de direcciones IP de la subred del equilibrador de carga de red, de la siguiente manera:

  • IPv4: si la subred del equilibrador de carga de red es una subred de pila única IPv4 o una subred de pila doble IPv4/IPv6, puede asignar una dirección IPv4 privada al equilibrador de carga de red.
  • IPv4 y IPv6: si la subred del equilibrador de carga de red es una subred de pila doble IPv4/IPv6, puede asignar una dirección IPv4 privada o ambas al equilibrador de carga de red. IPv6

Para especificar una dirección IPv4 privada que asignar a un equilibrador de carga de red, agregue la siguiente anotación en la sección de metadatos del archivo de manifiesto:

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

donde <ipv4-address> es una dirección IPv4 válida, desde el bloque IPv4 CIDR especificado para la subred del equilibrador de carga de red. Por ejemplo:

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

Para especificar una dirección IPv6 que asignar a un equilibrador de carga de red, agregue la siguiente anotación en la sección de metadatos del archivo de manifiesto:

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

donde <ipv6-address> es una dirección ULA o GUA IPv6 válida, desde el bloque CIDR IPv6 especificado para la subred del equilibrador de carga de red. Por ejemplo:

  • 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 ejemplo:

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

Es su responsabilidad especificar una dirección IP válida. Para que una dirección IP sea válida, se deben cumplir las siguientes condiciones:

  • La dirección IP debe tener el formato correcto para la anotación que utilice (IPv4 o IPv6).
  • La dirección IP debe ser del bloque de CIDR adecuado especificado para la subred del equilibrador de carga de red.
  • La dirección IP no debe estar ya en uso por otro recurso.

Tenga en cuenta lo siguiente:

  • Si la dirección IP no tiene el formato correcto o no procede del bloque CIDR adecuado, no se acepta la solicitud de creación del equilibrador de carga de red.
  • Si la dirección IP tiene el formato correcto y procede del bloque CIDR adecuado, pero la dirección IP ya la está utilizando otro recurso, se acepta la solicitud de creación del equilibrador de carga de red. Sin embargo, la solicitud de trabajo asociada fallará y el compartimento contendrá un equilibrador de carga de red con estado Fallo.
  • Si la dirección IP es válida, el equilibrador de carga de red se crea con la dirección IP especificada asignada.

Ocultación de la dirección IP privada de un equilibrador de carga de red

Cuando Kubernetes Engine aprovisiona un equilibrador de carga de red público de Oracle Cloud Infrastructure para un servicio de Kubernetes de tipo LoadBalancer, el servicio Equilibrador de carga de red asigna una dirección IP pública y una dirección IP privada al equilibrador de carga de red. La dirección IP privada se utiliza para las comprobaciones del sistema y la traducción de direcciones de puerto (PAT), pero no puede recibir tráfico externo desde fuera de la VCN (incluido desde la red pública de Internet).

Para ver las direcciones IP públicas y privadas que el servicio Equilibrador de carga de red ha asignado al equilibrador de carga de red, introduzca el comando kubectl get service (o similar). Por ejemplo:

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

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

En algunas situaciones, puede que solo desee exponer la dirección IP pública del equilibrador de carga de red y ocultar la dirección IP privada. Por ejemplo:

  • Puede especificar un nombre de DNS fácil de recordar para el equilibrador de carga de red al utilizar el complemento ExternalDNS, incluyendo la anotación external-dns.alpha.kubernetes.io/hostname en el manifiesto del servicio de Kubernetes de tipo LoadBalancer. ExternalDNS crea un registro de DNS para el equilibrador de carga de red en el proveedor de DNS externo que ha configurado para el cluster. El registro DNS asigna el nombre DNS a la dirección IP pública y a la dirección IP privada. Como resultado, si el tráfico externo utiliza el nombre de DNS, existe la posibilidad de que el tráfico se enrute a la dirección IP privada del equilibrador de carga de red, aunque la dirección IP privada no pueda recibir tráfico externo.
  • Puede configurar una automatización que utilice el comando kubectl get service (o similar) para obtener la dirección IP del equilibrador de carga de red. Si el caso de uso incluye el enrutamiento de tráfico externo, solo desea la dirección IP pública del equilibrador de carga de red. Sin embargo, por defecto, el comando kubectl get service devuelve la dirección IP pública del equilibrador de carga de red y su dirección IP privada.

Para especificar que el comando kubectl get service (o similar) solo devuelve la dirección IP pública del equilibrador de carga de red, agregue la siguiente anotación en la sección de metadatos del archivo de manifiesto:

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

Tenga en cuenta que "false" es el valor por defecto de la anotación oci-network-load-balancer.oraclecloud.com/external-ip-only. Si no incluye explícitamente la anotación en la definición del servicio, el comando kubectl get service (o similar) devuelve la dirección IP pública y la dirección IP privada del equilibrador de carga de red

Por ejemplo:


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

Si incluye la anotación oci-network-load-balancer.oraclecloud.com/external-ip-only: "true" en el manifiesto, al introducir el comando kubectl get service (o similar), solo se devuelve la dirección IP pública. Por ejemplo:

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

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

Prevención de gestión del tráfico por parte de los nodos

Puede excluir nodos de trabajador concretos de la lista de servidores backend del juego de backends de un equilibrador de carga o un equilibrador de carga de red de Oracle Cloud Infrastructure. Para obtener más información, consulte node.kubernetes.io/exclude-from-external-load-balancers.

Etiqueta de equilibrador de carga y equilibrador de carga de red

Puede agregar etiquetas a un equilibrador de carga o equilibrador de carga de red que Kubernetes Engine aprovisione para un servicio de Kubernetes de tipo LoadBalancer. El etiquetado permite agrupar recursos dispares en distintos compartimentos y, además, permite anotar recursos con sus propios metadatos. Consulte Aplicación de etiquetas a equilibradores de carga.

Activación del protocolo de proxy

Cuando Kubernetes Engine aprovisiona un equilibrador de carga o un equilibrador de carga de red de Oracle Cloud Infrastructure para un servicio de Kubernetes de tipo LoadBalancer, puede especificar si desea activar la función de protocolo de proxy con listeners basados en TCP. La activación del protocolo proxy permite transportar información de conexión, como la dirección IP del cliente, de forma segura a través de varias capas de proxies hasta el servidor backend. Están disponibles las siguientes versiones de protocolo proxy:

  • Versión 1, que utiliza una cabecera basada en texto para transferir información entre proxies, y es mejor para implementaciones pequeñas.
  • Versión 2, que utiliza una cabecera binaria y basada en texto para una mayor eficiencia en la producción y el análisis, y es mejor para implementaciones más grandes.

Los equilibradores de carga aprovisionados por el motor de Kubernetes soportan la versión 1 y la versión 2 del protocolo de proxy. Los equilibradores de carga de red aprovisionados por Kubernetes Engine soportan la versión 2 del protocolo de proxy.

Para obtener más información:

Activación del protocolo de proxy para equilibradores de carga

Para activar el protocolo de proxy para equilibradores de carga aprovisionados por el motor de Kubernetes, agregue la siguiente anotación en la sección de metadatos del archivo de manifiesto:

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

donde "<value>" es uno de:

  • "1" para especificar que desea activar el protocolo de proxy versión 1 en todos los listeners del equilibrador de carga.
  • "2" para especificar que desea activar el protocolo de proxy versión 2 en todos los listeners del equilibrador de carga.

Una vez activada la función de protocolo de proxy para equilibradores de carga, tenga en cuenta lo siguiente:

  • No puede desactivar la función de protocolo de proxy en los listeners del equilibrador de carga.
  • Puede cambiar entre la versión de protocolo de proxy 1 y la versión de protocolo de proxy 2 actualizando la anotación.
  • Si posteriormente elimina la anotación del manifiesto o anula la definición de la anotación (definiendo "<value>" en ""), la última configuración aplicada correctamente para "<value>" se mantiene en todos los listeners.
Activación y desactivación del protocolo de proxy para equilibradores de carga de red

Para activar el protocolo de proxy para equilibradores de carga de red aprovisionados por el motor de Kubernetes, agregue la siguiente anotación en la sección de metadatos del archivo de manifiesto:

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

donde "<value>" es uno de:

  • "true" para especificar que desea activar el protocolo de proxy versión 2 en todos los listeners del equilibrador de carga de red.
  • "false" para especificar que desea desactivar la versión 2 del protocolo de proxy en todos los listeners del equilibrador de carga de red.

Una vez activada la función de protocolo de proxy para equilibradores de carga de red, tenga en cuenta lo siguiente:

  • Puede desactivar la función de protocolo de proxy en los listeners del equilibrador de carga de red definiendo "<value>" en "false".
  • Si posteriormente elimina la anotación del manifiesto o anula la definición de la anotación (definiendo "<value>" en "") o especifica un valor no válido (como "enable") para la anotación, la última configuración aplicada correctamente para "<value>" se mantiene en todos los listeners.