Qué es kuberc? Es tu mejor aliado para personalizar kubectl

Si día a día estás más de cinco minutos metido/a en un terminal, sabes que kubectl es tu mejor partner, pero al mismo tiempo es el culpable de que tengas el túnel carpiano "pal' gato". Por años, hemos dependido de los aliases del shell o de herramientas de terceros como kubectx y fzf para no volvernos locos. Por fin, los mantenedores de Kubernetes se compadecieron y nos tiraron un hueso con kuberc.

Introducido como una funcionalidad beta en Kubernetes 1.34, kuberc te permite definir preferencias de usuario, aliases de comandos y políticas de seguridad sin "dejar la crema" en tu kubeconfig con datos que no son del clúster. Básicamente, es una forma de decirle a kubectl cómo comportarse antes de que te entre lag mental y borres un namespace de producción por andar tipeando muy rápido.

¿dónde vive este archivo kuberc?

Por defecto, kubectl busca su "personalidad" en las siguientes rutas:

  • Linux / macOS: $HOME/.kube/kuberc
  • Windows: %USERPROFILE%\.kube\kuberc

Si eres de esos que les gusta guardar sus archivos de configuración en lugares raros, como quién escribe, que tiene una obsesión con sus dotfiles sólo para sentirnos diferentes, puedes sobrescribir esto usando el flag --kuberc o seteando la variable de entorno KUBERC.

aliases: ahorrándole movimientos a tus dedos por el exceso de yaml

La sección de aliases es donde puedes crear atajos para los comandos que más utilizas. A diferencia de los aliases del shell (como el típico alias k=kubectl), estos están integrados directamente en la lógica de ejecución de kubectl.

estructura básica de un alias

Por ejemplo, convierte kubectl getn en una metralleta JSON:

apiVersion: kubectl.config.k8s.io/v1beta1
kind: Preference
aliases:
- name: getn
  command: get
  options:
   - name: output
     default: json

En este escenario, ejecutar kubectl getn pods es lo mismo que tirar un kubectl get pods -o json. Si de repente te baja lo masoquista y quieres un YAML, correr kubectl getn pods -o yaml va a mandar "a la punta del cerro" el valor por defecto y te dará el YAML.

anteponiendo y agregando argumentos

A veces un simple flag no basta. Puede que quieras inyectar argumentos específicos en el flujo del comando.

  • prependArgs: Inserta argumentos justo después del subcomando.
  • appendArgs: Los arroja al final.
apiVersion: kubectl.config.k8s.io/v1beta1
kind: Preference
aliases:
  - name: run-busy
    command: run
    options:
      - name: image
        default: busybox
    appendArgs:
      - --
      - /bin/sh

Ejecutar kubectl run-busy my-pod se traduciría en kubectl run my-pod --image busybox -- /bin/sh. Es como si por fin la CLI te estuviera ayudando de verdad.

defaults: para que no hagas explotar el cluster por un error

La sección defaults te permite cambiar el comportamiento global de los comandos estándar de kubectl. Esto está "de pana" para los que "accidentalmente" hemos borrado recursos por andar con exceso de cafeína en el cuerpo.

apiVersion: kubectl.config.k8s.io/v1beta1
kind: Preference
defaults:
- command: delete
  options:
    - name: interactive
      default: "true"

Con esto configurado, kubectl delete pod/oopsie te va a preguntar si de verdad estás seguro. Es un costo mínimo para evitar una reunión de post-mortem de emergencia con el jefe soplándote la nuca.

política de plugins de credenciales

ESTADO DE LA FUNCIONALIDAD: Kubernetes v1.35 [beta]

La seguridad suele ser la parte donde todos se quedan dormidos o pasan de largo, pero ojo acá: kuberc ahora te permite controlar qué plugins de credenciales exec tienen permiso para correr. Esto evita que un kubeconfig malicioso ejecute binarios arbitrarios en tu máquina; un truco interesante para pentesters, pero una crucificción garantizada para ti.

tipos de políticas

  1. AllowAll: El "viva la fiesta". Pasa cualquier cosa. Es el comportamiento por defecto en versiones viejas.
  2. DenyAll: El modo paranoico. No se permite ningún plugin. Súper seguro, pero no te vas a poder conectar ni a palos a EKS, GKE o AKS.
  3. Allowlist: El camino sensato. Tú defines exactamente en qué binarios confiar.

implementando una lista blanca (allowlist)

Si eliges Allowlist, tienes que poner el nombre de los binarios explícitamente:

apiVersion: kubectl.config.k8s.io/v1beta1
kind: Preference
credentialPluginPolicy: Allowlist
credentialPluginAllowlist:
  - name: aws-iam-authenticator
  - name: /usr/local/bin/gke-gcloud-auth-plugin

Ojo que los symlinks no se resuelven por razones de seguridad. Si apuntas a un symlink, la lista va a chequear la ruta del link, no el destino final.

configuraciones sugeridas (las "sanas")

Los mantenedores sugieren una configuración que priorice la seguridad y el uso de APIs modernas. Si todavía no utilizas Server-Side Apply, estái obsoleto, hermano!.

apiVersion: kubectl.config.k8s.io/v1beta1
kind: Preference
defaults:
  - command: apply
    options:
      - name: server-side
        default: "true"
  - command: delete
    options:
      - name: interactive
        default: "true"
credentialPluginPolicy: Allowlist
credentialPluginAllowlist:
  - name: mi-auth-handler-de-confianza

cómo desactivar kuberc?

Si tus aliases empiezan a comportarse como una IA con crisis existencial, puedes desactivar kuberc temporalmente seteando una variable de entorno:

export KUBERC=off
# O TAMBIÉN
export KUBECTL_KUBERC=false

Esto se salta el archivo de preferencias y devuelve kubectl a su estado original: verboso, "latero" y un poquito hinchapelotas.

referencias

Fuente: kubernetes.io

Kubectl user preferences (kuberc)
FEATURE STATE: Kubernetes 1.34 [beta] A Kubernetes kuberc configuration file allows you to define preferences for kubectl, such as default options and command aliases. Unlike the kubeconfig file, a kuberc configuration file does not contain cluster details, usernames or passwords. On Linux / POSIX computers, the default location of this configuration file is $HOME/.kube/kuberc. The default path on Windows is similar: %USERPROFILE%\.kube\kuberc. To provide kubectl with a path to a custom kuberc file, use the --kuberc command line option, or set the KUBERC environment variable.

Más contenido:

Nicolás Georger Nicolás Georger Ver más contenido por Nicolás Georger Self-taught IT professional driving innovation & social impact with cybernetics, open source (Linux, Kubernetes), AI & ML.