Passa al contenuto principale

Kubernetes

Per poter avviare Seer Box come applicazione distribuita su Kubernetes è necessario definire un insieme di pod e servizi, da configurare con i volumi richiesti dal sistema per la persistenza dei dati. Le password e gli altri token devono essere definiti come secret; le specifiche di manifest incluse in questa sezione forniscono un esempio di configurazione minimale per ciascun componente richiesto.

Dipendenze di terze parti

L'avvio di Seer Box richieste che i servizi PostgreSQL e RabbitMQ siano operativi.

PostgreSQL

sbx-postgresql.yml
# -------------------
# PostgreSQL Database
# -------------------
apiVersion: v1
kind: Pod
metadata:
name: sbx-postgresql
labels:
app: sbx-postgresql
spec:
restartPolicy: Always
containers:
# -- PostgreSQL --
- name: postgresql
image: "docker.io/postgres:15"
imagePullPolicy: IfNotPresent
ports:
- containerPort: 5432
protocol: TCP
name: psql-pod
volumeMounts:
- name: postgresql-db
mountPath: /var/lib/postgresql/data/
securityContext:
seLinuxOptions:
type: container_runtime_t
env:
- name: POSTGRES_DB
value: "seer_box"
- name: POSTGRES_USER
value: "seer_box"
- name: POSTGRES_PASSWORD
valueFrom:
secretKeyRef:
name: sbx-database-password
key: password
---
apiVersion: v1
kind: Service
metadata:
name: sbx-postgresql
spec:
selector:
app: sbx-postgresql
clusterIP: None
ports:
- name: psql-svc
port: 5432
protocol: TCP
targetPort: psql-pod

RabbitMQ

sbx-rabbitmq.yml
# -----------------------
# RabbitMQ message broker
# -----------------------
apiVersion: v1
kind: Pod
metadata:
name: sbx-rabbitmq
labels:
app: sbx-rabbitmq
spec:
restartPolicy: Always
containers:
# -- RabbitMQ --
- name: rabbitmq
image: "docker.io/rabbitmq:3"
imagePullPolicy: IfNotPresent
ports:
# AMQP Port
- containerPort: 5672
protocol: TCP
name: amqp-std-pod
# TLS-encrypted AMQP PORT
- containerPort: 5671
protocol: TCP
name: amqp-tls-pod
env:
- name: RABBITMQ_DEFAULT_USER
value: "seer_box"
- name: RABBITMQ_DEFAULT_PASS
valueFrom:
secretKeyRef:
name: sbx-queue-password
key: password
---
apiVersion: v1
kind: Service
metadata:
name: sbx-rabbitmq
spec:
selector:
app: sbx-rabbitmq
clusterIP: None
ports:
- name: amqp-std
port: 5672
protocol: TCP
targetPort: amqp-std-pod

Seer Box

Note per l'installazione

informazioni

Ciascuna istanza di Seer Box Engine e Seer Box Sentinel richiederà che l'utente accetti le condizioni generali del servizio (EULA) come specificate dalla presente documentazione. Per accettarne i termini, la variabile d'ambiente SBX_ACCEPT_EULA deve essere esplicitamente impostata a YES.

Integrità del software

Per preservare l'integrità del software installato, è importante mantenere intatte alcune importanti caratteristiche delle specifiche documentate sotto:

  • Piuttosto che utilizzare i tag come riferimenti alle immagini dei container, è opportuno includere l'intero hash SHA-256 secondo i valori registrati dal registry ufficiale disponibile presso quay.io/pluribus_one, sostituendo la stringa {HASH} nelle definizioni dei pod di esempio;

  • I file system devono essere montati in modalità sola lettura ove possibile, tenendo l'opzione readOnlyRootFilesystem impostata a true.

Questo assicurerà che il software scaricato e in esecuzione su un'infrastruttura di produzione sia originale e non sia stato manomesso.

Volumi

Il volume specificato dai pod definiti per Engine, Sentinel e Reporter dovrebbe essere condiviso come leggibile e scrivibile da tutti i container inclusi, e fare riferimento allo stesso storage.

Secret

I seguenti oggetti di tipo Secret possono essere definiti direttamente dall'utente, ciascuno con una chiave chiamata password, e resi disponibili ai container che necessitano di leggerli:

  • sbx-database-password
  • sbx-queue-password
  • sbx-internal-auth-key

