Merge 7bb4ecce42 into 1af4c50ed0
				
					
				
			This commit is contained in:
		
						commit
						b364e51cbd
					
				
							
								
								
									
										11
									
								
								docs/user.md
								
								
								
								
							
							
						
						
									
										11
									
								
								docs/user.md
								
								
								
								
							|  | @ -96,10 +96,11 @@ psql -U postgres -h localhost -p 6432 | |||
| 
 | ||||
| ## Password encryption | ||||
| 
 | ||||
| Passwords are encrypted with `md5` hash generation by default. However, it is | ||||
| possible to use the more recent `scram-sha-256` method by changing the | ||||
| `password_encryption` parameter in the Postgres config. You can define it | ||||
| directly from the cluster manifest: | ||||
| Passwords are encrypted using the `scram-sha-256` hashing method by default. However, it is possible to use the `md5` method by changing the `password_encryption` parameter in the PostgreSQL configuration. | ||||
| 
 | ||||
| > **Note:** `md5` authentication is deprecated in PostgreSQL. | ||||
| 
 | ||||
| You can also define this parameter directly in the cluster manifest: | ||||
| 
 | ||||
| ```yaml | ||||
| apiVersion: "acid.zalan.do/v1" | ||||
|  | @ -1053,7 +1054,7 @@ spec: | |||
|     - all | ||||
|     volumeSource: | ||||
|       emptyDir: {} | ||||
|   sidecars:  | ||||
|   sidecars: | ||||
|   - name: "container-name" | ||||
|     image: "company/image:tag" | ||||
|     volumeMounts: | ||||
|  |  | |||
|  | @ -133,7 +133,7 @@ func New(cfg Config, kubeClient k8sutil.KubernetesClient, pgSpec acidv1.Postgres | |||
| 	}) | ||||
| 	passwordEncryption, ok := pgSpec.Spec.PostgresqlParam.Parameters["password_encryption"] | ||||
| 	if !ok { | ||||
| 		passwordEncryption = "md5" | ||||
| 		passwordEncryption = "scram-sha-256" | ||||
| 	} | ||||
| 
 | ||||
| 	cluster := &Cluster{ | ||||
|  |  | |||
|  | @ -33,8 +33,8 @@ const ( | |||
| 	replicationUserName = "standby" | ||||
| 	poolerUserName      = "pooler" | ||||
| 	adminUserName       = "admin" | ||||
| 	exampleSpiloConfig  = `{"postgresql":{"bin_dir":"/usr/lib/postgresql/12/bin","parameters":{"autovacuum_analyze_scale_factor":"0.1"},"pg_hba":["hostssl all all 0.0.0.0/0 md5","host all all 0.0.0.0/0 md5"]},"bootstrap":{"initdb":[{"auth-host":"md5"},{"auth-local":"trust"},"data-checksums",{"encoding":"UTF8"},{"locale":"en_US.UTF-8"}],"dcs":{"ttl":30,"loop_wait":10,"retry_timeout":10,"maximum_lag_on_failover":33554432,"postgresql":{"parameters":{"max_connections":"100","max_locks_per_transaction":"64","max_worker_processes":"4"}}}}}` | ||||
| 	spiloConfigDiff     = `{"postgresql":{"bin_dir":"/usr/lib/postgresql/12/bin","parameters":{"autovacuum_analyze_scale_factor":"0.1"},"pg_hba":["hostssl all all 0.0.0.0/0 md5","host all all 0.0.0.0/0 md5"]},"bootstrap":{"initdb":[{"auth-host":"md5"},{"auth-local":"trust"},"data-checksums",{"encoding":"UTF8"},{"locale":"en_US.UTF-8"}],"dcs":{"loop_wait":10,"retry_timeout":10,"maximum_lag_on_failover":33554432,"postgresql":{"parameters":{"max_locks_per_transaction":"64","max_worker_processes":"4"}}}}}` | ||||
| 	exampleSpiloConfig  = `{"postgresql":{"bin_dir":"/usr/lib/postgresql/12/bin","parameters":{"autovacuum_analyze_scale_factor":"0.1"},"pg_hba":["hostssl all all 0.0.0.0/0 scram-sha-256","host all all 0.0.0.0/0 scram-sha-256"]},"bootstrap":{"initdb":[{"auth-host":"scram-sha-256"},{"auth-local":"trust"},"data-checksums",{"encoding":"UTF8"},{"locale":"en_US.UTF-8"}],"dcs":{"ttl":30,"loop_wait":10,"retry_timeout":10,"maximum_lag_on_failover":33554432,"postgresql":{"parameters":{"max_connections":"100","max_locks_per_transaction":"64","max_worker_processes":"4"}}}}}` | ||||
| 	spiloConfigDiff     = `{"postgresql":{"bin_dir":"/usr/lib/postgresql/12/bin","parameters":{"autovacuum_analyze_scale_factor":"0.1"},"pg_hba":["hostssl all all 0.0.0.0/0 scram-sha-256","host all all 0.0.0.0/0 scram-sha-256"]},"bootstrap":{"initdb":[{"auth-host":"scram-sha-256"},{"auth-local":"trust"},"data-checksums",{"encoding":"UTF8"},{"locale":"en_US.UTF-8"}],"dcs":{"loop_wait":10,"retry_timeout":10,"maximum_lag_on_failover":33554432,"postgresql":{"parameters":{"max_locks_per_transaction":"64","max_worker_processes":"4"}}}}}` | ||||
| ) | ||||
| 
 | ||||
| var logger = logrus.New().WithField("test", "cluster") | ||||
|  | @ -1198,11 +1198,11 @@ func TestCompareSpiloConfiguration(t *testing.T) { | |||
| 		ExpectedResult bool | ||||
| 	}{ | ||||
| 		{ | ||||
| 			`{"postgresql":{"bin_dir":"/usr/lib/postgresql/12/bin","parameters":{"autovacuum_analyze_scale_factor":"0.1"},"pg_hba":["hostssl all all 0.0.0.0/0 md5","host all all 0.0.0.0/0 md5"]},"bootstrap":{"initdb":[{"auth-host":"md5"},{"auth-local":"trust"},"data-checksums",{"encoding":"UTF8"},{"locale":"en_US.UTF-8"}],"dcs":{"ttl":30,"loop_wait":10,"retry_timeout":10,"maximum_lag_on_failover":33554432,"postgresql":{"parameters":{"max_connections":"100","max_locks_per_transaction":"64","max_worker_processes":"4"}}}}}`, | ||||
| 			`{"postgresql":{"bin_dir":"/usr/lib/postgresql/12/bin","parameters":{"autovacuum_analyze_scale_factor":"0.1"},"pg_hba":["hostssl all all 0.0.0.0/0 scram-sha-256","host all all 0.0.0.0/0 scram-sha-256"]},"bootstrap":{"initdb":[{"auth-host":"scram-sha-256"},{"auth-local":"trust"},"data-checksums",{"encoding":"UTF8"},{"locale":"en_US.UTF-8"}],"dcs":{"ttl":30,"loop_wait":10,"retry_timeout":10,"maximum_lag_on_failover":33554432,"postgresql":{"parameters":{"max_connections":"100","max_locks_per_transaction":"64","max_worker_processes":"4"}}}}}`, | ||||
| 			true, | ||||
| 		}, | ||||
| 		{ | ||||
| 			`{"postgresql":{"bin_dir":"/usr/lib/postgresql/12/bin","parameters":{"autovacuum_analyze_scale_factor":"0.1"},"pg_hba":["hostssl all all 0.0.0.0/0 md5","host all all 0.0.0.0/0 md5"]},"bootstrap":{"initdb":[{"auth-host":"md5"},{"auth-local":"trust"},"data-checksums",{"encoding":"UTF8"},{"locale":"en_US.UTF-8"}],"dcs":{"ttl":30,"loop_wait":10,"retry_timeout":10,"maximum_lag_on_failover":33554432,"postgresql":{"parameters":{"max_connections":"200","max_locks_per_transaction":"64","max_worker_processes":"4"}}}}}`, | ||||
| 			`{"postgresql":{"bin_dir":"/usr/lib/postgresql/12/bin","parameters":{"autovacuum_analyze_scale_factor":"0.1"},"pg_hba":["hostssl all all 0.0.0.0/0 scram-sha-256","host all all 0.0.0.0/0 scram-sha-256"]},"bootstrap":{"initdb":[{"auth-host":"scram-sha-256"},{"auth-local":"trust"},"data-checksums",{"encoding":"UTF8"},{"locale":"en_US.UTF-8"}],"dcs":{"ttl":30,"loop_wait":10,"retry_timeout":10,"maximum_lag_on_failover":33554432,"postgresql":{"parameters":{"max_connections":"200","max_locks_per_transaction":"64","max_worker_processes":"4"}}}}}`, | ||||
| 			true, | ||||
| 		}, | ||||
| 		{ | ||||
|  |  | |||
|  | @ -358,7 +358,7 @@ func generateSpiloJSONConfiguration(pg *acidv1.PostgresqlParam, patroni *acidv1. | |||
| 
 | ||||
| 	config.Bootstrap = pgBootstrap{} | ||||
| 
 | ||||
| 	config.Bootstrap.Initdb = []interface{}{map[string]string{"auth-host": "md5"}, | ||||
| 	config.Bootstrap.Initdb = []interface{}{map[string]string{"auth-host": "scram-sha-256"}, | ||||
| 		map[string]string{"auth-local": "trust"}} | ||||
| 
 | ||||
| 	initdbOptionNames := []string{} | ||||
|  |  | |||
|  | @ -79,7 +79,7 @@ func TestGenerateSpiloJSONConfiguration(t *testing.T) { | |||
| 					PamRoleName: "zalandos", | ||||
| 				}, | ||||
| 			}, | ||||
| 			result: `{"postgresql":{"bin_dir":"/usr/lib/postgresql/17/bin"},"bootstrap":{"initdb":[{"auth-host":"md5"},{"auth-local":"trust"}],"dcs":{}}}`, | ||||
| 			result: `{"postgresql":{"bin_dir":"/usr/lib/postgresql/17/bin"},"bootstrap":{"initdb":[{"auth-host":"scram-sha-256"},{"auth-local":"trust"}],"dcs":{}}}`, | ||||
| 		}, | ||||
| 		{ | ||||
| 			subtest: "Patroni configured", | ||||
|  | @ -90,7 +90,7 @@ func TestGenerateSpiloJSONConfiguration(t *testing.T) { | |||
| 					"locale":         "en_US.UTF-8", | ||||
| 					"data-checksums": "true", | ||||
| 				}, | ||||
| 				PgHba:                 []string{"hostssl all all 0.0.0.0/0 md5", "host    all all 0.0.0.0/0 md5"}, | ||||
| 				PgHba:                 []string{"hostssl all all 0.0.0.0/0 scram-sha-256", "host    all all 0.0.0.0/0 scram-sha-256"}, | ||||
| 				TTL:                   30, | ||||
| 				LoopWait:              10, | ||||
| 				RetryTimeout:          10, | ||||
|  | @ -102,7 +102,7 @@ func TestGenerateSpiloJSONConfiguration(t *testing.T) { | |||
| 				FailsafeMode:          util.True(), | ||||
| 			}, | ||||
| 			opConfig: &config.Config{}, | ||||
| 			result:   `{"postgresql":{"bin_dir":"/usr/lib/postgresql/17/bin","pg_hba":["hostssl all all 0.0.0.0/0 md5","host    all all 0.0.0.0/0 md5"]},"bootstrap":{"initdb":[{"auth-host":"md5"},{"auth-local":"trust"},"data-checksums",{"encoding":"UTF8"},{"locale":"en_US.UTF-8"}],"dcs":{"ttl":30,"loop_wait":10,"retry_timeout":10,"maximum_lag_on_failover":33554432,"synchronous_mode":true,"synchronous_mode_strict":true,"synchronous_node_count":1,"slots":{"permanent_logical_1":{"database":"foo","plugin":"pgoutput","type":"logical"}},"failsafe_mode":true}}}`, | ||||
| 			result:   `{"postgresql":{"bin_dir":"/usr/lib/postgresql/17/bin","pg_hba":["hostssl all all 0.0.0.0/0 scram-sha-256","host    all all 0.0.0.0/0 scram-sha-256"]},"bootstrap":{"initdb":[{"auth-host":"scram-sha-256"},{"auth-local":"trust"},"data-checksums",{"encoding":"UTF8"},{"locale":"en_US.UTF-8"}],"dcs":{"ttl":30,"loop_wait":10,"retry_timeout":10,"maximum_lag_on_failover":33554432,"synchronous_mode":true,"synchronous_mode_strict":true,"synchronous_node_count":1,"slots":{"permanent_logical_1":{"database":"foo","plugin":"pgoutput","type":"logical"}},"failsafe_mode":true}}}`, | ||||
| 		}, | ||||
| 		{ | ||||
| 			subtest: "Patroni failsafe_mode configured globally", | ||||
|  | @ -111,7 +111,7 @@ func TestGenerateSpiloJSONConfiguration(t *testing.T) { | |||
| 			opConfig: &config.Config{ | ||||
| 				EnablePatroniFailsafeMode: util.True(), | ||||
| 			}, | ||||
| 			result: `{"postgresql":{"bin_dir":"/usr/lib/postgresql/17/bin"},"bootstrap":{"initdb":[{"auth-host":"md5"},{"auth-local":"trust"}],"dcs":{"failsafe_mode":true}}}`, | ||||
| 			result: `{"postgresql":{"bin_dir":"/usr/lib/postgresql/17/bin"},"bootstrap":{"initdb":[{"auth-host":"scram-sha-256"},{"auth-local":"trust"}],"dcs":{"failsafe_mode":true}}}`, | ||||
| 		}, | ||||
| 		{ | ||||
| 			subtest: "Patroni failsafe_mode configured globally, disabled for cluster", | ||||
|  | @ -122,7 +122,7 @@ func TestGenerateSpiloJSONConfiguration(t *testing.T) { | |||
| 			opConfig: &config.Config{ | ||||
| 				EnablePatroniFailsafeMode: util.True(), | ||||
| 			}, | ||||
| 			result: `{"postgresql":{"bin_dir":"/usr/lib/postgresql/17/bin"},"bootstrap":{"initdb":[{"auth-host":"md5"},{"auth-local":"trust"}],"dcs":{"failsafe_mode":false}}}`, | ||||
| 			result: `{"postgresql":{"bin_dir":"/usr/lib/postgresql/17/bin"},"bootstrap":{"initdb":[{"auth-host":"scram-sha-256"},{"auth-local":"trust"}],"dcs":{"failsafe_mode":false}}}`, | ||||
| 		}, | ||||
| 		{ | ||||
| 			subtest: "Patroni failsafe_mode disabled globally, configured for cluster", | ||||
|  | @ -133,7 +133,7 @@ func TestGenerateSpiloJSONConfiguration(t *testing.T) { | |||
| 			opConfig: &config.Config{ | ||||
| 				EnablePatroniFailsafeMode: util.False(), | ||||
| 			}, | ||||
| 			result: `{"postgresql":{"bin_dir":"/usr/lib/postgresql/17/bin"},"bootstrap":{"initdb":[{"auth-host":"md5"},{"auth-local":"trust"}],"dcs":{"failsafe_mode":true}}}`, | ||||
| 			result: `{"postgresql":{"bin_dir":"/usr/lib/postgresql/17/bin"},"bootstrap":{"initdb":[{"auth-host":"scram-sha-256"},{"auth-local":"trust"}],"dcs":{"failsafe_mode":true}}}`, | ||||
| 		}, | ||||
| 	} | ||||
| 	for _, tt := range tests { | ||||
|  |  | |||
|  | @ -87,7 +87,7 @@ func NewEncryptor(encryption string) *Encryptor { | |||
| 	} | ||||
| 	hasher, ok := m[encryption] | ||||
| 	if !ok { | ||||
| 		hasher = e.PGUserPasswordMD5 | ||||
| 		hasher = e.PGUserPasswordScramSHA256 | ||||
| 	} | ||||
| 	e.encrypt = hasher | ||||
| 	return &e | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue