-
Notifications
You must be signed in to change notification settings - Fork 458
/
nginxingress.go
87 lines (75 loc) · 2.91 KB
/
nginxingress.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
// SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Gardener contributors
//
// SPDX-License-Identifier: Apache-2.0
package seed
import (
"context"
"encoding/json"
"github.com/go-logr/logr"
"sigs.k8s.io/controller-runtime/pkg/client"
gardencorev1beta1 "github.com/gardener/gardener/pkg/apis/core/v1beta1"
extensionsv1alpha1helper "github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/helper"
"github.com/gardener/gardener/pkg/component"
"github.com/gardener/gardener/pkg/component/extensions/dnsrecord"
seedpkg "github.com/gardener/gardener/pkg/gardenlet/operation/seed"
"github.com/gardener/gardener/pkg/utils"
gardenerutils "github.com/gardener/gardener/pkg/utils/gardener"
kubernetesutils "github.com/gardener/gardener/pkg/utils/kubernetes"
)
func (r *Reconciler) newIngressDNSRecord(ctx context.Context, log logr.Logger, seed *seedpkg.Seed, loadBalancerAddress string) (component.DeployMigrateWaiter, error) {
secretData, err := getDNSProviderSecretData(ctx, r.GardenClient, seed.GetInfo())
if err != nil {
return nil, err
}
values := &dnsrecord.Values{
Name: "seed-ingress",
SecretName: "seed-ingress",
Namespace: r.GardenNamespace,
SecretData: secretData,
DNSName: seed.GetIngressFQDN("*"),
RecordType: extensionsv1alpha1helper.GetDNSRecordType(loadBalancerAddress),
ReconcileOnlyOnChangeOrError: true,
IPStack: gardenerutils.GetIPStackForSeed(seed.GetInfo()),
}
if provider := seed.GetInfo().Spec.DNS.Provider; provider != nil {
values.Type = provider.Type
}
if loadBalancerAddress != "" {
values.Values = []string{loadBalancerAddress}
}
return dnsrecord.New(
log,
r.SeedClientSet.Client(),
values,
dnsrecord.DefaultInterval,
dnsrecord.DefaultSevereThreshold,
dnsrecord.DefaultTimeout,
), nil
}
func getDNSProviderSecretData(ctx context.Context, gardenClient client.Client, seed *gardencorev1beta1.Seed) (map[string][]byte, error) {
if dnsConfig := seed.Spec.DNS; dnsConfig.Provider != nil {
secret, err := kubernetesutils.GetSecretByReference(ctx, gardenClient, &dnsConfig.Provider.SecretRef)
if err != nil {
return nil, err
}
return secret.Data, nil
}
return nil, nil
}
func getConfig(seed *gardencorev1beta1.Seed) (map[string]string, error) {
var (
defaultConfig = map[string]interface{}{
"server-name-hash-bucket-size": "256",
"use-proxy-protocol": "false",
"worker-processes": "2",
"allow-snippet-annotations": "true",
}
providerConfig = map[string]interface{}{}
)
if seed.Spec.Ingress != nil && seed.Spec.Ingress.Controller.ProviderConfig != nil {
if err := json.Unmarshal(seed.Spec.Ingress.Controller.ProviderConfig.Raw, &providerConfig); err != nil {
return nil, err
}
}
return utils.InterfaceMapToStringMap(utils.MergeMaps(defaultConfig, providerConfig)), nil
}