Una volta che questi requisiti sono soddisfatti, i pod per Seer Box possono essere creati utilizzando le seguenti definizioni.

Engine

sbx-engine.yml
# --------------
# Seer Box Engine
# --------------
apiVersion: v1
kind: Pod
metadata:
name: sbx-engine
labels:
app: sbx-engine
spec:
restartPolicy: Always
containers:
# -- SeerBox Engine --
- name: engine
image: quay.io/pluribus_one/seer_box_engine@sha256:{HASH}
imagePullPolicy: IfNotPresent
ports:
# UDP traffic source
- containerPort: 20050
protocol: UDP
name: engine-udp-pod
# TCP traffic source
- containerPort: 20050
protocol: TCP
name: engine-tcp-pod
# Internal API port
- containerPort: 4000
protocol: TCP
name: engine-api-pod
volumeMounts:
- name: sbx-opt
readOnly: false
mountPath: /opt/seer_box/
securityContext:
runAsGroup: 53380
runAsUser: 53380
seLinuxOptions:
type: container_runtime_t
readOnlyRootFilesystem: true
env:
- name: SBX_ACCEPT_EULA
value: "NO"
- name: SBX_INTERNAL_AUTH_KEY
valueFrom:
secretKeyRef:
name: sbx-internal-auth-key
key: password
- name: SBX_DATABASE_HOSTNAME
value: "sbx-postgresql"
- name: SBX_QUEUE_HOSTNAME
value: "sbx-rabbitmq"
- name: SBX_SERVER_WEB_URL_HOST
value: "localhost"
- name: SBX_DATABASE_PASSWORD
valueFrom:
secretKeyRef:
name: sbx-database-password
key: password
- name: SBX_QUEUE_PASSWORD
valueFrom:
secretKeyRef:
name: sbx-queue-password
key: password
---
apiVersion: v1
kind: Service
metadata:
name: sbx-engine
spec:
selector:
app: sbx-engine
type: NodePort
ports:
# UDP traffic source
- port: 20050
nodePort: 30050
protocol: UDP
name: engine-udp-svc
targetPort: engine-udp-pod
# TCP traffic source
- port: 20050
nodePort: 30050
protocol: TCP
name: engine-tcp-svc
targetPort: engine-tcp-pod
# Internal API port
- port: 4000
protocol: TCP
name: engine-api-svc
targetPort: engine-api-pod

Sentinel

sbx-sentinel.yml
# ----------------
# SeerBox Sentinel
# ----------------
apiVersion: v1
kind: Pod
metadata:
name: sbx-sentinel
labels:
app: sbx-sentinel
spec:
restartPolicy: Always
containers:
# -- SeerBox Sentinel --
- name: sentinel
image: quay.io/pluribus_one/seer_box_sentinel@sha256:{HASH}
imagePullPolicy: IfNotPresent
volumeMounts:
- name: sbx-opt
readOnly: false
mountPath: /opt/seer_box/
securityContext:
runAsGroup: 53380
runAsUser: 53380
seLinuxOptions:
type: container_runtime_t
readOnlyRootFilesystem: true
ports:
- containerPort: 2050
hostPort: 2050
protocol: UDP
name: snt-udp-pod
- containerPort: 2050
hostPort: 2050
protocol: TCP
name: snt-tcp-pod
env:
- name: SBX_ACCEPT_EULA
value: "NO"
- name: SBX_NAME
value: "SeerBox_Sentinel"
- name: SBX_LISTEN_ADDRESS
value: "0.0.0.0"
- name: SBX_PROTOCOL
value: "UDP"
- name: SBX_INPUT_FORMAT
value: "ncsa_extended_log"
- name: SBX_ENGINE_HOST
value: "sbx-engine.default.svc.cluster.local"
- name: SBX_INTERNAL_AUTH_KEY
valueFrom:
secretKeyRef:
name: sbx-internal-auth-key
key: password
- name: SBX_TRAFFIC_COLLECTOR_HOST
value: "sbx-rabbitmq"
- name: SBX_TRAFFIC_COLLECTOR_PASSWORD
valueFrom:
secretKeyRef:
name: sbx-queue-password
key: password
---
apiVersion: v1
kind: Service
metadata:
name: sbx-sentinel
spec:
selector:
app: sbx-sentinel
clusterIP: None
ports:
# UDP traffic source
- port: 2050
protocol: UDP
name: snt-udp-svc
targetPort: snt-udp-pod
# TCP traffic source
- port: 2050
protocol: TCP
name: snt-tcp-svc
targetPort: snt-tcp-pod

