¿Cómo puedo evitar que las reglas del grupo de seguridad, los agentes de escucha u otros cambios se reviertan en un equilibrador de carga de Amazon EKS?
Cuando intento hacer cambios en mi equilibrador de carga para Amazon Elastic Kubernetes Service (Amazon EKS), los cambios se revierten automáticamente.
Breve descripción
Cuando usa AWS Load Balancer Controller para crear un servicio de equilibrado de carga o un recurso de entrada, el controlador configura muchos parámetros predeterminados. Esto incluye cualquier parámetro que no especifique en el archivo de manifiesto, como una ruta de comprobación de estado, el tiempo de espera predeterminado o las reglas del grupo de seguridad.
Sin embargo, puede utilizar una llamada a la API de AWS para cambiar directamente la configuración predeterminada. Puede hacer esta llamada a la API desde la consola de Amazon Elastic Compute Cloud (Amazon EC2), la interfaz de la línea de comandos de AWS (AWS CLI) u otra herramienta de terceros. En este caso, el controlador revierte estos cambios a sus valores originales durante la siguiente conciliación del clúster. Para obtener más información, consulte Controllers and Reconciliation en el sitio web de la API de clúster de Kubernetes.
Los siguientes problemas suelen producirse debido a los cambios revertidos del equilibrador de carga en Amazon EKS:
- Las reglas de grupo de seguridad personalizadas del equilibrador de carga vuelven automáticamente a 0.0.0.0/0 o desaparecen.
- El equilibrador de carga elimina o agrega automáticamente las reglas del agente de escucha.
- Los valores de tiempo de espera de inactividad personalizados vuelven automáticamente a los valores predeterminados.
- El certificado vuelve automáticamente a la versión anterior.
- No puede actualizar la ruta de comprobación de estado porque Amazon EKS ha revertido sus valores.
- Amazon EKS modifica los roles mediante las propiedades del equilibrador de carga.
Para solucionar estos problemas, primero determine qué provocó que el equilibrador de carga hiciera estos cambios. Concretamente, busque la llamada a la API correspondiente para el recurso modificado y la herramienta que hizo la llamada. A continuación, implemente los cambios en el archivo de manifiesto.
Nota: En la siguiente resolución, un "equilibrador de carga" hace referencia a un servicio de equilibrado de carga, como el equilibrador de carga de red o el equilibrador de carga clásico. O bien, un equilibrador de carga puede ser un recurso de entrada, como el equilibrador de carga de aplicación.
Resolución
Para definir el estado esperado de un equilibrador de carga, tiene que especificar los cambios en las anotaciones del archivo de manifiesto. De lo contrario, las anotaciones obligan a los cambios a volver a los valores predeterminados sin cambios.
Si intenta usar una llamada a la API de AWS para cambiar directamente estos valores, el controlador considerará que se trata de un cambio fuera de banda. Durante la siguiente conciliación, el controlador revierte los cambios a sus valores originales para sincronizarlos con la configuración del manifiesto de servicio de Kubernetes. Según el atributo que revierta el controlador, esto podría provocar un tiempo de inactividad prolongado del servicio.
AWS Load Balancer Controller utiliza varias rutas lógicas para la conciliación. Los siguientes escenarios pueden provocar el reinicio de los pods aws-load-balancer-controller:
- Una actualización del plano de control, el nodo de trabajo o la plataforma.
- Una actualización de instancias debido a problemas subyacentes, como un fallo de hardware o problemas de estado.
- Cualquier actividad que dé como resultado una llamada a la API de actualización, eliminación o parche en los pods del controlador.
- Una conciliación automática y periódica.
Nota: De forma predeterminada, el período de conciliación del controlador es de 1 hora. Sin embargo, esta función no funciona en las versiones 2.4.7 y anteriores de Amazon EKS.
En estos casos, AWS Load Balancer Controller inicia la conciliación y su equilibrador de carga toma como referencia la configuración del archivo de manifiesto más reciente. Si anteriormente hizo algún cambio en el equilibrador de carga mediante una llamada a la API, esos cambios se revertirán.
Identificación del origen de los cambios
Busque la llamada a la API relacionada con el recurso actualizado. Busque en AWS CloudTrail el período de tiempo en el que se produjeron los cambios. Para ver todas las llamadas a la API de AWS Load Balancer, consulte la referencia de la API de Elastic Load Balancing (ELB). Para las llamadas a la API de Amazon EC2, consulte la referencia de la API de Amazon EC2.
Por ejemplo, si el controlador revierte las reglas de SecurityGroup, verá que se invoca a la API RevokeSecurityGroupIngress. A continuación, puede utilizar el evento de CloudTrail correspondiente para identificar al usuario de la API. Si el controlador usa los roles WorkerNode, verá el rol de nodo que hizo la llamada a la API:
.... "type": "AssumedRole", "arn": "arn:aws:sts::***********:assumed-role/eksctl-mycluster-NodeInstanceRole/i-***********", "sessionContext": { "sessionIssuer": { "type": "Role", "arn": "arn:aws:iam::***********:role/eksctl-mycluster-nodegr-NodeInstanceRole", "userName": "eksctl-mycluster-nodegr-NodeInstanceRole" }, ... eventName ": " RevokeSecurityGroupIngress ", "userAgent": "elbv2.k8s.aws/v2.4.5 aws-sdk-go/1.42.27 (go1.19.3; linux; amd64)", "requestParameters": { "groupId": "sg-****", "ipPermissions": { "items": [{ "ipProtocol": "tcp", "fromPort": 443, "toPort": 443, "groups": {}, "ipRanges": { "items": [{ "cidrIp": "0.0.0.0/0" }] }]
Si usa roles dedicados para AWS Load Balancer Controller, verá el rol AWS Identity and Access Management (AWS IAM) de la cuenta de servicio.
Evitar cambios no deseados
No haga cambios fuera de banda en ningún parámetro de su equilibrador de carga. Esto incluye los cambios de la consola de Amazon EC2, la AWS CLI o cualquier herramienta que llame directamente a las API de AWS.
Por ejemplo, desea actualizar las reglas del grupo de seguridad. Use las anotaciones .spec.loadBalancerSourceRanges o service.beta.kubernetes.io/load-balancer-source-ranges. Puede usar estas anotaciones para restringir las direcciones IP de CIDR de un equilibrador de carga. Para obtener más información sobre estas anotaciones, consulte Access control en el sitio web de GitHub de AWS Load Balancer Controller.
Use únicamente las anotaciones adecuadas en el archivo de manifiesto para actualizar los valores de tiempo de espera, las rutas de comprobación de estado, los ARN de los certificados y otras propiedades. Para ver todas las anotaciones de servicio y entrada compatibles, consulte Service annotations e Ingress annotations en el sitio web de GitHub de AWS Load Balancer Controller.
Contenido relevante
- OFICIAL DE AWSActualizada hace 8 meses
- OFICIAL DE AWSActualizada hace un año
- OFICIAL DE AWSActualizada hace 8 meses