Gestionar campos externamente


Cuando Config Connector crea un recurso en Google Cloud, los campos que no se especifican en la especificación adoptan valores de la API, a menos que no se puedan leer (por ejemplo, que no estén disponibles mediante una solicitud HTTP GET).

En este caso, el campo se considera "gestionado externamente", ya que Kubernetes no es la fuente de información fiable de este valor.

Comportamiento con la aplicación del lado del servidor

Si la opción Aplicar en el servidor está habilitada en el recurso, los valores de los campos gestionados externamente del objeto se actualizan continuamente para que coincidan con el recurso Google Cloudsubyacente.

Si se incluye un valor en un campo de la especificación en la configuración aplicada, el campo no se gestiona externamente.

Si se elimina el campo, se gestionará de forma externa.

Comportamiento sin la aplicación del lado del servidor

Si la aplicación del lado del servidor no está habilitada, los campos no especificados de la especificación de recursos se rellenan con el valor leído de la API Google Cloud y Config Connector aplica esos valores rellenados inicialmente.

Por ejemplo, si el usuario aplica una configuración de recursos sin definir un valor para bar en la especificación:

spec:
    foo: "foo"

Si el valor del campo bar es baz en la API Google Cloud , el recurso de api-server se rellena con ese valor:

# object in the api-server
spec:
    foo: "foo"
    bar: "baz"  # populated by first reconciliation

Si el Google Cloud recurso se modifica directamente de forma que bar ahora es baz-2, la Google Cloud API se corrige al valor que se introdujo inicialmente en la especificación del recurso: baz:

# object in the api-server
spec:
    foo: "foo"
    bar: "baz"  # still the originally populated value, and overrides the Google Cloud value

Comportamiento de los campos de lista en la especificación de recursos

Debido a una limitación técnica de Config Connector, los campos de lista de la configuración de tu recurso no se pueden gestionar de forma externa de forma predeterminada. Esto significa que Config Connector siempre toma la propiedad de los campos de lista en la especificación de recursos, incluso cuando el campo no se especifica en la configuración de recursos original.

Cuando se aplica una especificación de recursos, Config Connector lee el valor de los campos de lista de la API Google Cloud y trata este valor inicial como fuente de información veraz y estado deseado. Si el valor de ese campo de lista se modifica fuera de Config Connector, Config Connector intenta volver a cambiarlo, lo que puede que no sea lo que quieres.

Para evitar esta limitación y permitir que los campos de lista se gestionen externamente, usa la anotación cnrm.cloud.google.com/state-into-spec. Esta anotación no se admite en todos los recursos. Para ver si tu recurso admite la anotación, consulta la página de referencia del recurso correspondiente.

metadata:
  annotations:
    cnrm.cloud.google.com/state-into-spec: absent

Si asignas el valor absent a state-into-spec, Config Connector ignorará los campos de lista si no se especifican en la configuración de tu recurso. De esta forma, los campos de lista del recurso se gestionarán de forma externa.

Advertencias

Los campos que gestiona Config Connector y que actualizan automáticamente los servicios externos pueden provocar actualizaciones infinitas en la API subyacente. Esto puede ocurrir si la API subyacente tiene campos de autoescalado o actualización automática. Asegúrate de que estos campos se traten como gestionados externamente habilitando la aplicación del lado del servidor para el recurso y dejando el campo fuera del archivo de configuración al aplicar.