It is possible to add new attributes or overwrite an attribute from a base values.yaml file.
In the example below a default agent is deployed as a sidecar container.
Hoop uses Postgres as the backend storage of all data in the system.
It uses the schema private to create the tables of the system.
The command below creates a database and a user with privileges to access the database and the required schema.
Copy
Ask AI
CREATE DATABASE hoopdb;CREATE USER hoopuser WITH ENCRYPTED PASSWORD 'my-secure-password';-- switch to the created database\c hoopdbCREATE SCHEMA IF NOT EXISTS private;GRANT ALL PRIVILEGES ON DATABASE hoopdb TO hoopuser;GRANT ALL PRIVILEGES ON SCHEMA public to hoopuser;GRANT ALL PRIVILEGES ON SCHEMA private to hoopuser;GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO hoopuser;GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA private TO hoopuser;
In case of using a password with special characters, make sure to url encode it properly when setting the connection string.
Use these values to assemble the configuration for POSTGRES_DB_URI:
Starting from version 1.21.9, there is only one way to configure the agent key, which is by using the config.HOOP_KEY configuration. This requires creating a key in a DSN format in the API. To use legacy options, use the Helm chart version 1.21.4.
Local Authentication manages users and passwords locally and sign JWT access tokens to users.
Make sure to create a strong secret key for JWT_SECRET_KEY configuration, the command below generate a strong key as the value for this configuration:
Copy
Ask AI
openssl rand 64 | base64
Copy
Ask AI
config: POSTGRES_DB_URI: 'postgres://<user>:<pwd>@<db-host>:<port>/<dbname>' API_URL: 'https://hoopdev.yourdomain.tld' AUTH_METHOD: local JWT_SECRET_KEY: '<secure-secret-key>'
Local Authentication manages users and passwords locally and sign JWT access tokens to users.
Make sure to create a strong secret key for JWT_SECRET_KEY configuration, the command below generate a strong key as the value for this configuration:
Copy
Ask AI
openssl rand 64 | base64
Copy
Ask AI
config: POSTGRES_DB_URI: 'postgres://<user>:<pwd>@<db-host>:<port>/<dbname>' API_URL: 'https://hoopdev.yourdomain.tld' AUTH_METHOD: local JWT_SECRET_KEY: '<secure-secret-key>'
The Oauth2/OIDC authentication integrates with any identity provider that support these protocols. The users are managed on the identity provider.
We recommend using persistent volumes for session blobs to avoid losing sessions during outages or restarts. The following example shows how to enable a 100GB persistent volume when using AWS/EKS.
Copy
Ask AI
persistence: # -- Use persistent volume for write ahead log sessions enabled: true storageClassName: gp2 # -- Size of persistent volume claim size: 100Gi
This section covers the ingress configuration. The gateway requires exposing the ports HTTP/8009 and HTTP2/8010.
The ingress configuration establishes these two differing configurations based on the ingress controller in use.
AWS Load Balancer Controller is a controller to help manage Elastic Load Balancers for a Kubernetes cluster.
# HTTP/8009 - API / WebAppingressApi: enabled: true # the public DNS name host: 'hoopgateway.yourdomain.tld' # the ingress class, in this case alb ingressClassName: 'alb' annotations: # uses the ACM service to use a valid public certificate issued by AWS alb.ingress.kubernetes.io/certificate-arn: 'arn:aws:acm:...' # the group name allows resuing the same lb for both protocols (HTTP/gRPC) alb.ingress.kubernetes.io/group.name: 'hoopdev' alb.ingress.kubernetes.io/healthcheck-path: '/' alb.ingress.kubernetes.io/healthcheck-protocol: 'HTTP' alb.ingress.kubernetes.io/listen-ports: '[{"HTTPS": 443}]' alb.ingress.kubernetes.io/scheme: 'internet-facing' alb.ingress.kubernetes.io/ssl-redirect: '443' alb.ingress.kubernetes.io/target-type: 'ip'# HTTP/8010 - gRPC ServiceingressGrpc: enabled: true # the public DNS name host: 'hoopdev.yourdomain.tld' # the ingress class, in this case alb ingressClassName: 'alb' annotations: # configures the type of the protocol alb.ingress.kubernetes.io/backend-protocol-version: 'GRPC' # the certificate could be reused for the same protocol alb.ingress.kubernetes.io/certificate-arn: 'arn:aws:acm:...' # the group name allows resuing the same lb for both protocols (HTTP/gRPC) alb.ingress.kubernetes.io/group.name: 'hoopdev' alb.ingress.kubernetes.io/healthcheck-path: '/' alb.ingress.kubernetes.io/healthcheck-protocol: 'HTTP' alb.ingress.kubernetes.io/listen-ports: '[{"HTTPS": 8443}]' alb.ingress.kubernetes.io/scheme: 'internet-facing' alb.ingress.kubernetes.io/target-type: 'ip'
AWS Load Balancer Controller is a controller to help manage Elastic Load Balancers for a Kubernetes cluster.
# HTTP/8009 - API / WebAppingressApi: enabled: true # the public DNS name host: 'hoopgateway.yourdomain.tld' # the ingress class, in this case alb ingressClassName: 'alb' annotations: # uses the ACM service to use a valid public certificate issued by AWS alb.ingress.kubernetes.io/certificate-arn: 'arn:aws:acm:...' # the group name allows resuing the same lb for both protocols (HTTP/gRPC) alb.ingress.kubernetes.io/group.name: 'hoopdev' alb.ingress.kubernetes.io/healthcheck-path: '/' alb.ingress.kubernetes.io/healthcheck-protocol: 'HTTP' alb.ingress.kubernetes.io/listen-ports: '[{"HTTPS": 443}]' alb.ingress.kubernetes.io/scheme: 'internet-facing' alb.ingress.kubernetes.io/ssl-redirect: '443' alb.ingress.kubernetes.io/target-type: 'ip'# HTTP/8010 - gRPC ServiceingressGrpc: enabled: true # the public DNS name host: 'hoopdev.yourdomain.tld' # the ingress class, in this case alb ingressClassName: 'alb' annotations: # configures the type of the protocol alb.ingress.kubernetes.io/backend-protocol-version: 'GRPC' # the certificate could be reused for the same protocol alb.ingress.kubernetes.io/certificate-arn: 'arn:aws:acm:...' # the group name allows resuing the same lb for both protocols (HTTP/gRPC) alb.ingress.kubernetes.io/group.name: 'hoopdev' alb.ingress.kubernetes.io/healthcheck-path: '/' alb.ingress.kubernetes.io/healthcheck-protocol: 'HTTP' alb.ingress.kubernetes.io/listen-ports: '[{"HTTPS": 8443}]' alb.ingress.kubernetes.io/scheme: 'internet-facing' alb.ingress.kubernetes.io/target-type: 'ip'
The Nginx Ingress Controller is an Ingress controller for Kubernetes using NGINX as a reverse proxy and load balancer.
This setup requires deploying a network load balancer (Layer 4) in your cloud provider.
The external Application Load Balancer is a proxy-based Layer 7 load balancer that enables you to run and scale your services behind a single external IP address.
See the Architecture Overview.
The Classic ALB doesn’t support establishing HTTP/2 connections with the Hoop Gateway without TLS.
To accommodate this requirement, TLS certificates must be configured both on the ALB and within the Hoop Gateway
to establish secure communication between these components.
Make sure to install the Root Certificate Authority in your browser/system
to be able to visit the Web App. The browser won’t allow access due to HSTS policy.
This step is not necessary when using certificates issued by a known entity.
Export the certificates for setting up the helm chart
mainService.annotations attribute allows adding an annotation mapping. GCP for instance configure aspects of how to configure the load balancer based on this configuration
mainService.httpBackendConfig: It creates the hoopgateway-http Backend Config resource when this attribute is set. It could be referenced using the annotation beta.cloud.google.com/backend-config
healthCheckType: The protocol used by probe systems for health checking. The BackendConfig only supports creating health checks using the HTTP, HTTPS, or HTTP2
timeoutSec: The amount of time in seconds that Google Cloud waits for a response to a probe.
mainService.grpcBackendConfig: It creates the hoopgateway-grpc Backend Config resource when this attribute is set. It could be referenced using the annotation beta.cloud.google.com/backend-config
healthCheckType: The protocol used by probe systems for health checking. The BackendConfig only supports creating health checks using the HTTP, HTTPS, or HTTP2
timeoutSec: The amount of time in seconds that Google Cloud waits for a response to a probe.
The helm-chart defaults to 1vCPU and 1GB, which is suitable for evaluation purposes only.
For production setups, we recommend allocating at least 8GB/4vCPU to the gateway process.
The grpcHost allows configuring the host to connect when starting the agent.
In case the gateway has TLS configured (TLS_CA env set), the host must match the certificate SAN.
This configuration describes a pod that has a node selector, disktype: ssd. This means that the pod will get scheduled on a node that has a disktype=ssd label.
If you prefer using manifests over Helm, we recommend this approach. It allows you to track any modifications to the chart whenever a new version appears. You can apply a diff to your versioned files to identify what has been altered.