mirror of
https://github.com/helm/charts.git
synced 2026-08-23 22:37:45 +00:00
[stable/hlf-ca] Support MySQL, Postgres and External Database (#8610)
* Update README.md to declare persistence.existingClaim value Signed-off-by: Nicolas Huray <nhuray@estateably.com> * Define helm dependency to install postgres or mysql Signed-off-by: Nicolas Huray <nhuray@estateably.com> * Check the database type at container startup Signed-off-by: Nicolas Huray <nhuray@estateably.com> * Configure mysql to work with the Fabric CA schema Signed-off-by: Nicolas Huray <nhuray@estateably.com> * Add template in _helpers.tpl Signed-off-by: Nicolas Huray <nhuray@estateably.com> * Handle the case the port is not passed when setup an external DB Signed-off-by: Nicolas Huray <nhuray@estateably.com> * Update the README.md Signed-off-by: Nicolas Huray <nhuray@estateably.com> * Fix linting errors Signed-off-by: Nicolas Huray <nhuray@estateably.com> * Define an initContainer to wait for database availability Signed-off-by: Nicolas Huray <nhuray@estateably.com> * Add missing liveness and readiness probes Signed-off-by: Nicolas Huray <nhuray@estateably.com> * Update helm dependency Signed-off-by: Nicolas Huray <nhuray@estateably.com> * Update README.md Signed-off-by: Nicolas Huray <nhuray@estateably.com>
This commit is contained in:
committed by
k8s-ci-robot
parent
7e73d8a9b9
commit
89de49569b
@@ -1,7 +1,7 @@
|
||||
apiVersion: v1
|
||||
description: Hyperledger Fabric Certificate Authority chart (these charts are created by AID:Tech and are currently not directly associated with the Hyperledger project)
|
||||
name: hlf-ca
|
||||
version: 1.1.0
|
||||
version: 1.1.1
|
||||
appVersion: 1.2.0
|
||||
keywords:
|
||||
- blockchain
|
||||
|
||||
+47
-2
@@ -81,6 +81,7 @@ The following table lists the configurable parameters of the Hyperledger Fabric
|
||||
| `ingress.path` | Ingress path | `/` |
|
||||
| `ingress.hosts` | Ingress hostnames | `[]` |
|
||||
| `ingress.tls` | Ingress TLS configuration | `[]` |
|
||||
| `persistence.existingClaim` | Name of an existing PVC to use for Fabric CA | `nil` |
|
||||
| `persistence.accessMode` | Use volume as ReadOnly or ReadWrite | `ReadWriteOnce` |
|
||||
| `persistence.annotations` | Persistent Volume annotations | `{}` |
|
||||
| `persistence.size` | Size of data volume | `1Gi` |
|
||||
@@ -88,8 +89,15 @@ The following table lists the configurable parameters of the Hyperledger Fabric
|
||||
| `adminUsername` | Admin Username for CA | `admin` |
|
||||
| `adminPassword` | Admin Password | Random 24 alphanumeric characters |
|
||||
| `caName` | Name of CA | `org1-ca` |
|
||||
| `db.chart` | Name of a Database Chart holding CA data | `` supports postgresql |
|
||||
| `db.database` | Name of the actual Database holding the CA data | `fabric_ca` |
|
||||
| `db.ssl` | SSL Authentication | `disable` |
|
||||
| `postgresql.enabled` | Deploy a PostgreSQL container holding the CA data | `false` |
|
||||
| `mysql.enabled` | Deploy a MySQL container holding the CA data | `false` |
|
||||
| `externalDatabase.type` | Database type (either `postgres` or `mysql` ) | `nil` |
|
||||
| `externalDatabase.host` | Host of the external database | `localhost` |
|
||||
| `externalDatabase.username` | Existing username in the external db | `` |
|
||||
| `externalDatabase.password` | Password for the above username | `` |
|
||||
| `externalDatabase.database` | Name of the existing database | `` |
|
||||
| `externalDatabase.port` | Database port number | `` |
|
||||
| `config.hlfToolsVersion` | Version of Hyperledger Fabric tools used | `1.1.0` |
|
||||
| `config.mountTLS` | If TLS secrets are generated, do we mount them? | `false` |
|
||||
| `config.debug` | Enable debug logging | `true` |
|
||||
@@ -109,6 +117,43 @@ The following table lists the configurable parameters of the Hyperledger Fabric
|
||||
| `tolerations` | Toleration labels for pod assignment | `[]` |
|
||||
| `affinity` | Affinity settings for pod assignment | `{}` |
|
||||
|
||||
## Database
|
||||
|
||||
The Fabric CA server needs a database to store the users registered.
|
||||
|
||||
By default the chart is configured to use an in-memory `sqlite3` database, but you can also configure the helm chart to install a `PostgreSQL` or a `MySQL` database along the Fabric CA server.
|
||||
|
||||
### PostgreSQL
|
||||
|
||||
To install a `postgresql` running in Kubernetes you have to enable and configure the `postgresql` section in `values.yaml` or pass the following parameter:
|
||||
|
||||
```
|
||||
helm install stable/hlf-ca --name org1-ca --set postgresql.enabled=true
|
||||
```
|
||||
|
||||
### MySQL
|
||||
|
||||
To install a `mysql` running in Kubernetes you have to enable and configure the `mysql` section in `values.yaml` or pass the following parameter:
|
||||
|
||||
```
|
||||
helm install stable/hlf-ca --name org1-ca --set mysql.enabled=true
|
||||
```
|
||||
|
||||
### External Database
|
||||
|
||||
In case you already setup a database (`postgres` or `mysql`), you can enable and configure the `externalDatabase` section in `values.yaml` or pass the following parameters:`
|
||||
|
||||
```
|
||||
helm install stable/hlf-ca --name org1-ca \
|
||||
--set externalDatabase.type=mysql \
|
||||
--set externalDatabase.host=myhost \
|
||||
--set externalDatabase.username=myuser \
|
||||
--set externalDatabase.password=mypassword \
|
||||
--set externalDatabase.database=mydatabase
|
||||
```
|
||||
|
||||
Please consult the [documentation](https://hyperledger-fabric-ca.readthedocs.io/en/latest/users-guide.html?highlight=database#configuring-the-database) for mode details.
|
||||
|
||||
## Persistence
|
||||
|
||||
The volume stores the Fabric_CA data and configurations at the `/var/hyperledger` path of the container.
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
dependencies:
|
||||
- name: postgresql
|
||||
repository: https://kubernetes-charts.storage.googleapis.com/
|
||||
version: 1.0.0
|
||||
- name: mysql
|
||||
repository: https://kubernetes-charts.storage.googleapis.com/
|
||||
version: 0.10.1
|
||||
digest: sha256:1b5b212945abc2abc2317189f0d048b1c90f093db8ed5482db2c35a9d463259f
|
||||
generated: 2018-10-22T16:32:44.32018675-04:00
|
||||
@@ -0,0 +1,14 @@
|
||||
dependencies:
|
||||
- name: postgresql
|
||||
version: x.x.x
|
||||
repository: https://kubernetes-charts.storage.googleapis.com/
|
||||
condition: postgresql.enabled
|
||||
tags:
|
||||
- postgres-database
|
||||
|
||||
- name: mysql
|
||||
version: x.x.x
|
||||
repository: https://kubernetes-charts.storage.googleapis.com/
|
||||
condition: mysql.enabled
|
||||
tags:
|
||||
- mysql-database
|
||||
@@ -43,3 +43,17 @@ heritage: {{ .Release.Service | quote }}
|
||||
release: {{ .Release.Name | quote }}
|
||||
chart: {{ include "hlf-ca.chart" . }}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Generate postgres chart name
|
||||
*/}}
|
||||
{{- define "postgresql.fullname" -}}
|
||||
{{- printf "%s-%s" .Release.Name "postgresql" | trunc 63 | trimSuffix "-" -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Generate mysql chart name
|
||||
*/}}
|
||||
{{- define "mysql.fullname" -}}
|
||||
{{- printf "%s-%s" .Release.Name "mysql" | trunc 63 | trimSuffix "-" -}}
|
||||
{{- end -}}
|
||||
|
||||
@@ -5,14 +5,33 @@ metadata:
|
||||
labels:
|
||||
{{ include "labels.standard" . | indent 4 }}
|
||||
data:
|
||||
# TODO: Enable multiple types of database, not only PostgreSQL
|
||||
DB_TYPE: postgres
|
||||
DB_USERNAME: postgres
|
||||
DB_DATABASE: {{ .Values.db.database | quote }}
|
||||
{{- if .Values.db.chart }}
|
||||
DB_HOST: {{ .Values.db.chart }}.{{ .Release.Namespace }}.svc.cluster.local
|
||||
{{- else }}
|
||||
DB_HOST: localhost
|
||||
DB_SSL: {{ .Values.db.ssl | quote }}
|
||||
{{- if .Values.postgresql.enabled }}
|
||||
# PostgreSQL Database
|
||||
DB_TYPE: "postgres"
|
||||
DB_HOST: {{ template "postgresql.fullname" . }}
|
||||
DB_PORT: {{ .Values.postgresql.port | quote }}
|
||||
DB_USERNAME: {{ .Values.postgresql.postgresUser | quote }}
|
||||
DB_DATABASE: {{ .Values.postgresql.postgresDatabase | quote }}
|
||||
{{- end }}
|
||||
DB_PORT: "5432"
|
||||
DB_SSL: disable
|
||||
{{- if .Values.mysql.enabled }}
|
||||
# MySQL Database
|
||||
DB_TYPE: "mysql"
|
||||
DB_HOST: {{ template "mysql.fullname" . }}
|
||||
DB_PORT: "3306"
|
||||
DB_USERNAME: {{ .Values.mysql.mysqlUser | quote }}
|
||||
DB_DATABASE: {{ .Values.mysql.mysqlDatabase | quote }}
|
||||
{{- end }}
|
||||
{{- if .Values.externalDatabase.type }}
|
||||
# External Database
|
||||
DB_TYPE: {{ .Values.externalDatabase.type | quote }}
|
||||
DB_HOST: {{ .Values.externalDatabase.host | quote }}
|
||||
{{- if eq .Values.externalDatabase.type "mysql" }}
|
||||
DB_PORT: {{ .Values.externalDatabase.port | default "3306" | quote }}
|
||||
{{- end }}
|
||||
{{- if eq .Values.externalDatabase.type "postgres" }}
|
||||
DB_PORT: {{ .Values.externalDatabase.port | default "5432" | quote }}
|
||||
{{- end }}
|
||||
DB_USERNAME: {{ .Values.externalDatabase.username | quote }}
|
||||
DB_DATABASE: {{ .Values.externalDatabase.database | quote }}
|
||||
{{- end }}
|
||||
@@ -30,55 +30,95 @@ spec:
|
||||
{{- end }}
|
||||
- name: ca-config
|
||||
configMap:
|
||||
name: {{ include "hlf-ca.fullname" . }}--config
|
||||
name: {{ include "hlf-ca.fullname" . }}--config
|
||||
initContainers:
|
||||
- name: wait-for-db
|
||||
image: jwilder/dockerize
|
||||
imagePullPolicy: IfNotPresent
|
||||
envFrom:
|
||||
- configMapRef:
|
||||
name: {{ include "hlf-ca.fullname" . }}--db
|
||||
command:
|
||||
- sh
|
||||
- -c
|
||||
- |
|
||||
if [ -n "$DB_TYPE" ]; then
|
||||
dockerize -wait tcp://$DB_HOST:$DB_PORT -timeout 30s && echo "Database $DB_TYPE on $DB_HOST:$DB_PORT is ready"
|
||||
fi
|
||||
containers:
|
||||
- name: ca
|
||||
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
|
||||
imagePullPolicy: {{ .Values.image.pullPolicy }}
|
||||
# TODO: Add liveness and readiness probes (for health checks)
|
||||
command:
|
||||
- sh
|
||||
- -c
|
||||
- |
|
||||
while [ -z ${DB_PASSWORD+x} ];
|
||||
do
|
||||
echo "\033[0;31m DB_PASSWORD environmental variable must contain a value (check that you specified 'db.chart' in values.yaml) \033[0m"
|
||||
sleep 60
|
||||
done
|
||||
if [ -n "$DB_TYPE" ]; then
|
||||
while [ -z ${DB_PASSWORD+x} ];
|
||||
do
|
||||
echo "\033[0;31mDB_PASSWORD environmental variable must contain a value \033[0m"
|
||||
sleep 60
|
||||
done
|
||||
|
||||
case "$DB_TYPE" in
|
||||
postgres)
|
||||
export DB_DATASOURCE="host=${DB_HOST} port=${DB_PORT} user=${DB_USERNAME} password=${DB_PASSWORD} dbname=${DB_DATABASE} sslmode=${DB_SSL}";;
|
||||
mysql)
|
||||
export DB_DATASOURCE="${DB_USERNAME}:${DB_PASSWORD}@tcp(${DB_HOST}:${DB_PORT})/${DB_DATABASE}?parseTime=true" ;;
|
||||
*)
|
||||
echo "\033[0;31m Database type '$DB_TYPE' not supported\033[0m"; exit 1;;
|
||||
esac
|
||||
fi
|
||||
|
||||
export DB_DATASOURCE="host=${DB_HOST} port=${DB_PORT} user=${DB_USERNAME} password=${DB_PASSWORD} dbname=${DB_DATABASE} sslmode=${DB_SSL}"
|
||||
mkdir -p $FABRIC_CA_HOME
|
||||
cp /var/hyperledger/ca_config/ca.yaml $FABRIC_CA_HOME/fabric-ca-server-config.yaml
|
||||
sed -i "s/<<<ADMIN>>>/${CA_ADMIN}/g" ${FABRIC_CA_HOME}/fabric-ca-server-config.yaml
|
||||
sed -i "s/<<<ADMINPW>>>/${CA_PASSWORD}/g" $FABRIC_CA_HOME/fabric-ca-server-config.yaml
|
||||
sed -i "s/<<<DB_TYPE>>>/${DB_TYPE}/g" $FABRIC_CA_HOME/fabric-ca-server-config.yaml
|
||||
sed -i "s/<<<DB_DATASOURCE>>>/${DB_DATASOURCE}/g" $FABRIC_CA_HOME/fabric-ca-server-config.yaml
|
||||
sed -i "s|<<<ADMIN>>>|${CA_ADMIN}|g" ${FABRIC_CA_HOME}/fabric-ca-server-config.yaml
|
||||
sed -i "s|<<<ADMINPW>>>|${CA_PASSWORD}|g" $FABRIC_CA_HOME/fabric-ca-server-config.yaml
|
||||
sed -i "s|<<<DB_TYPE>>>|${DB_TYPE:-"sqlite3"}|g" $FABRIC_CA_HOME/fabric-ca-server-config.yaml
|
||||
sed -i "s|<<<DB_DATASOURCE>>>|${DB_DATASOURCE:-"fabric-ca-server.db"}|g" $FABRIC_CA_HOME/fabric-ca-server-config.yaml
|
||||
|
||||
{{- if .Values.config.intermediate }}
|
||||
echo ">\033[0;33m Adding Parent CA (typically a Root CA) values to $FABRIC_CA_HOME/fabric-ca-server-config.yaml \033[0m"
|
||||
sed -i "s/<<<PARENT_ADMIN>>>/${PARENT_CA_ADMIN}/g" $FABRIC_CA_HOME/fabric-ca-server-config.yaml
|
||||
sed -i "s/<<<PARENT_ADMINPW>>>/${PARENT_CA_PASSWORD}/g" $FABRIC_CA_HOME/fabric-ca-server-config.yaml
|
||||
echo ">\033[0;33m Adding Parent CA (typically a Root CA) values to $FABRIC_CA_HOME/fabric-ca-server-config.yaml\033[0m"
|
||||
sed -i "s|<<<PARENT_ADMIN>>>|${PARENT_CA_ADMIN}|g" $FABRIC_CA_HOME/fabric-ca-server-config.yaml
|
||||
sed -i "s|<<<PARENT_ADMINPW>>>|${PARENT_CA_PASSWORD}|g" $FABRIC_CA_HOME/fabric-ca-server-config.yaml
|
||||
{{- end}}
|
||||
|
||||
echo ">\033[0;35m fabric-ca-server start \033[0m"
|
||||
fabric-ca-server start
|
||||
envFrom:
|
||||
- secretRef:
|
||||
name: {{ include "hlf-ca.fullname" . }}
|
||||
name: {{ include "hlf-ca.fullname" . }}--ca
|
||||
- configMapRef:
|
||||
name: {{ include "hlf-ca.fullname" . }}--db
|
||||
- configMapRef:
|
||||
name: {{ include "hlf-ca.fullname" . }}--ca
|
||||
env:
|
||||
# Database environmental variable
|
||||
{{- if .Values.db.chart }}
|
||||
{{- if .Values.postgresql.enabled}}
|
||||
# PostgreSQL Database
|
||||
- name: DB_PASSWORD
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: {{ .Values.db.chart | quote }}
|
||||
name: {{ template "postgresql.fullname" . }}
|
||||
key: postgres-password
|
||||
{{- end }}
|
||||
{{- if .Values.mysql.enabled }}
|
||||
# MySQL Database
|
||||
- name: DB_PASSWORD
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: {{ template "mysql.fullname" . }}
|
||||
key: mysql-password
|
||||
{{- end }}
|
||||
{{- if .Values.externalDatabase.type }}
|
||||
# External Database
|
||||
- name: DB_PASSWORD
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: {{ include "hlf-ca.fullname" . }}--db
|
||||
key: db-password
|
||||
{{- end }}
|
||||
{{- if .Values.config.intermediate }}
|
||||
# Intermediate CA
|
||||
- name: PARENT_CA_ADMIN
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
@@ -94,6 +134,14 @@ spec:
|
||||
- name: ca-port
|
||||
containerPort: 7054
|
||||
protocol: TCP
|
||||
livenessProbe:
|
||||
httpGet:
|
||||
path: /cainfo
|
||||
port: 7054
|
||||
readinessProbe:
|
||||
httpGet:
|
||||
path: /cainfo
|
||||
port: 7054
|
||||
volumeMounts:
|
||||
- name: data
|
||||
mountPath: /var/hyperledger
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
apiVersion: v1
|
||||
kind: Secret
|
||||
metadata:
|
||||
name: {{ include "hlf-ca.fullname" . }}
|
||||
name: {{ include "hlf-ca.fullname" . }}--ca
|
||||
labels:
|
||||
{{ include "labels.standard" . | indent 4 }}
|
||||
type: Opaque
|
||||
@@ -0,0 +1,11 @@
|
||||
{{- if .Values.externalDatabase.type }}
|
||||
apiVersion: v1
|
||||
kind: Secret
|
||||
metadata:
|
||||
name: {{ include "hlf-ca.fullname" . }}--db
|
||||
labels:
|
||||
{{ include "labels.standard" . | indent 4 }}
|
||||
type: Opaque
|
||||
data:
|
||||
db-password: {{ .Values.externalDatabase.password | b64enc | quote }}
|
||||
{{- end }}
|
||||
@@ -49,10 +49,64 @@ adminUsername: admin
|
||||
## Name of CA, stored in FABRIC_CA_SERVER_CA_NAME (and the configMap "--config", if deploying a Root CA)
|
||||
caName: org1-ca
|
||||
|
||||
## Settings used in configMap "--db"
|
||||
##
|
||||
## Fabric CA Database
|
||||
## By default an sqlite3 in-memory database is used
|
||||
## To install a 'postgresql' or 'mysql' database, enable and configure the configuration below
|
||||
##################################
|
||||
##
|
||||
db:
|
||||
# chart: postgres-ca-postgresql
|
||||
database: fabric_ca
|
||||
# SSL authentication
|
||||
# Supported values are: "disable", "require", "verify-ca" and "verify-full".
|
||||
# https://github.com/hyperledger/fabric-ca/blob/master/docs/source/users-guide.rst
|
||||
ssl: disable
|
||||
|
||||
##
|
||||
## PostgreSQL chart configuration
|
||||
##
|
||||
## https://github.com/helm/charts/tree/master/stable/postgresql
|
||||
##
|
||||
postgresql:
|
||||
## Whether to deploy a postgres server to satisfy the Fabric CA database requirements.
|
||||
# To use an external database set this to false and configure the externalDatabase parameters, specifying the type to 'postgres'
|
||||
enabled: false
|
||||
image: "postgres"
|
||||
imageTag: "9.6.2"
|
||||
port: 5432
|
||||
postgresDatabase: fabric_ca
|
||||
postgresUser: fabric_ca
|
||||
|
||||
##
|
||||
## MySQL chart configuration
|
||||
##
|
||||
## https://github.com/helm/charts/tree/master/stable/mysql
|
||||
##
|
||||
mysql:
|
||||
## Whether to deploy a mysql server to satisfy the Fabric CA database requirements.
|
||||
# To use an external database set this to false and configure the externalDatabase parameters, specifying the type to 'mysql'
|
||||
enabled: false
|
||||
image: "mysql"
|
||||
imageTag: "5.7.14"
|
||||
mysqlDatabase: fabric_ca
|
||||
mysqlUser: fabric_ca
|
||||
# Custom mysql configuration to remove SQL Mode NO_ZERO_DATE because the Fabric CA schema defines TIMESTAMP to 0 by default
|
||||
# https://dev.mysql.com/doc/refman/5.7/en/sql-mode.html
|
||||
configurationFiles:
|
||||
mysql.cnf: |-
|
||||
[mysqld]
|
||||
sql-mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
|
||||
|
||||
##
|
||||
## External Database configuration (MySQL or PostgresSQL install outside Kubernetes)
|
||||
##
|
||||
externalDatabase:
|
||||
# Either postgres or mysql
|
||||
type:
|
||||
host: ""
|
||||
port: ""
|
||||
database: ""
|
||||
username: ""
|
||||
password: ""
|
||||
|
||||
## Settings used in configMap "--config"
|
||||
config:
|
||||
|
||||
Reference in New Issue
Block a user