apiVersion: apps/v1
kind: Deployment
metadata:
  name: vollcrypt-shield-admission
  namespace: vollcrypt-shield-system
spec:
  replicas: 1
  selector:
    matchLabels:
      app: vollcrypt-shield-admission
  template:
    metadata:
      labels:
        app: vollcrypt-shield-admission
    spec:
      securityContext:
        fsGroup: 65532
        seccompProfile:
          type: RuntimeDefault
      containers:
        - name: admission
          image: "REPLACE_WITH_DIGEST_PINNED_SHIELD_IMAGE"
          args:
            - serve-admission
            - --state-dir
            - /state
            - --listen
            - 0.0.0.0:8443
            - --tls-cert
            - /tls/tls.crt
            - --tls-key
            - /tls/tls.key
          ports:
            - name: https
              containerPort: 8443
          readinessProbe:
            httpGet:
              scheme: HTTPS
              path: /healthz
              port: https
          securityContext:
            allowPrivilegeEscalation: false
            capabilities:
              drop: ["ALL"]
            readOnlyRootFilesystem: true
            runAsNonRoot: true
            runAsUser: 65532
          volumeMounts:
            - name: admission-state
              mountPath: /state
            - name: webhook-tls
              mountPath: /tls/tls.crt
              subPath: tls.crt
              readOnly: true
            - name: webhook-tls
              mountPath: /tls/tls.key
              subPath: tls.key
              readOnly: true
      volumes:
        - name: admission-state
          persistentVolumeClaim:
            claimName: REPLACE_WITH_ADMISSION_STATE_PVC
        - name: webhook-tls
          secret:
            secretName: vollcrypt-shield-admission-tls
            defaultMode: 0440
---
apiVersion: v1
kind: Service
metadata:
  name: vollcrypt-shield-admission
  namespace: vollcrypt-shield-system
spec:
  selector:
    app: vollcrypt-shield-admission
  ports:
    - name: https
      port: 443
      targetPort: https
---
apiVersion: admissionregistration.k8s.io/v1
kind: ValidatingWebhookConfiguration
metadata:
  name: vollcrypt-shield-images
webhooks:
  - name: images.shield.vollcrypt.io
    admissionReviewVersions: ["v1"]
    sideEffects: None
    failurePolicy: Fail
    matchPolicy: Equivalent
    timeoutSeconds: 3
    namespaceSelector:
      matchLabels:
        vollcrypt.io/shield-admission: enabled
    clientConfig:
      service:
        namespace: vollcrypt-shield-system
        name: vollcrypt-shield-admission
        path: /validate
        port: 443
      caBundle: REPLACE_WITH_BASE64_CA_CERTIFICATE
    rules:
      - apiGroups: [""]
        apiVersions: ["v1"]
        operations: ["CREATE", "UPDATE"]
        resources: ["pods"]
        scope: Namespaced
