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:
- acerca de los equilibradores de carga públicos y privados de Oracle Cloud Infrastructure. Consulte Tipos de equilibrador de carga.
- acerca de los equilibradores de carga de red públicos y privados de Oracle Cloud Infrastructure, consulte Tipos de equilibradores de carga de red
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
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.
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
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 servicioLoadBalancer
, 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 servicioLoadBalancer
, especifique una dirección IP pública reservada diferente en el archivo de manifiesto y vuelva a desplegar el servicioLoadBalancer
. - Si no define la propiedad
loadBalancerIP
del servicioLoadBalancer
, 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 propiedadloadBalancerIP
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ónservice.beta.kubernetes.io/oci-load-balancer-internal: "true"
ooci-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'}
- para equilibradores de carga públicos, agregue la siguiente política al arrendamiento:
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:
- Puede tener los NSG y las reglas de seguridad totalmente gestionados por el gestor de controladores de oci-cloud (consulte Especificación de opciones de gestión de reglas de seguridad para equilibradores de carga y equilibradores de carga de red).
- Puede gestionar los NSG y las reglas de seguridad usted mismo y agregar el equilibrador de carga o el equilibrador de carga de red a los NSG existentes (como se describe en esta sección).
- Puede hacer que oci-cloud-controller-manager gestione algunas reglas de seguridad en un NSG, mientras que usted gestiona otras reglas de seguridad en un NSG diferente.
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.
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
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.
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:
-
Para gestionar reglas de seguridad en un NSG, utilice la anotación
oci.oraclecloud.com/security-rule-management-mode: "NSG"
(recomendado).Si desea que oci-cloud-controller-manager gestione reglas de seguridad en un NSG (como recomienda Oracle), debe utilizar la anotación
oci.oraclecloud.com/security-rule-management-mode: "NSG"
. Para obtener más información sobre el uso de esta anotación, consulte Uso de la anotación oci.oraclecloud.com/security-rule-management-mode para gestionar reglas de seguridad en NSG y listas de seguridad. -
Para gestionar reglas de seguridad en una lista de seguridad, utilice la anotación
oci.oraclecloud.com/security-rule-management-mode
o las anotacionesservice.beta.kubernetes.io/oci-load-balancer-security-list-management-mode
yoci-network-load-balancer.oraclecloud.com/security-list-management-mode
.Si desea que oci-cloud-controller-manager gestione reglas de seguridad en la lista de seguridad de un equilibrador de carga o subred de un equilibrador de carga de red, realice una de las siguientes acciones:
- Utilice la anotación
oci.oraclecloud.com/security-rule-management-mode
, definida en"SL-All"
o"SL-Frontend"
. Para obtener más información sobre el uso de esta anotación, consulte Uso de la anotación oci.oraclecloud.com/security-rule-management-mode para gestionar reglas de seguridad en NSG y listas de seguridad. - Utilice las anotaciones
service.beta.kubernetes.io/oci-load-balancer-security-list-management-mode
yoci-network-load-balancer.oraclecloud.com/security-list-management-mode
, respectivamente, definidas en"All"
o"Frontend"
. Para obtener más información sobre el uso de estas dos anotaciones, consulte Especificación de opciones de gestión de lista de seguridad al aprovisionar un equilibrador de carga de OCI y Especificación de opciones de gestión de lista de seguridad al aprovisionar un equilibrador de carga de red de OCI, respectivamente.
- Utilice la anotación
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 definirservice.beta.kubernetes.io/oci-load-balancer-security-list-management-mode
ooci-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 definirservice.beta.kubernetes.io/oci-load-balancer-security-list-management-mode
ooci-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 definirservice.beta.kubernetes.io/oci-load-balancer-security-list-management-mode
ooci-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 anotacionesservice.beta.kubernetes.io/oci-load-balancer-security-list-management-mode
ooci-network-load-balancer.oraclecloud.com/security-list-management-mode
en el manifiesto, oci-cloud-controller-manager siempre utilizaoci.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ónexternalTrafficPolicy
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 porloadBalancerSourceRanges
en el manifiesto de servicio LoadBalancer. Tenga en cuenta que siloadBalancerSourceRanges
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 pornodePort
. - 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ónoci.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ónoci.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.
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
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).
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
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 |
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 |
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 |
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 |
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:
- Acerca de los equilibradores de carga y las políticas de juegos de backends, consulte Políticas de equilibrador de carga.
- Acerca de los equilibradores de carga de red y las políticas del juego de backends, consulte Políticas del equilibrador de carga de red
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.
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
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.
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 enproxy
. - La anotación
oci-network-load-balancer.oraclecloud.com/is-preserve-source
está definida entrue
. - 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
yspec.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 comandokubectl 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:
- Acerca de los equilibradores de carga y la función de protocolo de proxy, consulte Protocolo de proxy para equilibradores de carga.
- Acerca de los equilibradores de carga de red y la función de protocolo de proxy, consulte Protocolo de proxy para equilibradores de carga de red.
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.
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.