Configura espacios de nombres y objetos con alcance de espacio de nombres

En este tema, se ilustra cómo usar Anthos Config Management para administrar los espacios de nombres y objetos con permisos de espacios de nombres. También puedes leer sobre cómo configurar clústeres y objetos con alcance de clúster.

Configura un espacio de nombres

Todos los archivos de configuración de espacios de nombres y objetos con permisos de espacios de nombres se encuentran dentro del directorio namespaces/ del repositorio y sus directorios descendientes.

Sigue estos pasos para configurar un espacio de nombres llamado audit en cada clúster inscrito.

  1. En el clon local del repositorio, crea un directorio de espacio de nombres. Un directorio de espacio de nombres contiene un archivo de configuración para un espacio de nombres. El nombre del directorio del espacio de nombres debe coincidir con el nombre del espacio de nombres. En el siguiente ejemplo, el directorio se denomina namespaces/audit:

    mkdir namespaces/audit
    
  2. En el directorio de espacio de nombres, crea un archivo audit.yaml con el siguiente contenido. El metadata.name debe coincidir con el nombre del espacio de nombres (y con el nombre del directorio de espacio de nombres).

    apiVersion: v1
    kind: Namespace
    metadata:
      name: audit
    
  3. Crea una confirmación que incluya el archivo de configuración audit.yaml y envíala al repositorio remoto.

    git add namespaces/audit/audit.yaml
    git commit -m "Created audit namespace config"
    git push [NAME-OF-REMOTE] [BRANCH-NAME]
    
  4. En unos instantes, se crea el espacio de nombres audit en cada clúster inscrito. Para verificarlo, describe el espacio de nombres:

    kubectl describe namespace audit
    
  5. Para quitar el archivo de configuración y borrar el espacio de nombres audit de los clústeres inscritos, puedes crear una confirmación nueva que quite el archivo y enviarlo al repositorio remoto.

Configura un espacio de nombres abstracto

En este ejemplo, se amplía el ejemplo de Configura un espacio de nombres. Para ello, se mueve el directorio de espacio de nombres audit a un espacio de nombres abstracto que contiene archivos de configuración adicionales heredados del espacio de nombres audit.

  1. En el clon local del repositorio, crea un directorio de espacio de nombres abstracto llamado regulatory. Un directorio de espacio de nombres abstracto no contiene un archivo de configuración para un espacio de nombres, pero sí sus directorios de espacio de nombres descendientes.

    mkdir namespaces/regulatory
    
  2. En el directorio de espacio de nombres abstracto regulatory, crea un archivo de configuración para una función llamada regulator, que concede get y list a todos los recursos de cualquier espacio de nombres que herede la función.

    # namespaces/regulatory/regulator_role.yaml
    apiVersion: rbac.authorization.k8s.io/v1
    kind: Role
    metadata:
      name: regulator
    rules:
    - apiGroups: [""]
      resources: ["*"]
      verbs: ["get", "list"]
    
  3. Crea un archivo de configuración para un RoleBinding llamado regulatory-admin que vincule la función regulator al grupo regulators@example.com:

    # namespaces/regulatory/regulator_rolebinding.yaml
    kind: RoleBinding
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: regulatory-admin
    subjects:
    - kind: Group
      name: regulators@example.com
      apiGroup: rbac.authorization.k8s.io
    roleRef:
      kind: Role
      name: regulator
      apiGroup: rbac.authorization.k8s.io
    
  4. Mueve el directorio de espacio de nombres audit del directorio namespaces/ al namespaces/regulatory/:

    mv namespaces/audit/ namespaces/regulatory/
    
  5. Confirma todos los cambios y envíalos a un repositorio remoto.

El operador de Anthos Config Management detecta el cambio y aplica el Role y el RoleBinding nuevos al espacio de nombres audit en todos los clústeres inscritos.

Para quitar los archivos de configuración y borrar el espacio de nombres audit de los clústeres inscritos, puedes crear una confirmación nueva que quite todo el espacio de nombres abstracto regulatory y enviarlo al repositorio remoto.

Limita los clústeres que afecta una configuración

Por lo general, Anthos Config Management aplica una configuración a cada clúster inscrito. Si el archivo de configuración está dentro del subdirectorio namespaces/, Anthos Config Management primero crea el espacio de nombres dentro de cada clúster y, luego, aplica todos los archivos de configuración heredados en el espacio de nombres.

Para limitar los clústeres que afecta un archivo de configuración específico según las etiquetas de cada clúster, consulta Aplica archivos de configuración a un subconjunto de clústeres.

Limita los espacios de nombres que afecta un archivo de configuración

Un NamespaceSelector es un tipo de archivo de configuración especial que usa labelSelectors de Kubernetes. Puedes usar un NamespaceSelector junto con un archivo de configuración en namespaces/ para limitar los espacios de nombres que pueden heredar ese archivo de configuración.

El siguiente archivo de configuración crea un NamespaceSelector llamado sre-supported. Si otro archivo de configuración hace referencia a este NamespaceSelector, ese archivo de configuración solo se puede aplicar a los objetos en espacios de nombres que tengan la etiqueta env: prod.

kind: NamespaceSelector
apiVersion: configmanagement.gke.io/v1
metadata:
  name: sre-supported
spec:
  selector:
    matchLabels:
      env: prod

Para hacer referencia a un NamespaceSelector en un archivo de configuración, debes establecer la anotación configmanagement.gke.io/namespace-selector en el nombre del NamespaceSelector.

Un NamespaceSelector no tiene ningún efecto hasta que haces referencia a él en otro archivo de configuración. Si el NamespaceSelector sre-supported está en la misma jerarquía que el siguiente RoleBinding, sre-admin, el RoleBinding solo se creará en los espacios de nombres que tengan la etiqueta env: prod:

kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: sre-admin
  annotations:
    configmanagement.gke.io/namespace-selector: sre-supported
subjects:
- kind: Group
  name: sre@foo-corp.com
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: admin
  apiGroup: rbac.authorization.k8s.io

En resumen, usar un NamespaceSelector es un proceso de tres pasos:

  1. Agrega etiquetas a los espacios de nombres.
  2. Crea un archivo de configuración de NamespaceSelector.
  3. Haz referencia al objeto NamespaceSelector en otro archivo de configuración.

Inhabilita la herencia para un tipo de objeto

Para inhabilitar la herencia de cualquier archivo de configuración de forma selectiva, configura el campo hierarchyMode en none. Los HierarchyConfigs se almacenan en el directorio system/ del repositorio. En este ejemplo, se inhabilita la herencia para RoleBindings.

# system/hierarchy-config.yaml
kind: HierarchyConfig
apiVersion: configmanagement.gke.io/v1
metadata:
  name: rbac
spec:
  resources:
  # Configure Role to only be allowed in leaf namespaces.
  - group: rbac.authorization.k8s.io
    kinds: [ "RoleBinding" ]
    hierarchyMode: none

¿Qué sigue?