GUI

sbx-gui.yml
# -----------
# SeerBox GUI
# -----------
apiVersion: v1
kind: Pod
metadata:
name: sbx-gui
labels:
app: sbx-gui
spec:
restartPolicy: Always
containers:
# -- SeerBox GUI --
- name: gui
image: quay.io/pluribus_one/seer_box_gui@sha256:{HASH}
imagePullPolicy: IfNotPresent
ports:
# HTTP Server
- containerPort: 80
protocol: TCP
name: gui-http-pod
volumeMounts:
- name: vhosts
mountPath: /etc/nginx/conf.d/
- name: nginx-cache
mountPath: /var/cache/nginx/
- name: sys-run
mountPath: /run/
securityContext:
seLinuxOptions:
type: container_runtime_t
readOnlyRootFilesystem: true
env:
- name: SBX_DNS_RESOLVER
value: "10.96.0.10"
- name: SBX_API_HOST
value: "sbx-engine.default.svc.cluster.local"
- name: SBX_API_PORT
value: "4000"
volumes:
- name: vhosts
emptyDir: {}
- name: nginx-cache
emptyDir: {}
- name: sys-run
emptyDir: {}
---
apiVersion: v1
kind: Service
metadata:
name: sbx-gui
spec:
type: NodePort
selector:
app: sbx-gui
ports:
# HTTP Server
- port: 53380
nodePort: 30035
protocol: TCP
name: gui-http-svc
targetPort: gui-http-pod

Reporter

sbx-reporter.yml
# ----------------
# SeerBox Reporter
# ----------------
apiVersion: v1
kind: Pod
metadata:
name: sbx-reporter
labels:
app: sbx-reporter
spec:
restartPolicy: Always
containers:
# -- SeerBox Reporter --
- name: reporter
image: quay.io/pluribus_one/seer_box_reporter@sha256:{HASH}
imagePullPolicy: IfNotPresent
volumeMounts:
- name: sbx-opt
readOnly: false
mountPath: /opt/seer_box/
- name: cache
mountPath: /home/seer-box/.cache/
- name: pki
mountPath: /home/seer-box/.pki/
- name: locales
mountPath: /home/seer-box/.config/kaleido/bin/locales/
- name: tmp
mountPath: /tmp/
securityContext:
runAsGroup: 53380
runAsUser: 53380
seLinuxOptions:
type: container_runtime_t
readOnlyRootFilesystem: true
env:
- name: SBX_DATABASE_HOSTNAME
value: "sbx-postgresql"
- name: SBX_QUEUE_HOSTNAME
value: "sbx-rabbitmq"
- name: SBX_DATABASE_PASSWORD
valueFrom:
secretKeyRef:
name: sbx-database-password
key: password
- name: SBX_QUEUE_PASSWORD
valueFrom:
secretKeyRef:
name: sbx-queue-password
key: password
volumes:
- name: cache
emptyDir: {}
- name: pki
emptyDir: {}
- name: locales
emptyDir: {}
- name: tmp
emptyDir: {}

Inizializzazione del sistema

Dopo il primo avvio, l'interfaccia grafica sarà esposta su HTTP dal servizio sbx-gui, e associata alla porta selezionata.

informazioni

Si raccomanda di esporre l'interfaccia web tramite un reverse proxy con SSL abilitato e, se possibile, limitare l'accesso a un insieme ristretto di indirizzi IP. Deve essere, in ogni caso, sempre gestita e tenuta come un servizio interno, da non esporre pubblicamente sulla rete.

Le credenziali di default per l'utente di amministrazione sono:

  • Username: admin
  • Password: SeerBox_4dm1n
informazioni

Si raccomanda di cambiare la password di default dopo il primo login.

License

A seguito del login iniziale, l'interfaccia richiederà l'inserimento della chiave di licenza fornita da Pluribus One per completare l'attivazione del software.

È possibile ottenrre una licenza gratuita tramite questo link: https://license.seerbox.it