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

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

Creación de equilibradores de carga internos

Puede crear equilibradores de carga de Oracle Cloud Infrastructure y equilibradores de carga de red 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 Load Balancer o el servicio Network Load Balancer)
  • 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, Container Engine for Kubernetes 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 efímera. Sin embargo, una dirección IP pública de corta duración es temporal y solo dura la vida útil del equilibrador de carga público o el equilibrador de carga de red.

Si desea que el equilibrador de carga público o el equilibrador de carga de red de Oracle Cloud Infrastructure que crea Container Engine for Kubernetes tenga el mismo despliegue de dirección IP pública después del despliegue, puede asignarle una dirección IP pública reservada del pool 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 Container Engine for Kubernetes, 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 directamente la dirección IP del equilibrador de carga público o el equilibrador de carga de red de Oracle Cloud Infrastructure que crea Container Engine for Kubernetes. 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 directamente la dirección IP del equilibrador de carga público o el equilibrador de carga de red de Oracle Cloud Infrastructure que crea Container Engine for Kubernetes de 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 dentro y fuera de los recursos, y entre 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 NSG para controlar el acceso al equilibrador de carga de Oracle Cloud Infrastructure o al equilibrador de carga de red que Container Engine for Kubernetes aprovisiona 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 Container Engine for Kubernetes 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 Container Engine for Kubernetes 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 de Oracle Cloud Infrastructure o el equilibrador de carga de red.
  • 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 de Oracle Cloud Infrastructure o un equilibrador de carga de red 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 los 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 del cluster) gestione algunas o todas las reglas de seguridad. Container Engine for Kubernetes utiliza el gestor de controladores oci-cloud 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 principales 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 API o la CLI 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 de Oracle Cloud Infrastructure y los equilibradores de carga de red aplican una política de comprobación del sistema para supervisar 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 devuelven a la rotación.

Las políticas de comprobación del sistema incluyen varios parámetros que tienen un valor por defecto. Cuando Container Engine for Kubernetes 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 eliminar 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án en su lugar el valor por defecto del parámetro.

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

Para configurar los parámetros de comprobación del sistema cuando Container Engine for Kubernetes 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 los parámetros de comprobación del sistema cuando Container Engine for Kubernetes 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 de red y el equilibrador de carga 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 Container Engine for Kubernetes aprovisiona un equilibrador de carga de Oracle Cloud Infrastructure o un equilibrador de carga de red 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 van a incluir en el juego de backends cuando Container Engine for Kubernetes 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 van a incluir en el juego de backends cuando Container Engine for Kubernetes 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 Selectores 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 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 Container Engine for 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 pods para pods que se ejecutan en nodos virtuales, pero no para pods que se ejecutan en nodos gestionados. No defina puertas de preparación de pods para pods que se ejecutan en nodos gestionados.

Las puertas de preparación de pod son condiciones adicionales para indicar que un pod está listo para recibir tráfico. Las puertas de preparación de pod permiten implantar comprobaciones de preparación personalizadas complejas y pueden ayudar a lograr un tiempo de inactividad cero durante los despliegues sucesivos. Para obtener más información, consulte Detalles de preparación de 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 Container Engine for Kubernetes debe inyectar 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 a continuación:
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 

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

Puede excluir nodos de trabajador concretos de la lista de servidores de backend en el juego de backends de un equilibrador de carga de Oracle Cloud Infrastructure o un equilibrador de carga de red. 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 Container Engine for Kubernetes aprovisiona para un servicio de Kubernetes de tipo LoadBalancer. El etiquetado permite agrupar recursos diversos en compartimentos y, además, permite anotar recursos con sus propios metadatos. Consulte Aplicación de etiquetas a equilibradores de carga.