use old LB DNS format when teamId prefix is disabled (#2011)

* use old LB DNS format when teamId prefix is disabled
* support both old and new format in external-dns
* switch dns template from team to namespace
This commit is contained in:
Felix Kunde 2022-08-25 18:29:54 +02:00 committed by GitHub
parent 21d00e2ed7
commit 89375186b3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
12 changed files with 113 additions and 54 deletions

View File

@ -424,10 +424,10 @@ spec:
default: "Cluster" default: "Cluster"
master_dns_name_format: master_dns_name_format:
type: string type: string
default: "{cluster}.{team}.{hostedzone}" default: "{cluster}.{namespace}.{hostedzone}"
replica_dns_name_format: replica_dns_name_format:
type: string type: string
default: "{cluster}-repl.{team}.{hostedzone}" default: "{cluster}-repl.{namespace}.{hostedzone}"
aws_or_gcp: aws_or_gcp:
type: object type: object
properties: properties:

View File

@ -269,9 +269,9 @@ configLoadBalancer:
# define external traffic policy for the load balancer # define external traffic policy for the load balancer
external_traffic_policy: "Cluster" external_traffic_policy: "Cluster"
# defines the DNS name string template for the master load balancer cluster # defines the DNS name string template for the master load balancer cluster
master_dns_name_format: "{cluster}.{team}.{hostedzone}" master_dns_name_format: "{cluster}.{namespace}.{hostedzone}"
# defines the DNS name string template for the replica load balancer cluster # defines the DNS name string template for the replica load balancer cluster
replica_dns_name_format: "{cluster}-repl.{team}.{hostedzone}" replica_dns_name_format: "{cluster}-repl.{namespace}.{hostedzone}"
# options to aid debugging of the operator itself # options to aid debugging of the operator itself
configDebug: configDebug:

View File

@ -617,15 +617,15 @@ In the CRD-based configuration they are grouped under the `load_balancer` key.
* **master_dns_name_format** defines the DNS name string template for the * **master_dns_name_format** defines the DNS name string template for the
master load balancer cluster. The default is master load balancer cluster. The default is
`{cluster}.{team}.{hostedzone}`, where `{cluster}` is replaced by the cluster `{cluster}.{namespace}.{hostedzone}`, where `{cluster}` is replaced by the cluster
name, `{team}` is replaced with the team name and `{hostedzone}` is replaced name, `{namespace}` is replaced with the namespace and `{hostedzone}` is replaced
with the hosted zone (the value of the `db_hosted_zone` parameter). No other with the hosted zone (the value of the `db_hosted_zone` parameter). No other
placeholders are allowed. placeholders are allowed.
* **replica_dns_name_format** defines the DNS name string template for the * **replica_dns_name_format** defines the DNS name string template for the
replica load balancer cluster. The default is replica load balancer cluster. The default is
`{cluster}-repl.{team}.{hostedzone}`, where `{cluster}` is replaced by the `{cluster}-repl.{namespace}.{hostedzone}`, where `{cluster}` is replaced by the
cluster name, `{team}` is replaced with the team name and `{hostedzone}` is cluster name, `{namespace}` is replaced with the namespace and `{hostedzone}` is
replaced with the hosted zone (the value of the `db_hosted_zone` parameter). replaced with the hosted zone (the value of the `db_hosted_zone` parameter).
No other placeholders are allowed. No other placeholders are allowed.

View File

@ -152,7 +152,7 @@ specified explicitly.
The operator automatically generates a password for each manifest role and The operator automatically generates a password for each manifest role and
places it in the secret named places it in the secret named
`{username}.{team}-{clustername}.credentials.postgresql.acid.zalan.do` in the `{username}.{clustername}.credentials.postgresql.acid.zalan.do` in the
same namespace as the cluster. This way, the application running in the same namespace as the cluster. This way, the application running in the
K8s cluster and connecting to Postgres can obtain the password right from the K8s cluster and connecting to Postgres can obtain the password right from the
secret, without ever sharing it outside of the cluster. secret, without ever sharing it outside of the cluster.
@ -182,7 +182,7 @@ be in the form of `namespace.username`.
For such usernames, the secret is created in the given namespace and its name is For such usernames, the secret is created in the given namespace and its name is
of the following form, of the following form,
`{namespace}.{username}.{team}-{clustername}.credentials.postgresql.acid.zalan.do` `{namespace}.{username}.{clustername}.credentials.postgresql.acid.zalan.do`
### Infrastructure roles ### Infrastructure roles

View File

@ -87,7 +87,7 @@ data:
logical_backup_schedule: "30 00 * * *" logical_backup_schedule: "30 00 * * *"
major_version_upgrade_mode: "manual" major_version_upgrade_mode: "manual"
# major_version_upgrade_team_allow_list: "" # major_version_upgrade_team_allow_list: ""
master_dns_name_format: "{cluster}.{team}.{hostedzone}" master_dns_name_format: "{cluster}.{namespace}.{hostedzone}"
# master_pod_move_timeout: 20m # master_pod_move_timeout: 20m
# max_instances: "-1" # max_instances: "-1"
# min_instances: "-1" # min_instances: "-1"
@ -124,7 +124,7 @@ data:
ready_wait_interval: 3s ready_wait_interval: 3s
ready_wait_timeout: 30s ready_wait_timeout: 30s
repair_period: 5m repair_period: 5m
replica_dns_name_format: "{cluster}-repl.{team}.{hostedzone}" replica_dns_name_format: "{cluster}-repl.{namespace}.{hostedzone}"
replication_username: standby replication_username: standby
resource_check_interval: 3s resource_check_interval: 3s
resource_check_timeout: 10m resource_check_timeout: 10m

View File

@ -422,10 +422,10 @@ spec:
default: "Cluster" default: "Cluster"
master_dns_name_format: master_dns_name_format:
type: string type: string
default: "{cluster}.{team}.{hostedzone}" default: "{cluster}.{namespace}.{hostedzone}"
replica_dns_name_format: replica_dns_name_format:
type: string type: string
default: "{cluster}-repl.{team}.{hostedzone}" default: "{cluster}-repl.{namespace}.{hostedzone}"
aws_or_gcp: aws_or_gcp:
type: object type: object
properties: properties:

View File

@ -133,8 +133,8 @@ configuration:
enable_replica_load_balancer: false enable_replica_load_balancer: false
enable_replica_pooler_load_balancer: false enable_replica_pooler_load_balancer: false
external_traffic_policy: "Cluster" external_traffic_policy: "Cluster"
master_dns_name_format: "{cluster}.{team}.{hostedzone}" master_dns_name_format: "{cluster}.{namespace}.{hostedzone}"
replica_dns_name_format: "{cluster}-repl.{team}.{hostedzone}" replica_dns_name_format: "{cluster}-repl.{namespace}.{hostedzone}"
aws_or_gcp: aws_or_gcp:
# additional_secret_mount: "some-secret-name" # additional_secret_mount: "some-secret-name"
# additional_secret_mount_path: "/some/dir" # additional_secret_mount_path: "/some/dir"

View File

@ -450,6 +450,7 @@ func TestServiceAnnotations(t *testing.T) {
enableMasterLoadBalancerOC bool enableMasterLoadBalancerOC bool
enableReplicaLoadBalancerSpec *bool enableReplicaLoadBalancerSpec *bool
enableReplicaLoadBalancerOC bool enableReplicaLoadBalancerOC bool
enableTeamIdClusterPrefix bool
operatorAnnotations map[string]string operatorAnnotations map[string]string
clusterAnnotations map[string]string clusterAnnotations map[string]string
expect map[string]string expect map[string]string
@ -460,6 +461,7 @@ func TestServiceAnnotations(t *testing.T) {
role: "master", role: "master",
enableMasterLoadBalancerSpec: &disabled, enableMasterLoadBalancerSpec: &disabled,
enableMasterLoadBalancerOC: false, enableMasterLoadBalancerOC: false,
enableTeamIdClusterPrefix: false,
operatorAnnotations: make(map[string]string), operatorAnnotations: make(map[string]string),
clusterAnnotations: make(map[string]string), clusterAnnotations: make(map[string]string),
expect: make(map[string]string), expect: make(map[string]string),
@ -469,10 +471,11 @@ func TestServiceAnnotations(t *testing.T) {
role: "master", role: "master",
enableMasterLoadBalancerSpec: &enabled, enableMasterLoadBalancerSpec: &enabled,
enableMasterLoadBalancerOC: false, enableMasterLoadBalancerOC: false,
enableTeamIdClusterPrefix: false,
operatorAnnotations: make(map[string]string), operatorAnnotations: make(map[string]string),
clusterAnnotations: make(map[string]string), clusterAnnotations: make(map[string]string),
expect: map[string]string{ expect: map[string]string{
"external-dns.alpha.kubernetes.io/hostname": "test.acid.db.example.com", "external-dns.alpha.kubernetes.io/hostname": "acid-test.test.db.example.com,test.acid.db.example.com",
"service.beta.kubernetes.io/aws-load-balancer-connection-idle-timeout": "3600", "service.beta.kubernetes.io/aws-load-balancer-connection-idle-timeout": "3600",
}, },
}, },
@ -481,6 +484,7 @@ func TestServiceAnnotations(t *testing.T) {
role: "master", role: "master",
enableMasterLoadBalancerSpec: &disabled, enableMasterLoadBalancerSpec: &disabled,
enableMasterLoadBalancerOC: true, enableMasterLoadBalancerOC: true,
enableTeamIdClusterPrefix: false,
operatorAnnotations: make(map[string]string), operatorAnnotations: make(map[string]string),
clusterAnnotations: make(map[string]string), clusterAnnotations: make(map[string]string),
expect: make(map[string]string), expect: make(map[string]string),
@ -489,10 +493,11 @@ func TestServiceAnnotations(t *testing.T) {
about: "Master with no annotations and EnableMasterLoadBalancer defined only on operator config", about: "Master with no annotations and EnableMasterLoadBalancer defined only on operator config",
role: "master", role: "master",
enableMasterLoadBalancerOC: true, enableMasterLoadBalancerOC: true,
enableTeamIdClusterPrefix: false,
operatorAnnotations: make(map[string]string), operatorAnnotations: make(map[string]string),
clusterAnnotations: make(map[string]string), clusterAnnotations: make(map[string]string),
expect: map[string]string{ expect: map[string]string{
"external-dns.alpha.kubernetes.io/hostname": "test.acid.db.example.com", "external-dns.alpha.kubernetes.io/hostname": "acid-test.test.db.example.com,test.acid.db.example.com",
"service.beta.kubernetes.io/aws-load-balancer-connection-idle-timeout": "3600", "service.beta.kubernetes.io/aws-load-balancer-connection-idle-timeout": "3600",
}, },
}, },
@ -500,10 +505,11 @@ func TestServiceAnnotations(t *testing.T) {
about: "Master with cluster annotations and load balancer enabled", about: "Master with cluster annotations and load balancer enabled",
role: "master", role: "master",
enableMasterLoadBalancerOC: true, enableMasterLoadBalancerOC: true,
enableTeamIdClusterPrefix: false,
operatorAnnotations: make(map[string]string), operatorAnnotations: make(map[string]string),
clusterAnnotations: map[string]string{"foo": "bar"}, clusterAnnotations: map[string]string{"foo": "bar"},
expect: map[string]string{ expect: map[string]string{
"external-dns.alpha.kubernetes.io/hostname": "test.acid.db.example.com", "external-dns.alpha.kubernetes.io/hostname": "acid-test.test.db.example.com,test.acid.db.example.com",
"service.beta.kubernetes.io/aws-load-balancer-connection-idle-timeout": "3600", "service.beta.kubernetes.io/aws-load-balancer-connection-idle-timeout": "3600",
"foo": "bar", "foo": "bar",
}, },
@ -513,6 +519,7 @@ func TestServiceAnnotations(t *testing.T) {
role: "master", role: "master",
enableMasterLoadBalancerSpec: &disabled, enableMasterLoadBalancerSpec: &disabled,
enableMasterLoadBalancerOC: true, enableMasterLoadBalancerOC: true,
enableTeamIdClusterPrefix: false,
operatorAnnotations: make(map[string]string), operatorAnnotations: make(map[string]string),
clusterAnnotations: map[string]string{"foo": "bar"}, clusterAnnotations: map[string]string{"foo": "bar"},
expect: map[string]string{"foo": "bar"}, expect: map[string]string{"foo": "bar"},
@ -521,10 +528,11 @@ func TestServiceAnnotations(t *testing.T) {
about: "Master with operator annotations and load balancer enabled", about: "Master with operator annotations and load balancer enabled",
role: "master", role: "master",
enableMasterLoadBalancerOC: true, enableMasterLoadBalancerOC: true,
enableTeamIdClusterPrefix: false,
operatorAnnotations: map[string]string{"foo": "bar"}, operatorAnnotations: map[string]string{"foo": "bar"},
clusterAnnotations: make(map[string]string), clusterAnnotations: make(map[string]string),
expect: map[string]string{ expect: map[string]string{
"external-dns.alpha.kubernetes.io/hostname": "test.acid.db.example.com", "external-dns.alpha.kubernetes.io/hostname": "acid-test.test.db.example.com,test.acid.db.example.com",
"service.beta.kubernetes.io/aws-load-balancer-connection-idle-timeout": "3600", "service.beta.kubernetes.io/aws-load-balancer-connection-idle-timeout": "3600",
"foo": "bar", "foo": "bar",
}, },
@ -533,12 +541,13 @@ func TestServiceAnnotations(t *testing.T) {
about: "Master with operator annotations override default annotations", about: "Master with operator annotations override default annotations",
role: "master", role: "master",
enableMasterLoadBalancerOC: true, enableMasterLoadBalancerOC: true,
enableTeamIdClusterPrefix: false,
operatorAnnotations: map[string]string{ operatorAnnotations: map[string]string{
"service.beta.kubernetes.io/aws-load-balancer-connection-idle-timeout": "1800", "service.beta.kubernetes.io/aws-load-balancer-connection-idle-timeout": "1800",
}, },
clusterAnnotations: make(map[string]string), clusterAnnotations: make(map[string]string),
expect: map[string]string{ expect: map[string]string{
"external-dns.alpha.kubernetes.io/hostname": "test.acid.db.example.com", "external-dns.alpha.kubernetes.io/hostname": "acid-test.test.db.example.com,test.acid.db.example.com",
"service.beta.kubernetes.io/aws-load-balancer-connection-idle-timeout": "1800", "service.beta.kubernetes.io/aws-load-balancer-connection-idle-timeout": "1800",
}, },
}, },
@ -546,12 +555,13 @@ func TestServiceAnnotations(t *testing.T) {
about: "Master with cluster annotations override default annotations", about: "Master with cluster annotations override default annotations",
role: "master", role: "master",
enableMasterLoadBalancerOC: true, enableMasterLoadBalancerOC: true,
enableTeamIdClusterPrefix: false,
operatorAnnotations: make(map[string]string), operatorAnnotations: make(map[string]string),
clusterAnnotations: map[string]string{ clusterAnnotations: map[string]string{
"service.beta.kubernetes.io/aws-load-balancer-connection-idle-timeout": "1800", "service.beta.kubernetes.io/aws-load-balancer-connection-idle-timeout": "1800",
}, },
expect: map[string]string{ expect: map[string]string{
"external-dns.alpha.kubernetes.io/hostname": "test.acid.db.example.com", "external-dns.alpha.kubernetes.io/hostname": "acid-test.test.db.example.com,test.acid.db.example.com",
"service.beta.kubernetes.io/aws-load-balancer-connection-idle-timeout": "1800", "service.beta.kubernetes.io/aws-load-balancer-connection-idle-timeout": "1800",
}, },
}, },
@ -559,25 +569,25 @@ func TestServiceAnnotations(t *testing.T) {
about: "Master with cluster annotations do not override external-dns annotations", about: "Master with cluster annotations do not override external-dns annotations",
role: "master", role: "master",
enableMasterLoadBalancerOC: true, enableMasterLoadBalancerOC: true,
enableTeamIdClusterPrefix: false,
operatorAnnotations: make(map[string]string), operatorAnnotations: make(map[string]string),
clusterAnnotations: map[string]string{ clusterAnnotations: map[string]string{
"external-dns.alpha.kubernetes.io/hostname": "wrong.external-dns-name.example.com", "external-dns.alpha.kubernetes.io/hostname": "wrong.external-dns-name.example.com",
}, },
expect: map[string]string{ expect: map[string]string{
"external-dns.alpha.kubernetes.io/hostname": "test.acid.db.example.com", "external-dns.alpha.kubernetes.io/hostname": "acid-test.test.db.example.com,test.acid.db.example.com",
"service.beta.kubernetes.io/aws-load-balancer-connection-idle-timeout": "3600", "service.beta.kubernetes.io/aws-load-balancer-connection-idle-timeout": "3600",
}, },
}, },
{ {
about: "Master with operator annotations do not override external-dns annotations", about: "Master with cluster name teamId prefix enabled",
role: "master", role: "master",
enableMasterLoadBalancerOC: true, enableMasterLoadBalancerOC: true,
enableTeamIdClusterPrefix: true,
clusterAnnotations: make(map[string]string), clusterAnnotations: make(map[string]string),
operatorAnnotations: map[string]string{ operatorAnnotations: make(map[string]string),
"external-dns.alpha.kubernetes.io/hostname": "wrong.external-dns-name.example.com",
},
expect: map[string]string{ expect: map[string]string{
"external-dns.alpha.kubernetes.io/hostname": "test.acid.db.example.com", "external-dns.alpha.kubernetes.io/hostname": "test.test.db.example.com",
"service.beta.kubernetes.io/aws-load-balancer-connection-idle-timeout": "3600", "service.beta.kubernetes.io/aws-load-balancer-connection-idle-timeout": "3600",
}, },
}, },
@ -587,6 +597,7 @@ func TestServiceAnnotations(t *testing.T) {
role: "replica", role: "replica",
enableReplicaLoadBalancerSpec: &disabled, enableReplicaLoadBalancerSpec: &disabled,
enableReplicaLoadBalancerOC: false, enableReplicaLoadBalancerOC: false,
enableTeamIdClusterPrefix: false,
operatorAnnotations: make(map[string]string), operatorAnnotations: make(map[string]string),
clusterAnnotations: make(map[string]string), clusterAnnotations: make(map[string]string),
expect: make(map[string]string), expect: make(map[string]string),
@ -596,10 +607,11 @@ func TestServiceAnnotations(t *testing.T) {
role: "replica", role: "replica",
enableReplicaLoadBalancerSpec: &enabled, enableReplicaLoadBalancerSpec: &enabled,
enableReplicaLoadBalancerOC: false, enableReplicaLoadBalancerOC: false,
enableTeamIdClusterPrefix: false,
operatorAnnotations: make(map[string]string), operatorAnnotations: make(map[string]string),
clusterAnnotations: make(map[string]string), clusterAnnotations: make(map[string]string),
expect: map[string]string{ expect: map[string]string{
"external-dns.alpha.kubernetes.io/hostname": "test-repl.acid.db.example.com", "external-dns.alpha.kubernetes.io/hostname": "acid-test-repl.test.db.example.com,test-repl.acid.db.example.com",
"service.beta.kubernetes.io/aws-load-balancer-connection-idle-timeout": "3600", "service.beta.kubernetes.io/aws-load-balancer-connection-idle-timeout": "3600",
}, },
}, },
@ -608,6 +620,7 @@ func TestServiceAnnotations(t *testing.T) {
role: "replica", role: "replica",
enableReplicaLoadBalancerSpec: &disabled, enableReplicaLoadBalancerSpec: &disabled,
enableReplicaLoadBalancerOC: true, enableReplicaLoadBalancerOC: true,
enableTeamIdClusterPrefix: false,
operatorAnnotations: make(map[string]string), operatorAnnotations: make(map[string]string),
clusterAnnotations: make(map[string]string), clusterAnnotations: make(map[string]string),
expect: make(map[string]string), expect: make(map[string]string),
@ -616,10 +629,11 @@ func TestServiceAnnotations(t *testing.T) {
about: "Replica with no annotations and EnableReplicaLoadBalancer defined only on operator config", about: "Replica with no annotations and EnableReplicaLoadBalancer defined only on operator config",
role: "replica", role: "replica",
enableReplicaLoadBalancerOC: true, enableReplicaLoadBalancerOC: true,
enableTeamIdClusterPrefix: false,
operatorAnnotations: make(map[string]string), operatorAnnotations: make(map[string]string),
clusterAnnotations: make(map[string]string), clusterAnnotations: make(map[string]string),
expect: map[string]string{ expect: map[string]string{
"external-dns.alpha.kubernetes.io/hostname": "test-repl.acid.db.example.com", "external-dns.alpha.kubernetes.io/hostname": "acid-test-repl.test.db.example.com,test-repl.acid.db.example.com",
"service.beta.kubernetes.io/aws-load-balancer-connection-idle-timeout": "3600", "service.beta.kubernetes.io/aws-load-balancer-connection-idle-timeout": "3600",
}, },
}, },
@ -627,10 +641,11 @@ func TestServiceAnnotations(t *testing.T) {
about: "Replica with cluster annotations and load balancer enabled", about: "Replica with cluster annotations and load balancer enabled",
role: "replica", role: "replica",
enableReplicaLoadBalancerOC: true, enableReplicaLoadBalancerOC: true,
enableTeamIdClusterPrefix: false,
operatorAnnotations: make(map[string]string), operatorAnnotations: make(map[string]string),
clusterAnnotations: map[string]string{"foo": "bar"}, clusterAnnotations: map[string]string{"foo": "bar"},
expect: map[string]string{ expect: map[string]string{
"external-dns.alpha.kubernetes.io/hostname": "test-repl.acid.db.example.com", "external-dns.alpha.kubernetes.io/hostname": "acid-test-repl.test.db.example.com,test-repl.acid.db.example.com",
"service.beta.kubernetes.io/aws-load-balancer-connection-idle-timeout": "3600", "service.beta.kubernetes.io/aws-load-balancer-connection-idle-timeout": "3600",
"foo": "bar", "foo": "bar",
}, },
@ -640,6 +655,7 @@ func TestServiceAnnotations(t *testing.T) {
role: "replica", role: "replica",
enableReplicaLoadBalancerSpec: &disabled, enableReplicaLoadBalancerSpec: &disabled,
enableReplicaLoadBalancerOC: true, enableReplicaLoadBalancerOC: true,
enableTeamIdClusterPrefix: false,
operatorAnnotations: make(map[string]string), operatorAnnotations: make(map[string]string),
clusterAnnotations: map[string]string{"foo": "bar"}, clusterAnnotations: map[string]string{"foo": "bar"},
expect: map[string]string{"foo": "bar"}, expect: map[string]string{"foo": "bar"},
@ -648,10 +664,11 @@ func TestServiceAnnotations(t *testing.T) {
about: "Replica with operator annotations and load balancer enabled", about: "Replica with operator annotations and load balancer enabled",
role: "replica", role: "replica",
enableReplicaLoadBalancerOC: true, enableReplicaLoadBalancerOC: true,
enableTeamIdClusterPrefix: false,
operatorAnnotations: map[string]string{"foo": "bar"}, operatorAnnotations: map[string]string{"foo": "bar"},
clusterAnnotations: make(map[string]string), clusterAnnotations: make(map[string]string),
expect: map[string]string{ expect: map[string]string{
"external-dns.alpha.kubernetes.io/hostname": "test-repl.acid.db.example.com", "external-dns.alpha.kubernetes.io/hostname": "acid-test-repl.test.db.example.com,test-repl.acid.db.example.com",
"service.beta.kubernetes.io/aws-load-balancer-connection-idle-timeout": "3600", "service.beta.kubernetes.io/aws-load-balancer-connection-idle-timeout": "3600",
"foo": "bar", "foo": "bar",
}, },
@ -660,12 +677,13 @@ func TestServiceAnnotations(t *testing.T) {
about: "Replica with operator annotations override default annotations", about: "Replica with operator annotations override default annotations",
role: "replica", role: "replica",
enableReplicaLoadBalancerOC: true, enableReplicaLoadBalancerOC: true,
enableTeamIdClusterPrefix: false,
operatorAnnotations: map[string]string{ operatorAnnotations: map[string]string{
"service.beta.kubernetes.io/aws-load-balancer-connection-idle-timeout": "1800", "service.beta.kubernetes.io/aws-load-balancer-connection-idle-timeout": "1800",
}, },
clusterAnnotations: make(map[string]string), clusterAnnotations: make(map[string]string),
expect: map[string]string{ expect: map[string]string{
"external-dns.alpha.kubernetes.io/hostname": "test-repl.acid.db.example.com", "external-dns.alpha.kubernetes.io/hostname": "acid-test-repl.test.db.example.com,test-repl.acid.db.example.com",
"service.beta.kubernetes.io/aws-load-balancer-connection-idle-timeout": "1800", "service.beta.kubernetes.io/aws-load-balancer-connection-idle-timeout": "1800",
}, },
}, },
@ -673,12 +691,13 @@ func TestServiceAnnotations(t *testing.T) {
about: "Replica with cluster annotations override default annotations", about: "Replica with cluster annotations override default annotations",
role: "replica", role: "replica",
enableReplicaLoadBalancerOC: true, enableReplicaLoadBalancerOC: true,
enableTeamIdClusterPrefix: false,
operatorAnnotations: make(map[string]string), operatorAnnotations: make(map[string]string),
clusterAnnotations: map[string]string{ clusterAnnotations: map[string]string{
"service.beta.kubernetes.io/aws-load-balancer-connection-idle-timeout": "1800", "service.beta.kubernetes.io/aws-load-balancer-connection-idle-timeout": "1800",
}, },
expect: map[string]string{ expect: map[string]string{
"external-dns.alpha.kubernetes.io/hostname": "test-repl.acid.db.example.com", "external-dns.alpha.kubernetes.io/hostname": "acid-test-repl.test.db.example.com,test-repl.acid.db.example.com",
"service.beta.kubernetes.io/aws-load-balancer-connection-idle-timeout": "1800", "service.beta.kubernetes.io/aws-load-balancer-connection-idle-timeout": "1800",
}, },
}, },
@ -686,25 +705,25 @@ func TestServiceAnnotations(t *testing.T) {
about: "Replica with cluster annotations do not override external-dns annotations", about: "Replica with cluster annotations do not override external-dns annotations",
role: "replica", role: "replica",
enableReplicaLoadBalancerOC: true, enableReplicaLoadBalancerOC: true,
enableTeamIdClusterPrefix: false,
operatorAnnotations: make(map[string]string), operatorAnnotations: make(map[string]string),
clusterAnnotations: map[string]string{ clusterAnnotations: map[string]string{
"external-dns.alpha.kubernetes.io/hostname": "wrong.external-dns-name.example.com", "external-dns.alpha.kubernetes.io/hostname": "wrong.external-dns-name.example.com",
}, },
expect: map[string]string{ expect: map[string]string{
"external-dns.alpha.kubernetes.io/hostname": "test-repl.acid.db.example.com", "external-dns.alpha.kubernetes.io/hostname": "acid-test-repl.test.db.example.com,test-repl.acid.db.example.com",
"service.beta.kubernetes.io/aws-load-balancer-connection-idle-timeout": "3600", "service.beta.kubernetes.io/aws-load-balancer-connection-idle-timeout": "3600",
}, },
}, },
{ {
about: "Replica with operator annotations do not override external-dns annotations", about: "Replica with cluster name teamId prefix enabled",
role: "replica", role: "replica",
enableReplicaLoadBalancerOC: true, enableReplicaLoadBalancerOC: true,
enableTeamIdClusterPrefix: true,
clusterAnnotations: make(map[string]string), clusterAnnotations: make(map[string]string),
operatorAnnotations: map[string]string{ operatorAnnotations: make(map[string]string),
"external-dns.alpha.kubernetes.io/hostname": "wrong.external-dns-name.example.com",
},
expect: map[string]string{ expect: map[string]string{
"external-dns.alpha.kubernetes.io/hostname": "test-repl.acid.db.example.com", "external-dns.alpha.kubernetes.io/hostname": "test-repl.test.db.example.com",
"service.beta.kubernetes.io/aws-load-balancer-connection-idle-timeout": "3600", "service.beta.kubernetes.io/aws-load-balancer-connection-idle-timeout": "3600",
}, },
}, },
@ -713,6 +732,7 @@ func TestServiceAnnotations(t *testing.T) {
about: "cluster annotations append to operator annotations", about: "cluster annotations append to operator annotations",
role: "replica", role: "replica",
enableReplicaLoadBalancerOC: false, enableReplicaLoadBalancerOC: false,
enableTeamIdClusterPrefix: false,
operatorAnnotations: map[string]string{"foo": "bar"}, operatorAnnotations: map[string]string{"foo": "bar"},
clusterAnnotations: map[string]string{"post": "gres"}, clusterAnnotations: map[string]string{"post": "gres"},
expect: map[string]string{"foo": "bar", "post": "gres"}, expect: map[string]string{"foo": "bar", "post": "gres"},
@ -721,6 +741,7 @@ func TestServiceAnnotations(t *testing.T) {
about: "cluster annotations override operator annotations", about: "cluster annotations override operator annotations",
role: "replica", role: "replica",
enableReplicaLoadBalancerOC: false, enableReplicaLoadBalancerOC: false,
enableTeamIdClusterPrefix: false,
operatorAnnotations: map[string]string{"foo": "bar", "post": "gres"}, operatorAnnotations: map[string]string{"foo": "bar", "post": "gres"},
clusterAnnotations: map[string]string{"post": "greSQL"}, clusterAnnotations: map[string]string{"post": "greSQL"},
expect: map[string]string{"foo": "bar", "post": "greSQL"}, expect: map[string]string{"foo": "bar", "post": "greSQL"},
@ -729,14 +750,20 @@ func TestServiceAnnotations(t *testing.T) {
for _, tt := range tests { for _, tt := range tests {
t.Run(tt.about, func(t *testing.T) { t.Run(tt.about, func(t *testing.T) {
cl.OpConfig.EnableTeamIdClusternamePrefix = tt.enableTeamIdClusterPrefix
if tt.enableTeamIdClusterPrefix {
cl.Postgresql.Spec.ClusterName = "test"
} else {
cl.Postgresql.Spec.ClusterName = "acid-test"
}
cl.OpConfig.CustomServiceAnnotations = tt.operatorAnnotations cl.OpConfig.CustomServiceAnnotations = tt.operatorAnnotations
cl.OpConfig.EnableMasterLoadBalancer = tt.enableMasterLoadBalancerOC cl.OpConfig.EnableMasterLoadBalancer = tt.enableMasterLoadBalancerOC
cl.OpConfig.EnableReplicaLoadBalancer = tt.enableReplicaLoadBalancerOC cl.OpConfig.EnableReplicaLoadBalancer = tt.enableReplicaLoadBalancerOC
cl.OpConfig.MasterDNSNameFormat = "{cluster}.{team}.{hostedzone}" cl.OpConfig.MasterDNSNameFormat = "{cluster}.{namespace}.{hostedzone}"
cl.OpConfig.ReplicaDNSNameFormat = "{cluster}-repl.{team}.{hostedzone}" cl.OpConfig.ReplicaDNSNameFormat = "{cluster}-repl.{namespace}.{hostedzone}"
cl.OpConfig.DbHostedZone = "db.example.com" cl.OpConfig.DbHostedZone = "db.example.com"
cl.Postgresql.Spec.ClusterName = "test"
cl.Postgresql.Spec.TeamID = "acid" cl.Postgresql.Spec.TeamID = "acid"
cl.Postgresql.Spec.ServiceAnnotations = tt.clusterAnnotations cl.Postgresql.Spec.ServiceAnnotations = tt.clusterAnnotations
cl.Postgresql.Spec.EnableMasterLoadBalancer = tt.enableMasterLoadBalancerSpec cl.Postgresql.Spec.EnableMasterLoadBalancer = tt.enableMasterLoadBalancerSpec

View File

@ -1814,12 +1814,7 @@ func (c *Cluster) generateServiceAnnotations(role PostgresRole, spec *acidv1.Pos
} }
if c.shouldCreateLoadBalancerForService(role, spec) { if c.shouldCreateLoadBalancerForService(role, spec) {
var dnsName string dnsName := c.dnsName(role)
if role == Master {
dnsName = c.masterDNSName()
} else {
dnsName = c.replicaDNSName()
}
// Just set ELB Timeout annotation with default value, if it does not // Just set ELB Timeout annotation with default value, if it does not
// have a cutom value // have a cutom value

View File

@ -505,20 +505,50 @@ func (c *Cluster) roleLabelsSet(shouldAddExtraLabels bool, role PostgresRole) la
return lbls return lbls
} }
func (c *Cluster) dnsName(role PostgresRole) string {
var dnsString string
if role == Master {
dnsString = c.masterDNSName()
} else {
dnsString = c.replicaDNSName()
}
// when cluster name starts with teamId prefix create an extra DNS entry
// to support the old format when prefix contraint was enabled (but is disabled now)
if !c.OpConfig.EnableTeamIdClusternamePrefix {
clusterNameWithoutTeamPrefix, _ := acidv1.ExtractClusterName(c.Name, c.Spec.TeamID)
if clusterNameWithoutTeamPrefix != "" {
if role == Replica {
clusterNameWithoutTeamPrefix = fmt.Sprintf("%s-repl", clusterNameWithoutTeamPrefix)
}
dnsString = fmt.Sprintf("%s,%s", dnsString, c.oldDNSFormat(clusterNameWithoutTeamPrefix))
}
}
return dnsString
}
func (c *Cluster) masterDNSName() string { func (c *Cluster) masterDNSName() string {
return strings.ToLower(c.OpConfig.MasterDNSNameFormat.Format( return strings.ToLower(c.OpConfig.MasterDNSNameFormat.Format(
"cluster", c.Spec.ClusterName, "cluster", c.Spec.ClusterName,
"team", c.teamName(), "namespace", c.Namespace,
"hostedzone", c.OpConfig.DbHostedZone)) "hostedzone", c.OpConfig.DbHostedZone))
} }
func (c *Cluster) replicaDNSName() string { func (c *Cluster) replicaDNSName() string {
return strings.ToLower(c.OpConfig.ReplicaDNSNameFormat.Format( return strings.ToLower(c.OpConfig.ReplicaDNSNameFormat.Format(
"cluster", c.Spec.ClusterName, "cluster", c.Spec.ClusterName,
"team", c.teamName(), "namespace", c.Namespace,
"hostedzone", c.OpConfig.DbHostedZone)) "hostedzone", c.OpConfig.DbHostedZone))
} }
func (c *Cluster) oldDNSFormat(clusterName string) string {
return fmt.Sprintf("%s.%s.%s",
clusterName,
c.teamName(),
c.OpConfig.DbHostedZone)
}
func (c *Cluster) credentialSecretName(username string) string { func (c *Cluster) credentialSecretName(username string) string {
return c.credentialSecretNameForCluster(username, c.Name) return c.credentialSecretNameForCluster(username, c.Name)
} }

View File

@ -159,17 +159,24 @@ func (c *Controller) acquireInitialListOfClusters() error {
} }
func (c *Controller) addCluster(lg *logrus.Entry, clusterName spec.NamespacedName, pgSpec *acidv1.Postgresql) (*cluster.Cluster, error) { func (c *Controller) addCluster(lg *logrus.Entry, clusterName spec.NamespacedName, pgSpec *acidv1.Postgresql) (*cluster.Cluster, error) {
var (
extractedClusterName string
err error
)
if c.opConfig.EnableTeamIdClusternamePrefix { if c.opConfig.EnableTeamIdClusternamePrefix {
if _, err := acidv1.ExtractClusterName(clusterName.Name, pgSpec.Spec.TeamID); err != nil { if extractedClusterName, err = acidv1.ExtractClusterName(clusterName.Name, pgSpec.Spec.TeamID); err != nil {
c.KubeClient.SetPostgresCRDStatus(clusterName, acidv1.ClusterStatusInvalid) c.KubeClient.SetPostgresCRDStatus(clusterName, acidv1.ClusterStatusInvalid)
return nil, err return nil, err
} }
} else {
extractedClusterName = clusterName.Name
} }
cl := cluster.New(c.makeClusterConfig(), c.KubeClient, *pgSpec, lg, c.eventRecorder) cl := cluster.New(c.makeClusterConfig(), c.KubeClient, *pgSpec, lg, c.eventRecorder)
cl.Run(c.stopCh) cl.Run(c.stopCh)
teamName := strings.ToLower(cl.Spec.TeamID) teamName := strings.ToLower(cl.Spec.TeamID)
cl.ClusterName = extractedClusterName
defer c.clustersMu.Unlock() defer c.clustersMu.Unlock()
c.clustersMu.Lock() c.clustersMu.Lock()

View File

@ -206,8 +206,8 @@ type Config struct {
StorageResizeMode string `name:"storage_resize_mode" default:"pvc"` StorageResizeMode string `name:"storage_resize_mode" default:"pvc"`
EnableLoadBalancer *bool `name:"enable_load_balancer"` // deprecated and kept for backward compatibility EnableLoadBalancer *bool `name:"enable_load_balancer"` // deprecated and kept for backward compatibility
ExternalTrafficPolicy string `name:"external_traffic_policy" default:"Cluster"` ExternalTrafficPolicy string `name:"external_traffic_policy" default:"Cluster"`
MasterDNSNameFormat StringTemplate `name:"master_dns_name_format" default:"{cluster}.{team}.{hostedzone}"` MasterDNSNameFormat StringTemplate `name:"master_dns_name_format" default:"{cluster}.{namespace}.{hostedzone}"`
ReplicaDNSNameFormat StringTemplate `name:"replica_dns_name_format" default:"{cluster}-repl.{team}.{hostedzone}"` ReplicaDNSNameFormat StringTemplate `name:"replica_dns_name_format" default:"{cluster}-repl.{namespace}.{hostedzone}"`
PDBNameFormat StringTemplate `name:"pdb_name_format" default:"postgres-{cluster}-pdb"` PDBNameFormat StringTemplate `name:"pdb_name_format" default:"postgres-{cluster}-pdb"`
EnablePodDisruptionBudget *bool `name:"enable_pod_disruption_budget" default:"true"` EnablePodDisruptionBudget *bool `name:"enable_pod_disruption_budget" default:"true"`
EnableInitContainers *bool `name:"enable_init_containers" default:"true"` EnableInitContainers *bool `name:"enable_init_containers" default:"true"`