Utilities for administration of Neon DIANA
Project description
Neon Diana
Device Independent API for Neon Applications (Diana) is a collection of microservices that provide various functionality to NeonAI systems. All services are implemented as standalone Docker containers.
Install the Diana utilities Python package with: pip install neon-diana-utils
The diana entrypoint is available to handle automated setup and some common administration tasks. You can see get detailed
help via diana --help.
Backend
The Neon Backend is a collection of services that are provided to client applications. Some backend services connect via a RabbitMQ server, while others are served via HTTP.
Prerequisites
python3is required to installneon-diana-utilskubectlandhelmare needed to apply the generated configurations
Configure Backend with diana
A Diana backend can be configured automatically with diana configure-backend. A standard example is included here, but
a description of config options is available via: diana configure-backend --help.
diana configure-mq-backend ~/neon_diana
~/neon_dianaspecifies the output path for configuration files
The above command will generate Helm charts and configuraiton files in
~/neon_diana/diana-backend. For Docker deployment, the diana.yaml and
rabbitmq.json files from this directory can be used.
Legacy Documentation
The below documentation is mostly applicable to Docker deployment of the Diana backend and is no longer fully-supported. Documentation is retained here for reference.
Orchestrator Configuration
The following sections describe how to initialize a standard backend with Docker or Kubernetes.
Docker Compose
For testing or running on a dedicated host, Docker Compose offers a simple method for starting a set of services.
This deployment assumes all services will run a single instance on a shared host with any configuration or other files
saved to the host filesystem or a configured NFS share. The configuration files
generated earlier are all that is necessary to start the backend with Docker Compose
Running Configured Backend Services
After a backend is configured, it can be started with diana start-backend. A standard example is included here, but
a description of config options is available via: diana start-backend --help.
Note: If running private containers, you will need to authenticate with Docker. Documentation is available from docker. Containers from NeonGecko are published to the
ghcr.ioserver
diana start-backend ~/neon_diana
~/neon_dianaspecifies the path to backend configuration
Stopping a Running Backend
After a backend is started, it can be stopped with diana stop-backend. A standard example is included here, but
a description of config options is available via: diana stop-backend --help.
diana stop-backend ~/neon_diana
~/neon_dianaspecifies the path to backend configuration
Kubernetes
For deployment, Kubernetes provides a managed solution that can handle scaling, rolling updates, and other benefits.
This deployment assumes you have an existing cluster; it is assumed that the Cluster or system administrator will manage
creation of PersistentVolume and LoadBalancer objects as necessary.
Cluster Preparation
The config generation in this project assumes your cluster has the NGINX Ingress Controller deployed.
Installation instructions are available from Kubernetes.
The ingress-nginx-controller service should have External Endpoints exposed. If you are deploying locally, you may use
MetalLB to configure a LoadBalancer.
The Kubernets Cluser References section below contains references to documentation and guides used to configure a cluster.
Providing GitHub Image Pull Secrets
For private container images, you will need to specify GitHub credentials. Documentation for creating GitHub Personal
Access Tokens can be found in the GitHub docs.
The configured token must have the permission: read:packages.
diana make-api-secrets -u <github_username> -t <github_pat> ~/neon_diana
Providing Backend Service Credentials
Kubernetes uses secrets to store sensitive data in a cluster.
Generate a Kubernetes secret spec with ngi_auth_vars.yml (k8s_secret_ngi-auth.yml).
diana make-api-secrets -p ~/.config/neon ~/neon_diana
-pspecifies the path to the directory containingngi_auth_vars.yml~/neon_dianaspecifies the output path for configuration files
Defining Ingress
TCP Services
diana includes cli utilities for generating ingress definitions for non-http services.
In general, ingress definitions will be created or updated when relevant backend services are configured, but
the diana add-tcp-service entrypoint is also available to define these manually. Note that adding configuration
will modify existing spec files in the configured path.
HTTP Services
diana includes cli utilities for generating ingress rules for http services when using ingress-nginx.
It is assumed that the ingress-nginx and cert-manager namespaced services are deployed as described
below and that A Records are defined for all configured subdomains.
HTTP Ingress is namespaced, so the configurations generated here must be applied to the same namespace
as the HTTP Services they forward to. The commands in this guide will assume everything is in the "default"
namespace unless otherwise specified.
# Create a certificate issuer (must be deployed to each namespace)
diana make-cert-issuer -e <email_address> ~/neon_diana
# Update an Ingress configuration for every HTTP service
diana add-ingress -s <service_name> -p <service_http_port> -h <url_for_service> ~/neon_diana
Applying Configuration to a Cluster
kubectl should be configured to reference the Kubernetes cluster you are deploying to.
If you are accessing private repositories, you will also need to configure the secret github-auth. Documentation
can be found in the Kubernetes docs.
# Apply configuration and secrets
kubectl apply -f ~/neon_diana/config/k8s_secret_mq-config.yml -f ~/neon_diana/config/k8s_config_rabbitmq.yml -f ~/neon_diana/k8s_secret_ngi-auth.yml
# If using ingress-nginx, apply those configurations
kubectl apply -f ~/neon_diana/ingress/k8s_config_tcp_services.yml
kubectl patch -n ingress-nginx service ingress-nginx-controller --patch-file ~/neon_diana/ingress/k8s_patch_nginx_service.yml
# If using HTTP services, apply ingress rules
kubectl apply -f ~/neon_diana/ingress/k8s_config_cert_issuer.yml -f ~/neon_diana/ingress/k8s_config_ingress.yml
# If using private images
kubectl apply -f ~/neon_diana/k8s_secret_github.yml
# Start backend services
kubectl apply -f ~/neon_diana/services/k8s_diana_backend.yml
Kubernetes Cluster References
The following configurations were used at the time of writing this document:
These guides also may be useful for configuration that isn't handled in this repository:
Certbot SSL
The definition below can be used to configure LetsEncrypt
apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
name: letsencrypt-prod
spec:
acme:
# The ACME server URL
server: https://acme-v02.api.letsencrypt.org/directory
# Email address used for ACME registration
email: ${CERT_EMAIL}
# Name of a secret used to store the ACME account private key
privateKeySecretRef:
name: letsencrypt-prod
# Enable the HTTP-01 challenge provider
solvers:
- http01:
ingress:
class: nginx
Ingress Definitions
The definition below can be used to configure ingress
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-backend
annotations:
cert-manager.io/issuer: "letsencrypt-prod"
spec:
tls:
- hosts:
- mqadmin.${domain}
secretName: ${domain}-tls
ingressClassName: nginx
rules:
- host: "mqadmin.${domain}"
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: neon-rabbitmq
port:
number: 15672
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file neon-diana-utils-0.0.6a12.tar.gz.
File metadata
- Download URL: neon-diana-utils-0.0.6a12.tar.gz
- Upload date:
- Size: 34.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.1 CPython/3.11.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1e4cce2eee7a4876953eb797553ce0b5ca6c7078afaba9ccda40a60dce443ffb
|
|
| MD5 |
91ddf77bef9f755abe45c16bda900fec
|
|
| BLAKE2b-256 |
921530b8f4547a1d1d18cdbfd029ef19876844bad7c22a8813d932d2a18df0a0
|
File details
Details for the file neon_diana_utils-0.0.6a12-py3-none-any.whl.
File metadata
- Download URL: neon_diana_utils-0.0.6a12-py3-none-any.whl
- Upload date:
- Size: 85.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.1 CPython/3.11.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
97bc8babb34a9e3d34eb9c68d2d40ce92e58e3c65e87d9d11efe9a2ccd3e9e31
|
|
| MD5 |
ab76279bbd0e37182b1b782f357fb35f
|
|
| BLAKE2b-256 |
2f0612edf3b95fa0b50a23520daafb9047ad59728e575d7181ad3439fe151a67
|