Skip to content

Commit bb360d9

Browse files
committed
K8SPS-421: Add keyring vault support
1 parent d61c487 commit bb360d9

File tree

14 files changed

+309
-167
lines changed

14 files changed

+309
-167
lines changed

api/v1alpha1/perconaservermysql_types.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import (
2626
"strings"
2727

2828
cmmeta "github.com/cert-manager/cert-manager/pkg/apis/meta/v1"
29+
v "github.com/hashicorp/go-version"
2930
"github.com/pkg/errors"
3031
"github.com/robfig/cron/v3"
3132
"golang.org/x/text/cases"
@@ -118,6 +119,8 @@ type MySQLSpec struct {
118119
SidecarVolumes []corev1.Volume `json:"sidecarVolumes,omitempty"`
119120
SidecarPVCs []SidecarPVC `json:"sidecarPVCs,omitempty"`
120121

122+
VaultSecretName string `json:"vaultSecretName,omitempty"`
123+
121124
PodSpec `json:",inline"`
122125
}
123126

@@ -566,6 +569,16 @@ func (cr *PerconaServerMySQL) SetVersion() {
566569
cr.Spec.CRVersion = version.Version()
567570
}
568571

572+
func (cr *PerconaServerMySQL) Version() *v.Version {
573+
return v.Must(v.NewVersion(cr.Spec.CRVersion))
574+
}
575+
576+
// CompareVersion compares given version to current version.
577+
// Returns -1, 0, or 1 if given version is smaller, equal, or larger than the current version, respectively.
578+
func (cr *PerconaServerMySQL) CompareVersion(ver string) int {
579+
return cr.Version().Compare(v.Must(v.NewVersion(ver)))
580+
}
581+
569582
// CheckNSetDefaults validates and sets default values for the PerconaServerMySQL custom resource.
570583
func (cr *PerconaServerMySQL) CheckNSetDefaults(_ context.Context, serverVersion *platform.ServerVersion) error {
571584
if len(cr.Spec.MySQL.ClusterType) == 0 {

build/ps-entrypoint.sh

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,26 @@ create_default_cnf() {
167167
sed -i "/\[mysqld\]/a ssl_key=${TLS_DIR}/tls.key" $CFG
168168
fi
169169

170+
# if vault secret file exists we assume we need to turn on encryption
171+
vault_secret="/etc/mysql/vault-keyring-secret/keyring_vault.conf"
172+
if [[ -f "${vault_secret}" ]]; then
173+
sed -i "/\[mysqld\]/a early-plugin-load=keyring_vault.so" $CFG
174+
sed -i "/\[mysqld\]/a keyring_vault_config=${vault_secret}" $CFG
175+
176+
if [[ ${MYSQL_VERSION} =~ ^(8\.0|8\.4)$ ]]; then
177+
sed -i "/\[mysqld\]/a default_table_encryption=ON" $CFG
178+
sed -i "/\[mysqld\]/a table_encryption_privilege_check=ON" $CFG
179+
sed -i "/\[mysqld\]/a innodb_undo_log_encrypt=ON" $CFG
180+
sed -i "/\[mysqld\]/a innodb_redo_log_encrypt=ON" $CFG
181+
sed -i "/\[mysqld\]/a binlog_encryption=ON" $CFG
182+
sed -i "/\[mysqld\]/a binlog_rotate_encryption_master_key_at_startup=ON" $CFG
183+
sed -i "/\[mysqld\]/a innodb_temp_tablespace_encrypt=ON" $CFG
184+
sed -i "/\[mysqld\]/a innodb_parallel_dblwr_encrypt=ON" $CFG
185+
sed -i "/\[mysqld\]/a innodb_encrypt_online_alter_logs=ON" $CFG
186+
sed -i "/\[mysqld\]/a encrypt_tmp_files=ON" $CFG
187+
fi
188+
fi
189+
170190
for f in "${CUSTOM_CONFIG_FILES[@]}"; do
171191
echo "${f}"
172192
if [ -f "${f}" ]; then

build/run-restore.sh

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,13 @@ main() {
4141
"azure") run_azure | extract "${tmpdir}" ;;
4242
esac
4343

44-
xtrabackup --prepare --rollback-prepared-trx --target-dir="${tmpdir}"
44+
local keyring=""
45+
if [[ -f ${KEYRING_VAULT_PATH} ]]; then
46+
echo "Using keyring vault config: ${KEYRING_VAULT_PATH}"
47+
keyring="--keyring-vault-config=${KEYRING_VAULT_PATH}"
48+
fi
49+
50+
xtrabackup --prepare --rollback-prepared-trx --target-dir="${tmpdir}" ${keyring}
4551
xtrabackup --datadir="${DATADIR}" --move-back --force-non-empty-directories --target-dir="${tmpdir}"
4652

4753
rm -rf "${tmpdir}"

config/crd/bases/ps.percona.com_perconaservermysqls.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5001,6 +5001,8 @@ spec:
50015001
- whenUnsatisfiable
50025002
type: object
50035003
type: array
5004+
vaultSecretName:
5005+
type: string
50045006
volumeSpec:
50055007
properties:
50065008
emptyDir:

deploy/bundle.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6924,6 +6924,8 @@ spec:
69246924
- whenUnsatisfiable
69256925
type: object
69266926
type: array
6927+
vaultSecretName:
6928+
type: string
69276929
volumeSpec:
69286930
properties:
69296931
emptyDir:

deploy/cr.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ spec:
4242
image: perconalab/percona-server-mysql-operator:main-psmysql
4343
imagePullPolicy: Always
4444
# initImage: perconalab/percona-server-mysql-operator:main
45+
# vaultSecretName: cluster1-vault
4546
size: 3
4647

4748
# env:

deploy/crd.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6924,6 +6924,8 @@ spec:
69246924
- whenUnsatisfiable
69256925
type: object
69266926
type: array
6927+
vaultSecretName:
6928+
type: string
69276929
volumeSpec:
69286930
properties:
69296931
emptyDir:

deploy/cw-bundle.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6924,6 +6924,8 @@ spec:
69246924
- whenUnsatisfiable
69256925
type: object
69266926
type: array
6927+
vaultSecretName:
6928+
type: string
69276929
volumeSpec:
69286930
properties:
69296931
emptyDir:

deploy/vault-secret.yaml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
apiVersion: v1
2+
kind: Secret
3+
metadata:
4+
name: cluster1-vault
5+
type: Opaque
6+
stringData:
7+
keyring_vault.conf: |-
8+
token = <secret>
9+
vault_url = http://vault-service.vault-service.svc.cluster.local:8200
10+
secret_mount_point = secret

e2e-tests/conf/vault-secret.yaml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
apiVersion: v1
2+
kind: Secret
3+
metadata:
4+
name: some-name-vault
5+
type: Opaque
6+
stringData:
7+
keyring_vault.conf: |-
8+
token = #token
9+
vault_url = #vault_url
10+
secret_mount_point = #secret
11+
#vault_ca = /etc/mysql/vault-keyring-secret/ca.cert
12+
ca.cert: |-
13+
#certVal

0 commit comments

Comments
 (0)