Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Abrazando el cambio: Gobierno de Kubernetes como código con OPA y Gatekeeper

Ara
June 14, 2021

Abrazando el cambio: Gobierno de Kubernetes como código con OPA y Gatekeeper

Talk given at Kubernetes Community Days Spain 2021 - In Spanish

Ara

June 14, 2021
Tweet

More Decks by Ara

Other Decks in Programming

Transcript

  1. Kubernetes es una plataforma de orquestación de contenedores que ayuda

    a ejecutar aplicaciones contenerizadas en producción
  2. Datadog es una plataforma de monitorización y analíticas que ayuda

    a mejorar la observabilidad de infraestructura y aplicaciones
  3. RBAC Sujeto Recurso de la API de Kubernetes Verbo user:ara

    apiVersion:v1/core kind:Pod create get watch
  4. ¿Puedo ejecutar una imagen descargada de un repositorio externo? ¿Tiene

    mi pod todas las etiquetas (labels) que exige mi organización?
  5. ConstraintTemplate apiVersion: templates.gatekeeper.sh/v1beta1 kind: ConstraintTemplate metadata: name: k8srequiredlabels spec: crd:

    spec: names: kind: K8sRequiredLabels validation: # Schema for the `parameters` field openAPIV3Schema: properties: labels: type: array items: string targets: targets: - target: admission.k8s.gatekeeper.sh rego: | package k8srequiredlabels violation[{"msg": msg, "details": {"missing_labels": missing}}] { provided := {label | input.review.object.metadata.labels[label]} required := {label | label := input.parameters.labels[_]} missing := required - provided count(missing) > 0 msg := sprintf("you must provide labels: %v", [missing]) }
  6. Constraints apiVersion: constraints.gatekeeper.sh/v1beta1 kind: K8sRequiredLabels metadata: name: ns-must-have-gk spec: match:

    kinds: - apiGroups: [""] kinds: ["Namespace"] parameters: labels: ["gatekeeper"] apiVersion: constraints.gatekeeper.sh/v1beta1 kind: K8sRequiredLabels metadata: name: pod-required-labels spec: match: namespace: "default" kinds: - apiGroups: [""] kinds: ["Pod"] parameters: labels: ["do-not-delete"]
  7. Gatekeeper facilita la reutilización de políticas Las imágenes solo pueden

    venir de repositorios conocidos Los Deployments tienen que tener una serie de etiquetas
  8. Gatekeeper facilita la reutilización de políticas Las imágenes solo pueden

    venir de repositorios conocidos Los Deployments tienen que tener una serie de etiquetas Las imágenes requieren un digest
  9. Gatekeeper facilita la reutilización de políticas Las imágenes solo pueden

    venir de repositorios conocidos Los Deployments tienen que tener una serie de etiquetas Las imágenes requieren un digest Los contenedores tienen que establecer límites para CPU y memoria dentro de unos valores
  10. Métricas por defecto ConstraintTemplates, Constraints (gauge) 35 Webhook: #requests (count)

    and latency (histogram) Audit: #violations (count) and time last run (gauge) Sync: # resources cached (count) and time last run (gauge)
  11. apiVersion: config.gatekeeper.sh/v1alpha1 kind: Config metadata: name: config namespace: "gatekeeper-system" spec:

    sync: syncOnly: - group: "extensions" version: "v1beta1" kind: "Ingress" - group: "networking.k8s.io" version: "v1beta1" kind: "Ingress" Policy Data El host tiene que ser único para todos los objetos Ingress