logging: Replace Graylog with ZincSearch
This commit is contained in:
		| @@ -14,7 +14,7 @@ To deploy: | ||||
|  | ||||
| ``` | ||||
| kubectl create namespace logging | ||||
| kubectl apply -n logging -f mongodb-support.yml -f application.yml -f filebeat.yml -f networkpolicy-base.yml | ||||
| kubectl apply -n logging -f zinc.yml -f application.yml -f filebeat.yml -f networkpolicy-base.yml | ||||
| kubectl rollout restart -n logging daemonset.apps/filebeat | ||||
| ``` | ||||
|  | ||||
|   | ||||
| @@ -1,86 +1,4 @@ | ||||
| --- | ||||
| apiVersion: apps/v1 | ||||
| kind: StatefulSet | ||||
| metadata: | ||||
|   name: elasticsearch | ||||
|   labels: | ||||
|     app: elasticsearch | ||||
| spec: | ||||
|   serviceName: elasticsearch | ||||
|   revisionHistoryLimit: 0 | ||||
|   replicas: 1 | ||||
|   selector: | ||||
|     matchLabels: | ||||
|       app: elasticsearch | ||||
|   template: | ||||
|     metadata: | ||||
|       labels: | ||||
|         app: elasticsearch | ||||
|     spec: | ||||
|       securityContext: | ||||
|         fsGroup: 1000 | ||||
|       containers: | ||||
|         - name: elasticsearch | ||||
|           image: elasticsearch:7.17.3 | ||||
|           securityContext: | ||||
|             runAsNonRoot: true | ||||
|             runAsUser: 1000 | ||||
|           env: | ||||
|             - name: discovery.type | ||||
|               value: single-node | ||||
|             - name: xpack.security.enabled | ||||
|               value: "false" | ||||
|           ports: | ||||
|             - containerPort: 9200 | ||||
|           readinessProbe: | ||||
|             httpGet: | ||||
|               path: /_cluster/health | ||||
|               port: 9200 | ||||
|             initialDelaySeconds: 5 | ||||
|             periodSeconds: 10 | ||||
|             failureThreshold: 3 | ||||
|             successThreshold: 1 | ||||
|             timeoutSeconds: 5 | ||||
|           resources: | ||||
|             limits: | ||||
|               memory: "2147483648" | ||||
|           volumeMounts: | ||||
|           - name: elasticsearch-data | ||||
|             mountPath: /usr/share/elasticsearch/data | ||||
|           - name: elasticsearch-tmp | ||||
|             mountPath: /tmp/ | ||||
|       volumes: | ||||
|       - emptyDir: {} | ||||
|         name: elasticsearch-keystore | ||||
|       - emptyDir: {} | ||||
|         name: elasticsearch-tmp | ||||
|       - emptyDir: {} | ||||
|         name: elasticsearch-logs | ||||
|   volumeClaimTemplates: | ||||
|     - metadata: | ||||
|         name: elasticsearch-data | ||||
|       spec: | ||||
|         accessModes: | ||||
|           - "ReadWriteOnce" | ||||
|         resources: | ||||
|           requests: | ||||
|             storage: "10Gi" | ||||
|         storageClassName: longhorn | ||||
| --- | ||||
| apiVersion: v1 | ||||
| kind: Service | ||||
| metadata: | ||||
|   name: elasticsearch | ||||
|   labels: | ||||
|     app: elasticsearch | ||||
| spec: | ||||
|   ports: | ||||
|   - name: api | ||||
|     port: 80 | ||||
|     targetPort: 9200 | ||||
|   selector: | ||||
|     app: elasticsearch | ||||
| --- | ||||
| apiVersion: v1 | ||||
| kind: Service | ||||
| metadata: | ||||
| @@ -149,304 +67,3 @@ spec: | ||||
|       protocol: UDP | ||||
|   selector: | ||||
|     app: graylog | ||||
| --- | ||||
| apiVersion: v1 | ||||
| kind: Service | ||||
| metadata: | ||||
|   name: graylog | ||||
|   labels: | ||||
|     app: graylog | ||||
| spec: | ||||
|   ports: | ||||
|     - name: graylog | ||||
|       port: 9000 | ||||
|       protocol: TCP | ||||
|   selector: | ||||
|     app: graylog | ||||
| --- | ||||
| apiVersion: apps/v1 | ||||
| kind: StatefulSet | ||||
| metadata: | ||||
|   name: graylog | ||||
|   labels: | ||||
|     app: graylog | ||||
|   annotations: | ||||
|     keel.sh/policy: minor | ||||
|     keel.sh/trigger: poll | ||||
|     keel.sh/pollSchedule: "@midnight" | ||||
| spec: | ||||
|   serviceName: graylog | ||||
|   revisionHistoryLimit: 0 | ||||
|   replicas: 1 | ||||
|   selector: | ||||
|     matchLabels: | ||||
|       app: graylog | ||||
|   template: | ||||
|     metadata: | ||||
|       labels: | ||||
|         app: graylog | ||||
|       annotations: | ||||
|         prometheus.io/port: "9833" | ||||
|         prometheus.io/scrape: "true" | ||||
|     spec: | ||||
|       securityContext: | ||||
|         fsGroup: 1100 | ||||
|       volumes: | ||||
|         - name: graylog-config | ||||
|           downwardAPI: | ||||
|             items: | ||||
|               - path: id | ||||
|                 fieldRef: | ||||
|                   fieldPath: metadata.name | ||||
|       containers: | ||||
|         - name: graylog | ||||
|           image: graylog/graylog:4.3 | ||||
|           env: | ||||
|             - name: GRAYLOG_MONGODB_URI | ||||
|               valueFrom: | ||||
|                 secretKeyRef: | ||||
|                   name: mongodb-application-readwrite | ||||
|                   key: connectionString.standard | ||||
|             - name: GRAYLOG_PROMETHEUS_EXPORTER_ENABLED | ||||
|               value: "true" | ||||
|             - name: GRAYLOG_PROMETHEUS_EXPORTER_BIND_ADDRESS | ||||
|               value: "0.0.0.0:9833" | ||||
|             - name: GRAYLOG_NODE_ID_FILE | ||||
|               value: /config/id | ||||
|             - name: GRAYLOG_HTTP_EXTERNAL_URI | ||||
|               value: "https://graylog.k-space.ee/" | ||||
|             - name: GRAYLOG_TRUSTED_PROXIES | ||||
|               value: "0.0.0.0/0" | ||||
|             - name: GRAYLOG_ELASTICSEARCH_HOSTS | ||||
|               value: "http://elasticsearch" | ||||
|             - name: GRAYLOG_MESSAGE_JOURNAL_ENABLED | ||||
|               value: "false" | ||||
|             - name: GRAYLOG_ROTATION_STRATEGY | ||||
|               value: "size" | ||||
|             - name: GRAYLOG_ELASTICSEARCH_MAX_SIZE_PER_INDEX | ||||
|               value: "268435456" | ||||
|             - name: GRAYLOG_ELASTICSEARCH_MAX_NUMBER_OF_INDICES | ||||
|               value: "16" | ||||
|           envFrom: | ||||
|             - secretRef: | ||||
|                 name: graylog-secrets | ||||
|           securityContext: | ||||
|             runAsNonRoot: true | ||||
|             runAsUser: 1100 | ||||
|           ports: | ||||
|             - containerPort: 9000 | ||||
|               name: graylog | ||||
|             - containerPort: 9833 | ||||
|               name: graylog-metrics | ||||
|           livenessProbe: | ||||
|             httpGet: | ||||
|               path: /api/system/lbstatus | ||||
|               port: 9000 | ||||
|             initialDelaySeconds: 5 | ||||
|             periodSeconds: 30 | ||||
|             failureThreshold: 3 | ||||
|             successThreshold: 1 | ||||
|             timeoutSeconds: 5 | ||||
|           readinessProbe: | ||||
|             httpGet: | ||||
|               path: /api/system/lbstatus | ||||
|               port: 9000 | ||||
|             initialDelaySeconds: 5 | ||||
|             periodSeconds: 10 | ||||
|             failureThreshold: 3 | ||||
|             successThreshold: 1 | ||||
|             timeoutSeconds: 5 | ||||
|           volumeMounts: | ||||
|             - name: graylog-config | ||||
|               mountPath: /config | ||||
| --- | ||||
| apiVersion: networking.k8s.io/v1 | ||||
| kind: Ingress | ||||
| metadata: | ||||
|   name: graylog | ||||
|   annotations: | ||||
|     cert-manager.io/cluster-issuer: default | ||||
|     traefik.ingress.kubernetes.io/router.entrypoints: websecure | ||||
|     traefik.ingress.kubernetes.io/router.tls: "true" | ||||
|     external-dns.alpha.kubernetes.io/target: traefik.k-space.ee | ||||
|     traefik.ingress.kubernetes.io/router.middlewares: traefik-sso@kubernetescrd | ||||
| spec: | ||||
|   rules: | ||||
|   - host: graylog.k-space.ee | ||||
|     http: | ||||
|       paths: | ||||
|       - pathType: Prefix | ||||
|         path: "/" | ||||
|         backend: | ||||
|           service: | ||||
|             name: graylog | ||||
|             port: | ||||
|               number: 9000 | ||||
|   tls: | ||||
|   - hosts: | ||||
|     - graylog.k-space.ee | ||||
|     secretName: graylog-tls | ||||
| --- | ||||
| apiVersion: networking.k8s.io/v1 | ||||
| kind: NetworkPolicy | ||||
| metadata: | ||||
|   name: graylog | ||||
| spec: | ||||
|   podSelector: | ||||
|     matchLabels: | ||||
|       app: graylog | ||||
|   policyTypes: | ||||
|   - Ingress | ||||
|   - Egress | ||||
|   egress: | ||||
|   - to: | ||||
|     - podSelector: | ||||
|         matchLabels: | ||||
|           app: elasticsearch | ||||
|     ports: | ||||
|     - port: 9200 | ||||
|   - to: | ||||
|     - podSelector: | ||||
|         matchLabels: | ||||
|           app: mongodb-svc | ||||
|     ports: | ||||
|     - port: 27017 | ||||
|   ingress: | ||||
|   - from: | ||||
|     - ipBlock: | ||||
|         cidr: 172.23.0.0/16 | ||||
|     - ipBlock: | ||||
|         cidr: 172.21.0.0/16 | ||||
|     - ipBlock: | ||||
|         cidr: 100.102.0.0/16 | ||||
|     ports: | ||||
|     - protocol: UDP | ||||
|       port: 514 | ||||
|     - protocol: TCP | ||||
|       port: 514 | ||||
|   - from: | ||||
|     - podSelector: | ||||
|         matchLabels: | ||||
|           app: filebeat | ||||
|     ports: | ||||
|     - protocol: TCP | ||||
|       port: 5044 | ||||
|   - from: | ||||
|     - namespaceSelector: | ||||
|         matchLabels: | ||||
|           kubernetes.io/metadata.name: monitoring | ||||
|       podSelector: | ||||
|         matchLabels: | ||||
|           app: prometheus | ||||
|     ports: | ||||
|     - port: 9833 | ||||
|   - from: | ||||
|     - namespaceSelector: | ||||
|         matchLabels: | ||||
|           kubernetes.io/metadata.name: traefik | ||||
|       podSelector: | ||||
|         matchLabels: | ||||
|           app.kubernetes.io/name: traefik | ||||
|     ports: | ||||
|     - protocol: TCP | ||||
|       port: 9000 | ||||
| --- | ||||
| apiVersion: networking.k8s.io/v1 | ||||
| kind: NetworkPolicy | ||||
| metadata: | ||||
|   name: elasticsearch | ||||
| spec: | ||||
|   podSelector: | ||||
|     matchLabels: | ||||
|       app: elasticsearch | ||||
|   policyTypes: | ||||
|   - Ingress | ||||
|   - Egress | ||||
|   ingress: | ||||
|   - from: | ||||
|     - podSelector: | ||||
|         matchLabels: | ||||
|           app: graylog | ||||
|   - from: | ||||
|     - namespaceSelector: | ||||
|         matchLabels: | ||||
|           kubernetes.io/metadata.name: monitoring | ||||
|       podSelector: | ||||
|         matchLabels: | ||||
|           app: grafana | ||||
|   egress: | ||||
|   - to: | ||||
|     - ipBlock: | ||||
|         # geoip.elastic.co updates | ||||
|         cidr: 0.0.0.0/0 | ||||
|     ports: | ||||
|     - port: 443 | ||||
| --- | ||||
| apiVersion: mongodbcommunity.mongodb.com/v1 | ||||
| kind: MongoDBCommunity | ||||
| metadata: | ||||
|   name: mongodb | ||||
| spec: | ||||
|   members: 3 | ||||
|   type: ReplicaSet | ||||
|   version: "5.0.9" | ||||
|   security: | ||||
|     authentication: | ||||
|       modes: ["SCRAM"] | ||||
|   users: | ||||
|     - name: readwrite | ||||
|       db: application | ||||
|       passwordSecretRef: | ||||
|         name: mongodb-application-readwrite-password | ||||
|       roles: | ||||
|         - name: readWrite | ||||
|           db: application | ||||
|       scramCredentialsSecretName: mongodb-application-readwrite | ||||
|     - name: readonly | ||||
|       db: application | ||||
|       passwordSecretRef: | ||||
|         name: mongodb-application-readonly-password | ||||
|       roles: | ||||
|         - name: readOnly | ||||
|           db: application | ||||
|       scramCredentialsSecretName: mongodb-application-readonly | ||||
|   statefulSet: | ||||
|     spec: | ||||
|       template: | ||||
|         spec: | ||||
|           affinity: | ||||
|             podAntiAffinity: | ||||
|               requiredDuringSchedulingIgnoredDuringExecution: | ||||
|                 - labelSelector: | ||||
|                     matchExpressions: | ||||
|                       - key: app | ||||
|                         operator: In | ||||
|                         values: | ||||
|                           - mongodb-svc | ||||
|                   topologyKey: kubernetes.io/hostname | ||||
|           nodeSelector: | ||||
|             dedicated: storage | ||||
|           tolerations: | ||||
|             - key: dedicated | ||||
|               operator: Equal | ||||
|               value: storage | ||||
|               effect: NoSchedule | ||||
|       volumeClaimTemplates: | ||||
|         - metadata: | ||||
|             name: logs-volume | ||||
|           spec: | ||||
|             storageClassName: local-path | ||||
|             accessModes: | ||||
|             - ReadWriteOnce | ||||
|             resources: | ||||
|               requests: | ||||
|                 storage: 512Mi | ||||
|         - metadata: | ||||
|             name: data-volume | ||||
|           spec: | ||||
|             storageClassName: local-path | ||||
|             accessModes: | ||||
|             - ReadWriteOnce | ||||
|             resources: | ||||
|               requests: | ||||
|                 storage: 2Gi | ||||
|   | ||||
| @@ -6,18 +6,13 @@ metadata: | ||||
|   namespace: logging | ||||
| data: | ||||
|   filebeat.yml: |- | ||||
|     setup: | ||||
|       ilm: | ||||
|         enabled: false | ||||
|       template: | ||||
|         name: filebeat | ||||
|         pattern: filebeat-* | ||||
|     http.enabled: true | ||||
|     filebeat.inputs: | ||||
|     - type: container | ||||
|       paths: | ||||
|         - /var/log/containers/*.log | ||||
|       processors: | ||||
|         - add_kubernetes_metadata: | ||||
|             in_cluster: true | ||||
|             host: ${NODE_NAME} | ||||
|             matchers: | ||||
|             - logs_path: | ||||
|                 logs_path: "/var/log/containers/" | ||||
|     filebeat.autodiscover: | ||||
|       providers: | ||||
|         - type: kubernetes | ||||
| @@ -27,50 +22,24 @@ data: | ||||
|             type: container | ||||
|             paths: | ||||
|               - /var/log/containers/*${data.kubernetes.container.id}.log | ||||
|     processors: | ||||
|       - add_host_metadata: | ||||
|       - drop_fields: | ||||
|           fields: | ||||
|             - stream | ||||
|           ignore_missing: true | ||||
|       - rename: | ||||
|           fields: | ||||
|             - from: "kubernetes.node.name" | ||||
|               to: "source" | ||||
|             - from: "kubernetes.pod.name" | ||||
|               to: "pod" | ||||
|             - from: "stream" | ||||
|               to: "stream" | ||||
|             - from: "kubernetes.labels.app" | ||||
|               to: "app" | ||||
|             - from: "kubernetes.namespace" | ||||
|               to: "namespace" | ||||
|           ignore_missing: true | ||||
|       - drop_fields: | ||||
|           fields: | ||||
|             - agent | ||||
|             - container | ||||
|             - ecs | ||||
|             - host | ||||
|             - kubernetes | ||||
|             - log | ||||
|             - "@metadata" | ||||
|           ignore_missing: true | ||||
|     output.logstash: | ||||
|       hosts: ["graylog-logstash:5044"] | ||||
|     #output.console: | ||||
|     #  pretty: true | ||||
|     output: | ||||
|       elasticsearch: | ||||
|         hosts: | ||||
|           - http://zinc:4080 | ||||
|         path: "/es/" | ||||
|         index: "filebeat-%{+yyyy.MM.dd}" | ||||
|         username: "${ZINC_FIRST_ADMIN_USER}" | ||||
|         password: "${ZINC_FIRST_ADMIN_PASSWORD}" | ||||
| --- | ||||
| apiVersion: apps/v1 | ||||
| kind: DaemonSet | ||||
| metadata: | ||||
|   name: filebeat | ||||
|   namespace: logging | ||||
| spec: | ||||
|   updateStrategy: | ||||
|     type: RollingUpdate | ||||
|     rollingUpdate: | ||||
|       maxUnavailable: 100% | ||||
|       maxUnavailable: 50% | ||||
|   selector: | ||||
|     matchLabels: | ||||
|       app: filebeat | ||||
| @@ -78,72 +47,86 @@ spec: | ||||
|     metadata: | ||||
|       labels: | ||||
|         app: filebeat | ||||
|       annotations: | ||||
|         co.elastic.logs/json.keys_under_root: "true" | ||||
|     spec: | ||||
|       serviceAccountName: filebeat | ||||
|       containers: | ||||
|       - name: filebeat | ||||
|         image: docker.elastic.co/beats/filebeat:7.17.6 | ||||
|         args: | ||||
|          - -c | ||||
|          - /etc/filebeat.yml | ||||
|          - -e | ||||
|         securityContext: | ||||
|           runAsUser: 0 | ||||
|         env: | ||||
|         - name: NODE_NAME | ||||
|           valueFrom: | ||||
|             fieldRef: | ||||
|               fieldPath: spec.nodeName | ||||
|         ports: | ||||
|           - containerPort: 5066 | ||||
|         resources: | ||||
|           limits: | ||||
|             memory: 200Mi | ||||
|           requests: | ||||
|             cpu: 100m | ||||
|             memory: 100Mi | ||||
|         volumeMounts: | ||||
|         - name: filebeat-config | ||||
|           mountPath: /etc/filebeat.yml | ||||
|           readOnly: true | ||||
|           subPath: filebeat.yml | ||||
|         - name: data | ||||
|           mountPath: /usr/share/filebeat/data | ||||
|         - name: varlibdockercontainers | ||||
|           mountPath: /var/lib/docker/containers | ||||
|           readOnly: true | ||||
|         - name: varlog | ||||
|           mountPath: /var/log | ||||
|           readOnly: true | ||||
|         - name: filebeat | ||||
|           image: docker.elastic.co/beats/filebeat:8.4.1 | ||||
|           args: | ||||
|             - -c | ||||
|             - /etc/filebeat.yml | ||||
|             - -e | ||||
|           securityContext: | ||||
|             runAsUser: 0 | ||||
|           env: | ||||
|             - name: NODE_NAME | ||||
|               valueFrom: | ||||
|                 fieldRef: | ||||
|                   fieldPath: spec.nodeName | ||||
|             - name: ZINC_FIRST_ADMIN_USER | ||||
|               value: admin | ||||
|             - name: ZINC_FIRST_ADMIN_PASSWORD | ||||
|               value: salakala | ||||
|           ports: | ||||
|             - containerPort: 5066 | ||||
|           resources: | ||||
|             limits: | ||||
|               memory: 200Mi | ||||
|             requests: | ||||
|               cpu: 100m | ||||
|               memory: 100Mi | ||||
|           volumeMounts: | ||||
|             - name: filebeat-config | ||||
|               mountPath: /etc/filebeat.yml | ||||
|               readOnly: true | ||||
|               subPath: filebeat.yml | ||||
|             - name: data | ||||
|               mountPath: /usr/share/filebeat/data | ||||
|             - name: varlibdockercontainers | ||||
|               mountPath: /var/lib/docker/containers | ||||
|               readOnly: true | ||||
|             - name: varlog | ||||
|               mountPath: /var/log | ||||
|               readOnly: true | ||||
|         - name: exporter | ||||
|           image: sepa/beats-exporter | ||||
|           args: | ||||
|             - -p=5066 | ||||
|           ports: | ||||
|             - containerPort: 8080 | ||||
|               name: exporter | ||||
|               protocol: TCP | ||||
|       volumes: | ||||
|       - name: filebeat-config | ||||
|         configMap: | ||||
|           defaultMode: 0600 | ||||
|           name: filebeat-config | ||||
|       - name: varlibdockercontainers | ||||
|         hostPath: | ||||
|           path: /var/lib/docker/containers | ||||
|       - name: varlog | ||||
|         hostPath: | ||||
|           path: /var/log | ||||
|       - name: data | ||||
|         hostPath: | ||||
|           path: /var/lib/filebeat-data | ||||
|           type: DirectoryOrCreate | ||||
|         - name: filebeat-config | ||||
|           configMap: | ||||
|             defaultMode: 0600 | ||||
|             name: filebeat-config | ||||
|         - name: varlibdockercontainers | ||||
|           hostPath: | ||||
|             path: /var/lib/docker/containers | ||||
|         - name: varlog | ||||
|           hostPath: | ||||
|             path: /var/log | ||||
|         - name: data | ||||
|           hostPath: | ||||
|             path: /var/lib/filebeat-data | ||||
|             type: DirectoryOrCreate | ||||
|       tolerations: | ||||
|       - operator: "Exists" | ||||
|         effect: "NoExecute" | ||||
|       - operator: "Exists" | ||||
|         effect: "NoSchedule" | ||||
|         - operator: "Exists" | ||||
|           effect: "NoExecute" | ||||
|         - operator: "Exists" | ||||
|           effect: "NoSchedule" | ||||
| --- | ||||
| apiVersion: rbac.authorization.k8s.io/v1 | ||||
| kind: ClusterRoleBinding | ||||
| metadata: | ||||
|   name: logging-filebeat | ||||
| subjects: | ||||
| - kind: ServiceAccount | ||||
|   name: filebeat | ||||
|   namespace: logging | ||||
|   - kind: ServiceAccount | ||||
|     name: filebeat | ||||
|     namespace: logging | ||||
| roleRef: | ||||
|   kind: ClusterRole | ||||
|   name: filebeat | ||||
| @@ -166,13 +149,35 @@ spec: | ||||
|     matchLabels: | ||||
|       app: filebeat | ||||
|   policyTypes: | ||||
|   - Ingress | ||||
|   - Egress | ||||
|     - Ingress | ||||
|     - Egress | ||||
|   ingress: | ||||
|     - from: | ||||
|         - namespaceSelector: | ||||
|             matchLabels: | ||||
|               kubernetes.io/metadata.name: prometheus-operator | ||||
|           podSelector: | ||||
|             matchLabels: | ||||
|               app.kubernetes.io/name: prometheus | ||||
|       ports: | ||||
|         - protocol: TCP | ||||
|           port: 8080 | ||||
|   egress: | ||||
|   - to: | ||||
|     - podSelector: | ||||
|         matchLabels: | ||||
|           app: graylog | ||||
|     ports: | ||||
|     - protocol: TCP | ||||
|       port: 5044 | ||||
|     - to: | ||||
|         - podSelector: | ||||
|             matchLabels: | ||||
|               app: zinc | ||||
|       ports: | ||||
|         - protocol: TCP | ||||
|           port: 4080 | ||||
| --- | ||||
| apiVersion: monitoring.coreos.com/v1 | ||||
| kind: PodMonitor | ||||
| metadata: | ||||
|   name: filebeat | ||||
| spec: | ||||
|   selector: | ||||
|     matchLabels: | ||||
|       app: filebeat | ||||
|   podMetricsEndpoints: | ||||
|     - port: exporter | ||||
|   | ||||
| @@ -1 +0,0 @@ | ||||
| ../mongodb-operator/mongodb-support.yml | ||||
							
								
								
									
										122
									
								
								logging/zinc.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										122
									
								
								logging/zinc.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,122 @@ | ||||
| apiVersion: v1 | ||||
| kind: Service | ||||
| metadata: | ||||
|   name: zinc | ||||
| spec: | ||||
|   clusterIP: None | ||||
|   selector: | ||||
|     app: zinc | ||||
|   ports: | ||||
|   - name: http | ||||
|     port: 4080 | ||||
|     targetPort: 4080 | ||||
| --- | ||||
| apiVersion: apps/v1 | ||||
| kind: StatefulSet | ||||
| metadata: | ||||
|   name: zinc | ||||
| spec: | ||||
|   serviceName: zinc | ||||
|   replicas: 1 | ||||
|   selector: | ||||
|     matchLabels: | ||||
|       app: zinc | ||||
|   template: | ||||
|     metadata: | ||||
|       labels: | ||||
|         app: zinc | ||||
|     spec: | ||||
|       securityContext: | ||||
|         fsGroup: 2000 | ||||
|         runAsUser: 10000 | ||||
|         runAsGroup: 3000 | ||||
|         runAsNonRoot: true | ||||
|       containers: | ||||
|         - name: zinc | ||||
|           image: public.ecr.aws/zinclabs/zinc:latest | ||||
|           env: | ||||
|             - name: GIN_MODE | ||||
|               value: release | ||||
|             - name: ZINC_FIRST_ADMIN_USER | ||||
|               value: admin | ||||
|             - name: ZINC_FIRST_ADMIN_PASSWORD | ||||
|               value: salakala | ||||
|             - name: ZINC_DATA_PATH | ||||
|               value: /data | ||||
|           imagePullPolicy: Always | ||||
|           resources: | ||||
|             limits: | ||||
|               cpu: "4" | ||||
|               memory: 2048Mi | ||||
|             requests: | ||||
|               cpu: 32m | ||||
|               memory: 50Mi | ||||
|           ports: | ||||
|             - containerPort: 4080 | ||||
|               name: http | ||||
|           volumeMounts: | ||||
|           - name: data | ||||
|             mountPath: /data | ||||
|   volumeClaimTemplates: | ||||
|   - metadata: | ||||
|       name: data | ||||
|     spec: | ||||
|       accessModes: | ||||
|         - ReadWriteOnce | ||||
|       storageClassName: longhorn | ||||
|       resources: | ||||
|         requests: | ||||
|           storage: 20Gi | ||||
| --- | ||||
| apiVersion: networking.k8s.io/v1 | ||||
| kind: Ingress | ||||
| metadata: | ||||
|   name: zinc | ||||
|   annotations: | ||||
|     cert-manager.io/cluster-issuer: default | ||||
|     traefik.ingress.kubernetes.io/router.entrypoints: websecure | ||||
|     traefik.ingress.kubernetes.io/router.tls: "true" | ||||
|     external-dns.alpha.kubernetes.io/target: traefik.k-space.ee | ||||
|     traefik.ingress.kubernetes.io/router.middlewares: traefik-sso@kubernetescrd | ||||
| spec: | ||||
|   rules: | ||||
|   - host: zinc.k-space.ee | ||||
|     http: | ||||
|       paths: | ||||
|       - pathType: Prefix | ||||
|         path: "/" | ||||
|         backend: | ||||
|           service: | ||||
|             name: zinc | ||||
|             port: | ||||
|               number: 4080 | ||||
|   tls: | ||||
|   - hosts: | ||||
|     - zinc.k-space.ee | ||||
|     secretName: zinc-tls | ||||
| --- | ||||
| apiVersion: networking.k8s.io/v1 | ||||
| kind: NetworkPolicy | ||||
| metadata: | ||||
|   name: zinc | ||||
| spec: | ||||
|   podSelector: | ||||
|     matchLabels: | ||||
|       app: zinc | ||||
|   policyTypes: | ||||
|   - Ingress | ||||
|   ingress: | ||||
|   - from: | ||||
|     - podSelector: | ||||
|         matchLabels: | ||||
|           app: filebeat | ||||
|     ports: | ||||
|     - protocol: TCP | ||||
|       port: 4080 | ||||
|   - from: | ||||
|     - namespaceSelector: | ||||
|         matchLabels: | ||||
|           kubernetes.io/metadata.name: traefik | ||||
|       podSelector: | ||||
|         matchLabels: | ||||
|           app.kubernetes.io/name: traefik | ||||
		Reference in New Issue
	
	Block a user