forked from jrperritt/kops
/
main.go
119 lines (96 loc) · 3.25 KB
/
main.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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
package main
import (
"flag"
"github.com/golang/glog"
"github.com/spf13/pflag"
"k8s.io/kops/dns-controller/pkg/dns"
"k8s.io/kops/dns-controller/pkg/watchers"
"k8s.io/kubernetes/federation/pkg/dnsprovider"
client "k8s.io/kubernetes/pkg/client/clientset_generated/release_1_3/typed/core/v1"
client_extensions "k8s.io/kubernetes/pkg/client/clientset_generated/release_1_3/typed/extensions/v1beta1"
kubectl_util "k8s.io/kubernetes/pkg/kubectl/cmd/util"
"os"
_ "k8s.io/kubernetes/federation/pkg/dnsprovider/providers/aws/route53"
_ "k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns"
)
var (
flags = pflag.NewFlagSet("", pflag.ExitOnError)
)
func main() {
dnsProviderId := "aws-route53"
flags.StringVar(&dnsProviderId, "dns", dnsProviderId, "DNS provider we should use (aws-route53, google-clouddns)")
var zones []string
flags.StringSliceVarP(&zones, "zone", "z", []string{}, "Configure permitted zones and their mappings")
watchIngress := true
flags.BoolVar(&watchIngress, "watch-ingress", watchIngress, "Configure hostnames found in ingress resources")
// Trick to avoid 'logging before flag.Parse' warning
flag.CommandLine.Parse([]string{})
flag.Set("logtostderr", "true")
flags.AddGoFlagSet(flag.CommandLine)
clientConfig := kubectl_util.DefaultClientConfig(flags)
flags.Parse(os.Args)
zoneRules, err := dns.ParseZoneRules(zones)
if err != nil {
glog.Errorf("unexpected zone flags: %q", err)
os.Exit(1)
}
config, err := clientConfig.ClientConfig()
if err != nil {
glog.Errorf("error building client configuration: %v", err)
os.Exit(1)
}
kubeClient, err := client.NewForConfig(config)
if err != nil {
glog.Fatalf("error building REST client: %v", err)
}
kubeExtensionsClient, err := client_extensions.NewForConfig(config)
if err != nil {
glog.Fatalf("error building extensions REST client: %v", err)
}
dnsProvider, err := dnsprovider.GetDnsProvider(dnsProviderId, nil)
if err != nil {
glog.Errorf("Error initializing DNS provider %q: %v", dnsProviderId, err)
os.Exit(1)
}
if dnsProvider == nil {
glog.Errorf("DNS provider was nil %q: %v", dnsProviderId, err)
os.Exit(1)
}
dnsController, err := dns.NewDNSController(dnsProvider, zoneRules)
if err != nil {
glog.Errorf("Error building DNS controller: %v", err)
os.Exit(1)
}
nodeController, err := watchers.NewNodeController(kubeClient, dnsController)
if err != nil {
glog.Errorf("Error building node controller: %v", err)
os.Exit(1)
}
podController, err := watchers.NewPodController(kubeClient, dnsController)
if err != nil {
glog.Errorf("Error building pod controller: %v", err)
os.Exit(1)
}
serviceController, err := watchers.NewServiceController(kubeClient, dnsController)
if err != nil {
glog.Errorf("Error building service controller: %v", err)
os.Exit(1)
}
var ingressController *watchers.IngressController
if watchIngress {
ingressController, err = watchers.NewIngressController(kubeExtensionsClient, dnsController)
if err != nil {
glog.Errorf("Error building ingress controller: %v", err)
os.Exit(1)
}
} else {
glog.Infof("Ingress controller disabled")
}
go nodeController.Run()
go podController.Run()
go serviceController.Run()
if ingressController != nil {
go ingressController.Run()
}
dnsController.Run()
}