projects/vision-ai-edge-platform/kubernetes/mosquitto.yaml (160 lines of code) (raw):

# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. --- apiVersion: v1 kind: Service metadata: name: mosquitto namespace: vision-ai-edge spec: clusterIP: None ports: - name: tcp-port port: 1883 protocol: TCP targetPort: 1883 selector: app: mosquitto --- apiVersion: v1 kind: ConfigMap metadata: name: mosquitto-conf namespace: vision-ai-edge data: mosquitto.conf: | password_file /mosquitto/secret/password_file # Disable anonymous access in production # allow_anonymous false allow_anonymous true listener 1883 0.0.0.0 persistence true persistence_location /mosquitto/data/ log_type subscribe log_type unsubscribe log_type websockets log_type error log_type warning log_type notice log_type information log_dest file /mosquitto/log/mosquitto.log log_dest stdout --- apiVersion: v1 kind: Secret metadata: name: mosquitto-password namespace: vision-ai-edge stringData: password_file: | aici:<<PLEASE_CHANGE_ME>> type: Opaque --- apiVersion: apps/v1 kind: StatefulSet metadata: annotations: checkov.io/skip1: CKV2_K8S_6=Network policy need to be configured first checkov.io/skip2: CKV_K8S_40=mosquitto need to be run as UID 1883 (< 10000) name: mosquitto namespace: vision-ai-edge spec: selector: matchLabels: app: mosquitto serviceName: mosquitto replicas: 1 persistentVolumeClaimRetentionPolicy: whenDeleted: Delete minReadySeconds: 10 template: metadata: labels: app: mosquitto spec: automountServiceAccountToken: false restartPolicy: Always containers: - image: eclipse-mosquitto:2.0.18-openssl@sha256:2f1c61fc5af49d0b589978e146dcfc60248d93d88292ff9373c4e6d083a63c72 imagePullPolicy: Always livenessProbe: initialDelaySeconds: 5 failureThreshold: 3 periodSeconds: 10 tcpSocket: port: 1883 name: mosquitto ports: - containerPort: 1883 readinessProbe: initialDelaySeconds: 5 failureThreshold: 3 periodSeconds: 10 tcpSocket: port: 1883 resources: limits: cpu: 500m memory: 256Mi requests: cpu: 250m memory: 128Mi securityContext: allowPrivilegeEscalation: false capabilities: drop: - ALL readOnlyRootFilesystem: true runAsUser: 1883 volumeMounts: - mountPath: /mosquitto/config name: mosquitto-conf - mountPath: /mosquitto/secret name: mosquitto-secret - mountPath: /mosquitto/data name: mosquitto-data initContainers: - args: - '-c' - cp /password/password_file /secret/password_file && chown 1883:1883 /secret/password_file && chmod 700 /secret/password_file command: ["bin/sh"] image: busybox:stable@sha256:9ae97d36d26566ff84e8893c64a6dc4fe8ca6d1144bf5b87b2b85a32def253c7 imagePullPolicy: Always name: init-config resources: limits: cpu: 500m memory: 256Mi requests: cpu: 250m memory: 128Mi volumeMounts: - mountPath: /secret name: mosquitto-secret - mountPath: /password name: mosquitto-password securityContext: seccompProfile: type: RuntimeDefault volumes: - name: mosquitto-conf configMap: name: mosquitto-conf - name: mosquitto-password secret: secretName: mosquitto-password volumeClaimTemplates: - metadata: name: mosquitto-secret spec: accessModes: - ReadWriteOnce resources: requests: storage: 1Gi storageClassName: standard-rwo - metadata: name: mosquitto-data spec: accessModes: - ReadWriteOnce resources: requests: storage: 10Gi storageClassName: standard-rwo