Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
K
k3s
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Jacklull
k3s
Commits
e8b80a2f
Commit
e8b80a2f
authored
May 25, 2017
by
shashidharatd
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Added delaying deliverer to retry ensureDNSRecords
parent
08d98939
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
42 additions
and
18 deletions
+42
-18
dns.go
federation/pkg/federation-controller/service/dns/dns.go
+42
-18
No files found.
federation/pkg/federation-controller/service/dns/dns.go
View file @
e8b80a2f
...
@@ -22,8 +22,6 @@ import (
...
@@ -22,8 +22,6 @@ import (
"strings"
"strings"
"time"
"time"
"github.com/golang/glog"
"k8s.io/api/core/v1"
"k8s.io/api/core/v1"
metav1
"k8s.io/apimachinery/pkg/apis/meta/v1"
metav1
"k8s.io/apimachinery/pkg/apis/meta/v1"
pkgruntime
"k8s.io/apimachinery/pkg/runtime"
pkgruntime
"k8s.io/apimachinery/pkg/runtime"
...
@@ -33,12 +31,15 @@ import (
...
@@ -33,12 +31,15 @@ import (
"k8s.io/apimachinery/pkg/watch"
"k8s.io/apimachinery/pkg/watch"
corelisters
"k8s.io/client-go/listers/core/v1"
corelisters
"k8s.io/client-go/listers/core/v1"
"k8s.io/client-go/tools/cache"
"k8s.io/client-go/tools/cache"
"k8s.io/client-go/util/flowcontrol"
"k8s.io/client-go/util/workqueue"
"k8s.io/client-go/util/workqueue"
fedclientset
"k8s.io/kubernetes/federation/client/clientset_generated/federation_clientset"
fedclientset
"k8s.io/kubernetes/federation/client/clientset_generated/federation_clientset"
"k8s.io/kubernetes/federation/pkg/dnsprovider"
"k8s.io/kubernetes/federation/pkg/dnsprovider"
"k8s.io/kubernetes/federation/pkg/dnsprovider/rrstype"
"k8s.io/kubernetes/federation/pkg/dnsprovider/rrstype"
"k8s.io/kubernetes/federation/pkg/federation-controller/service/ingress"
"k8s.io/kubernetes/federation/pkg/federation-controller/service/ingress"
"k8s.io/kubernetes/federation/pkg/federation-controller/util"
"k8s.io/kubernetes/federation/pkg/federation-controller/util"
"github.com/golang/glog"
)
)
const
(
const
(
...
@@ -68,8 +69,10 @@ type ServiceDNSController struct {
...
@@ -68,8 +69,10 @@ type ServiceDNSController struct {
// Informer Store for federated services
// Informer Store for federated services
serviceStore
corelisters
.
ServiceLister
serviceStore
corelisters
.
ServiceLister
// Informer controller for federated services
// Informer controller for federated services
serviceController
cache
.
Controller
serviceController
cache
.
Controller
workQueue
workqueue
.
Interface
workQueue
workqueue
.
Interface
objectDeliverer
*
util
.
DelayingDeliverer
flowcontrolBackoff
*
flowcontrol
.
Backoff
}
}
// NewServiceDNSController returns a new service dns controller to manage DNS records for federated services
// NewServiceDNSController returns a new service dns controller to manage DNS records for federated services
...
@@ -81,13 +84,15 @@ func NewServiceDNSController(client fedclientset.Interface, dnsProvider, dnsProv
...
@@ -81,13 +84,15 @@ func NewServiceDNSController(client fedclientset.Interface, dnsProvider, dnsProv
return
nil
,
err
return
nil
,
err
}
}
d
:=
&
ServiceDNSController
{
d
:=
&
ServiceDNSController
{
federationClient
:
client
,
federationClient
:
client
,
dns
:
dns
,
dns
:
dns
,
federationName
:
federationName
,
federationName
:
federationName
,
serviceDNSSuffix
:
serviceDNSSuffix
,
serviceDNSSuffix
:
serviceDNSSuffix
,
zoneName
:
zoneName
,
zoneName
:
zoneName
,
zoneID
:
zoneID
,
zoneID
:
zoneID
,
workQueue
:
workqueue
.
New
(),
workQueue
:
workqueue
.
New
(),
objectDeliverer
:
util
.
NewDelayingDeliverer
(),
flowcontrolBackoff
:
flowcontrol
.
NewBackOff
(
5
*
time
.
Second
,
time
.
Minute
),
}
}
if
err
:=
d
.
validateConfig
();
err
!=
nil
{
if
err
:=
d
.
validateConfig
();
err
!=
nil
{
runtime
.
HandleError
(
fmt
.
Errorf
(
"Invalid configuration passed to DNS provider: %v"
,
err
))
runtime
.
HandleError
(
fmt
.
Errorf
(
"Invalid configuration passed to DNS provider: %v"
,
err
))
...
@@ -124,8 +129,13 @@ func (s *ServiceDNSController) DNSControllerRun(workers int, stopCh <-chan struc
...
@@ -124,8 +129,13 @@ func (s *ServiceDNSController) DNSControllerRun(workers int, stopCh <-chan struc
defer
s
.
workQueue
.
ShutDown
()
defer
s
.
workQueue
.
ShutDown
()
glog
.
Infof
(
"Starting federation service dns controller"
)
glog
.
Infof
(
"Starting federation service dns controller"
)
defer
glog
.
Infof
(
"Stopping federation service dns controller"
)
s
.
objectDeliverer
.
StartWithHandler
(
func
(
item
*
util
.
DelayingDelivererItem
)
{
s
.
workQueue
.
Add
(
item
.
Value
.
(
*
v1
.
Service
))
})
defer
s
.
objectDeliverer
.
Stop
()
util
.
StartBackoffGC
(
s
.
flowcontrolBackoff
,
stopCh
)
go
s
.
serviceController
.
Run
(
stopCh
)
go
s
.
serviceController
.
Run
(
stopCh
)
for
i
:=
0
;
i
<
workers
;
i
++
{
for
i
:=
0
;
i
<
workers
;
i
++
{
...
@@ -133,6 +143,18 @@ func (s *ServiceDNSController) DNSControllerRun(workers int, stopCh <-chan struc
...
@@ -133,6 +143,18 @@ func (s *ServiceDNSController) DNSControllerRun(workers int, stopCh <-chan struc
}
}
<-
stopCh
<-
stopCh
glog
.
Infof
(
"Stopping federation service dns controller"
)
}
// Adds backoff to delay if this delivery is related to some failure. Resets backoff if there was no failure.
func
(
s
*
ServiceDNSController
)
deliverService
(
service
*
v1
.
Service
,
delay
time
.
Duration
,
failed
bool
)
{
if
failed
{
s
.
flowcontrolBackoff
.
Next
(
service
.
String
(),
time
.
Now
())
delay
=
delay
+
s
.
flowcontrolBackoff
.
Get
(
service
.
String
())
}
else
{
s
.
flowcontrolBackoff
.
Reset
(
service
.
String
())
}
s
.
objectDeliverer
.
DeliverAfter
(
service
.
String
(),
service
,
delay
)
}
}
func
wantsDNSRecords
(
service
*
v1
.
Service
)
bool
{
func
wantsDNSRecords
(
service
*
v1
.
Service
)
bool
{
...
@@ -158,7 +180,10 @@ func (s *ServiceDNSController) workerFunction() bool {
...
@@ -158,7 +180,10 @@ func (s *ServiceDNSController) workerFunction() bool {
return
false
return
false
}
}
for
_
,
clusterIngress
:=
range
ingress
.
Items
{
for
_
,
clusterIngress
:=
range
ingress
.
Items
{
s
.
ensureDNSRecords
(
clusterIngress
.
Cluster
,
service
)
err
=
s
.
ensureDNSRecords
(
clusterIngress
.
Cluster
,
service
)
if
err
!=
nil
{
s
.
deliverService
(
service
,
0
,
true
)
}
}
}
return
false
return
false
}
}
...
@@ -500,10 +525,6 @@ func (s *ServiceDNSController) ensureDNSRecords(clusterName string, service *v1.
...
@@ -500,10 +525,6 @@ func (s *ServiceDNSController) ensureDNSRecords(clusterName string, service *v1.
if
zoneNames
==
nil
{
if
zoneNames
==
nil
{
return
fmt
.
Errorf
(
"failed to get cluster zone names"
)
return
fmt
.
Errorf
(
"failed to get cluster zone names"
)
}
}
zoneEndpoints
,
regionEndpoints
,
globalEndpoints
,
err
:=
s
.
getHealthyEndpoints
(
clusterName
,
service
)
if
err
!=
nil
{
return
err
}
commonPrefix
:=
serviceName
+
"."
+
namespaceName
+
"."
+
s
.
federationName
+
".svc"
commonPrefix
:=
serviceName
+
"."
+
namespaceName
+
"."
+
s
.
federationName
+
".svc"
// dnsNames is the path up the DNS search tree, starting at the leaf
// dnsNames is the path up the DNS search tree, starting at the leaf
dnsNames
:=
[]
string
{
dnsNames
:=
[]
string
{
...
@@ -513,8 +534,11 @@ func (s *ServiceDNSController) ensureDNSRecords(clusterName string, service *v1.
...
@@ -513,8 +534,11 @@ func (s *ServiceDNSController) ensureDNSRecords(clusterName string, service *v1.
""
,
// nowhere to go up from global level
""
,
// nowhere to go up from global level
}
}
zoneEndpoints
,
regionEndpoints
,
globalEndpoints
,
err
:=
s
.
getHealthyEndpoints
(
clusterName
,
service
)
if
err
!=
nil
{
return
err
}
endpoints
:=
[][]
string
{
zoneEndpoints
,
regionEndpoints
,
globalEndpoints
}
endpoints
:=
[][]
string
{
zoneEndpoints
,
regionEndpoints
,
globalEndpoints
}
for
i
,
endpoint
:=
range
endpoints
{
for
i
,
endpoint
:=
range
endpoints
{
if
err
=
s
.
ensureDNSRrsets
(
s
.
dnsZone
,
dnsNames
[
i
],
endpoint
,
dnsNames
[
i
+
1
]);
err
!=
nil
{
if
err
=
s
.
ensureDNSRrsets
(
s
.
dnsZone
,
dnsNames
[
i
],
endpoint
,
dnsNames
[
i
+
1
]);
err
!=
nil
{
return
err
return
err
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment