aboutsummaryrefslogtreecommitdiff
path: root/plugin/kubernetes
diff options
context:
space:
mode:
authorGravatar Miek Gieben <miek@miek.nl> 2017-10-20 22:53:17 +0100
committerGravatar GitHub <noreply@github.com> 2017-10-20 22:53:17 +0100
commitd64b684831aff2df86d9cea8e23bf57c85b6772f (patch)
tree7bf9e27b01d11b648255be9dc00e5964747772ba /plugin/kubernetes
parentc1f67493de3f13373082ee2e1ec6234c15642854 (diff)
downloadcoredns-d64b684831aff2df86d9cea8e23bf57c85b6772f.tar.gz
coredns-d64b684831aff2df86d9cea8e23bf57c85b6772f.tar.zst
coredns-d64b684831aff2df86d9cea8e23bf57c85b6772f.zip
plugin/kubernetes: implement HasSynced() (#1155)
* plugin/kubernetes: wait until api is ready Wait for HasSynced before allowing startup to avoid startup race. Also do a small refactor in findServices() to pull a check out of the loop - only needs to be done once. * sigh
Diffstat (limited to 'plugin/kubernetes')
-rw-r--r--plugin/kubernetes/apiproxy.go4
-rw-r--r--plugin/kubernetes/controller.go23
-rw-r--r--plugin/kubernetes/handler_test.go1
-rw-r--r--plugin/kubernetes/kubernetes.go9
-rw-r--r--plugin/kubernetes/kubernetes_test.go1
-rw-r--r--plugin/kubernetes/ns_test.go1
-rw-r--r--plugin/kubernetes/reverse_test.go1
-rw-r--r--plugin/kubernetes/setup.go8
8 files changed, 29 insertions, 19 deletions
diff --git a/plugin/kubernetes/apiproxy.go b/plugin/kubernetes/apiproxy.go
index 196ca5e60..59a569885 100644
--- a/plugin/kubernetes/apiproxy.go
+++ b/plugin/kubernetes/apiproxy.go
@@ -65,7 +65,9 @@ func (p *proxyHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
func (p *apiProxy) Run() {
p.handler.Start()
- p.Serve(p.listener)
+ go func() {
+ p.Serve(p.listener)
+ }()
}
func (p *apiProxy) Stop() {
diff --git a/plugin/kubernetes/controller.go b/plugin/kubernetes/controller.go
index a3145bf3d..3cad9e6c2 100644
--- a/plugin/kubernetes/controller.go
+++ b/plugin/kubernetes/controller.go
@@ -38,6 +38,7 @@ type dnsController interface {
GetNodeByName(string) (*api.Node, error)
Run()
+ HasSynced() bool
Stop() error
}
@@ -229,17 +230,6 @@ func endpointsWatchFunc(c *kubernetes.Clientset, ns string, s *labels.Selector)
}
}
-func (dns *dnsControl) controllersInSync() bool {
- hs := dns.svcController.HasSynced() &&
- dns.epController.HasSynced()
-
- if dns.podController != nil {
- hs = hs && dns.podController.HasSynced()
- }
-
- return hs
-}
-
// Stop stops the controller.
func (dns *dnsControl) Stop() error {
dns.stopLock.Lock()
@@ -266,6 +256,17 @@ func (dns *dnsControl) Run() {
<-dns.stopCh
}
+// HasSynced calls on all controllers.
+func (dns *dnsControl) HasSynced() bool {
+ a := dns.svcController.HasSynced()
+ b := dns.epController.HasSynced()
+ c := true
+ if dns.podController != nil {
+ c = dns.podController.HasSynced()
+ }
+ return a && b && c
+}
+
func (dns *dnsControl) ServiceList() (svcs []*api.Service) {
os := dns.svcLister.List()
for _, o := range os {
diff --git a/plugin/kubernetes/handler_test.go b/plugin/kubernetes/handler_test.go
index 77edae236..5e9743b68 100644
--- a/plugin/kubernetes/handler_test.go
+++ b/plugin/kubernetes/handler_test.go
@@ -191,6 +191,7 @@ func TestServeDNS(t *testing.T) {
type APIConnServeTest struct{}
+func (APIConnServeTest) HasSynced() bool { return true }
func (APIConnServeTest) Run() { return }
func (APIConnServeTest) Stop() error { return nil }
func (APIConnServeTest) EpIndexReverse(string) []*api.Endpoints { return nil }
diff --git a/plugin/kubernetes/kubernetes.go b/plugin/kubernetes/kubernetes.go
index f51ee8e3b..11b6cc882 100644
--- a/plugin/kubernetes/kubernetes.go
+++ b/plugin/kubernetes/kubernetes.go
@@ -338,10 +338,13 @@ func (k *Kubernetes) findServices(r recordRequest, zone string) (services []msg.
)
if wildcard(r.service) || wildcard(r.namespace) {
serviceList = k.APIConn.ServiceList()
+ endpointsList = k.APIConn.EndpointsList()
} else {
idx = r.service + "." + r.namespace
serviceList = k.APIConn.SvcIndex(idx)
+ endpointsList = k.APIConn.EpIndex(idx)
}
+
for _, svc := range serviceList {
if !(match(r.namespace, svc.Namespace) && match(r.service, svc.Name)) {
@@ -356,12 +359,6 @@ func (k *Kubernetes) findServices(r recordRequest, zone string) (services []msg.
// Endpoint query or headless service
if svc.Spec.ClusterIP == api.ClusterIPNone || r.endpoint != "" {
- if wildcard(r.service) || wildcard(r.namespace) {
- endpointsList = k.APIConn.EndpointsList()
- } else {
- idx = r.service + "." + r.namespace
- endpointsList = k.APIConn.EpIndex(idx)
- }
for _, ep := range endpointsList {
if ep.ObjectMeta.Name != svc.Name || ep.ObjectMeta.Namespace != svc.Namespace {
continue
diff --git a/plugin/kubernetes/kubernetes_test.go b/plugin/kubernetes/kubernetes_test.go
index fecc7c396..ae0bb13e5 100644
--- a/plugin/kubernetes/kubernetes_test.go
+++ b/plugin/kubernetes/kubernetes_test.go
@@ -51,6 +51,7 @@ func TestEndpointHostname(t *testing.T) {
type APIConnServiceTest struct{}
+func (APIConnServiceTest) HasSynced() bool { return true }
func (APIConnServiceTest) Run() { return }
func (APIConnServiceTest) Stop() error { return nil }
func (APIConnServiceTest) PodIndex(string) []*api.Pod { return nil }
diff --git a/plugin/kubernetes/ns_test.go b/plugin/kubernetes/ns_test.go
index f179231a9..70e297054 100644
--- a/plugin/kubernetes/ns_test.go
+++ b/plugin/kubernetes/ns_test.go
@@ -9,6 +9,7 @@ import (
type APIConnTest struct{}
+func (APIConnTest) HasSynced() bool { return true }
func (APIConnTest) Run() { return }
func (APIConnTest) Stop() error { return nil }
func (APIConnTest) PodIndex(string) []*api.Pod { return nil }
diff --git a/plugin/kubernetes/reverse_test.go b/plugin/kubernetes/reverse_test.go
index f9102f244..7a5435181 100644
--- a/plugin/kubernetes/reverse_test.go
+++ b/plugin/kubernetes/reverse_test.go
@@ -14,6 +14,7 @@ import (
type APIConnReverseTest struct{}
+func (APIConnReverseTest) HasSynced() bool { return true }
func (APIConnReverseTest) Run() { return }
func (APIConnReverseTest) Stop() error { return nil }
func (APIConnReverseTest) PodIndex(string) []*api.Pod { return nil }
diff --git a/plugin/kubernetes/setup.go b/plugin/kubernetes/setup.go
index cc823d54e..13e6c810f 100644
--- a/plugin/kubernetes/setup.go
+++ b/plugin/kubernetes/setup.go
@@ -39,8 +39,14 @@ func setup(c *caddy.Controller) error {
c.OnStartup(func() error {
go kubernetes.APIConn.Run()
if kubernetes.APIProxy != nil {
- go kubernetes.APIProxy.Run()
+ kubernetes.APIProxy.Run()
}
+ synced := false
+ for synced == false {
+ synced = kubernetes.APIConn.HasSynced()
+ time.Sleep(100 * time.Millisecond)
+ }
+
return nil
})
path: root/packages/renderers/renderer-preact (unfollow)
AgeCommit message (Expand)AuthorFilesLines
2022-01-11[ci] yarn formatGravatar matthewp 1-4/+2
2022-01-11Fix: static-build with .md pages (#2363)Gravatar Matthew Phillips 6-3/+66
2022-01-11Restore accessibility check on docs site (#2362)Gravatar Jonathan Neal 2-14/+281
2022-01-11chore: remove www (#2361)Gravatar Nate Moore 87-3240/+11
2022-01-11Fix build output in static build mode (#2358)Gravatar Matthew Phillips 3-1/+16
2022-01-11Fix renderer-solid (fix #2336) (#2359)Gravatar toSayNothing 2-1/+6
2022-01-11[ci] collect statsGravatar FredKSchott 1-0/+1
2022-01-10Use smooth scrolling with reduced motion has no preference (#2355)Gravatar Jonathan Neal 1-3/+7
2022-01-10move changeset to run after build, no test required (#2341)Gravatar Fred K. Schott 1-2/+2
2022-01-10Note that Astro also supports `<Fragment>` syntax (#2354)Gravatar Zade Viggers 1-16/+18
2022-01-10smooth scroll behavior property added (#2256)Gravatar Divyamrit 1-1/+3
2022-01-10Add Astro Blog RSS feed (#2301)Gravatar Rafael Bardini 2-3/+20
2022-01-10Update Cloudflare Pages guide (#2345)Gravatar Jacob Rask 1-2/+2
2022-01-10[ci] update lockfile (#2351)Gravatar Fred K. Schott 1-116/+116
2022-01-10Update instructions for the monorepo (#2274)Gravatar Caleb Jasik 1-5/+12
2022-01-10Fix Astro Preview Pathing Issues (#2338)Gravatar Jonathan Neal 5-144/+150
2022-01-10[ci] collect statsGravatar FredKSchott 1-0/+1
2022-01-09[ci] collect statsGravatar FredKSchott 1-0/+1
2022-01-08[ci] update lockfile (#2344)Gravatar Fred K. Schott 1-33/+33
2022-01-08Fix sitemap.xml page urls (#2335)Gravatar Jonathan Neal 4-4/+8
2022-01-08[ci] collect statsGravatar FredKSchott 1-0/+1
2022-01-07Create .git-blame-ignore-revs (#2254)Gravatar Jonathan Neal 2-0/+8
2022-01-07Fix issue with plugins running twice in dev and build (#2323)Gravatar Jonathan Neal 2-2/+5
2022-01-07[ci] yarn formatGravatar matthewp 1-8/+8
2022-01-07[ci] release (#2339)astro@0.22.9Gravatar github-actions[bot] 28-39/+40
2022-01-07[ci] yarn formatGravatar matthewp 3-7/+8
2022-01-07Handle loading the Code package in the static build (#2337)Gravatar Matthew Phillips 8-4/+87
2022-01-07[ci] update lockfile (#2334)Gravatar Fred K. Schott 1-154/+154
2022-01-07[ci] yarn formatGravatar matthewp 1-8/+8
2022-01-07[ci] release (#2333)astro@0.22.8Gravatar github-actions[bot] 28-39/+40
2022-01-07[ci] collect statsGravatar FredKSchott 1-0/+1
2022-01-06[ci] yarn formatGravatar matthewp 4-54/+54
2022-01-06[ci] update lockfile (#2327)Gravatar Fred K. Schott 1-58/+64
2022-01-06Fix subpath support regressions (#2330)Gravatar Matthew Phillips 12-22/+566
2022-01-06[ci] yarn formatGravatar natemoo-re 1-2/+2
2022-01-06Added "IntelliSense for TypeScript" (#2326)astro@0.22.7Gravatar Morritz 1-0/+17
2022-01-06[ci] collect statsGravatar FredKSchott 1-0/+1
2022-01-06[ci] yarn formatGravatar FredKSchott 1-8/+8
2022-01-05[ci] release (#2320)Gravatar github-actions[bot] 31-54/+46
2022-01-05chore: update compiler (#2324)Gravatar Nate Moore 3-5/+10