How to properly configure HostIPC and HostPID in a Kubernetes cronjob?

Viewed 266

I'm using Google Cloud Build to CI/CD my application, which rely on multiple cronjobs. The first step of my build is like:

  # validate k8s manifests
  - id: validate-k8s
    name: quay.io/fairwinds/polaris:1.2.1
    entrypoint: polaris
    args:
      - audit
      - --audit-path
      - ./devops/k8s/cronjobs/worker-foo.yaml
      - --set-exit-code-on-danger
      - --set-exit-code-below-score
      - "87"

I'm using Polaris to enforce best security practices. For each cronjob, I have a deployment manifest that is like:

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: worker-foo
  namespace: foo
spec:
  schedule: "30 1-5,20-23 * * *"
  concurrencyPolicy: Forbid
  jobTemplate:
    spec:
      backoffLimit: 3
      template:
        spec:
          hostIPC: false
          hostPID: false
          hostNetwork: false
          volumes:
            - name: foo-sa
              secret:
                secretName: foo-sa
            - name: foo-secrets
              secret:
                secretName: foo-secrets
            - name: tmp-pod
              emptyDir: {}
          restartPolicy: OnFailure
          containers:
          - name: worker-foo
            image: gcr.io/bar/foo:latest
            imagePullPolicy: "Always"
            resources:
              requests:
                memory: "512M"
                cpu: "50m"
              limits:
                memory: "6000M"
                cpu: "500m"
            volumeMounts:
            - name: foo-sa
              mountPath: /var/secrets/foo-sa
            - mountPath: /tmp/pod
              name: tmp-pod
            command: ["/bin/bash", "-c"]
            args:
              - |
                timeout --kill-after=10500 10500 python foo/foo/foo.py --prod;

I found here that the hierarchy of HostIPC parameter in manifest file is “spec.jobTemplate.spec.template.spec.HostIPC”, but it does not seem to conform Polaris validation:

Step #0 - "validate-k8s":   "Results": [
Step #0 - "validate-k8s":     {
Step #0 - "validate-k8s":       "Name": "worker-foo",
Step #0 - "validate-k8s":       "Namespace": "foo",
Step #0 - "validate-k8s":       "Kind": "CronJob",
Step #0 - "validate-k8s":       "Results": {},
Step #0 - "validate-k8s":       "PodResult": {
Step #0 - "validate-k8s":         "Name": "",
Step #0 - "validate-k8s":         "Results": {
Step #0 - "validate-k8s":           "hostIPCSet": {
Step #0 - "validate-k8s":             "ID": "hostIPCSet",
Step #0 - "validate-k8s":             "Message": "Host IPC is not configured",
Step #0 - "validate-k8s":             "Success": true,
Step #0 - "validate-k8s":             "Severity": "danger",
Step #0 - "validate-k8s":             "Category": "Security"
Step #0 - "validate-k8s":           },
Step #0 - "validate-k8s":           "hostNetworkSet": {
Step #0 - "validate-k8s":             "ID": "hostNetworkSet",
Step #0 - "validate-k8s":             "Message": "Host network is not configured",
Step #0 - "validate-k8s":             "Success": true,
Step #0 - "validate-k8s":             "Severity": "warning",
Step #0 - "validate-k8s":             "Category": "Networking"
Step #0 - "validate-k8s":           },
Step #0 - "validate-k8s":           "hostPIDSet": {
Step #0 - "validate-k8s":             "ID": "hostPIDSet",
Step #0 - "validate-k8s":             "Message": "Host PID is not configured",
Step #0 - "validate-k8s":             "Success": true,
Step #0 - "validate-k8s":             "Severity": "danger",
Step #0 - "validate-k8s":             "Category": "Security"
Step #0 - "validate-k8s":           }
Step #0 - "validate-k8s":         },

What I'm missing here? How should I declare HostIPC and HostPID params in order to satisfy Polaris validation?

Possibly related issue: https://github.com/FairwindsOps/polaris/issues/328

1 Answers

Polaris may be asking you to explicitly set those attributes to false. Try this:

...
jobTemplate:
  spec:
    backoffLimit: 3
    template:
      spec:
        hostIPC: false
        hostNetwork: false
        hostPID: false
        ...
        containers:
        - worker-foo
          ...
 ...
Related