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
4e1630d3
Commit
4e1630d3
authored
Jul 22, 2015
by
Tim Hockin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Stop populating legacy DNS names
parent
dfe1eb9b
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
42 additions
and
80 deletions
+42
-80
kube2sky.go
cluster/addons/dns/kube2sky/kube2sky.go
+23
-43
kube2sky_test.go
cluster/addons/dns/kube2sky/kube2sky_test.go
+19
-35
dns.go
test/e2e/dns.go
+0
-2
No files found.
cluster/addons/dns/kube2sky/kube2sky.go
View file @
4e1630d3
...
@@ -111,13 +111,12 @@ func (ks *kube2sky) writeSkyRecord(subdomain string, data string) error {
...
@@ -111,13 +111,12 @@ func (ks *kube2sky) writeSkyRecord(subdomain string, data string) error {
}
}
// Generates skydns records for a headless service.
// Generates skydns records for a headless service.
func
(
ks
*
kube2sky
)
newHeadlessService
(
subdomain
string
,
service
*
kapi
.
Service
,
isNewStyleFormat
bool
)
error
{
func
(
ks
*
kube2sky
)
newHeadlessService
(
subdomain
string
,
service
*
kapi
.
Service
)
error
{
// Create an A record for every pod in the service.
// Create an A record for every pod in the service.
// This record must be periodically updated.
// This record must be periodically updated.
// Format is as follows:
// Format is as follows:
// For a service x, with pods a and b create DNS records,
// For a service x, with pods a and b create DNS records,
// a.x.ns.domain. and, b.x.ns.domain.
// a.x.ns.domain. and, b.x.ns.domain.
// TODO: Handle multi-port services.
ks
.
mlock
.
Lock
()
ks
.
mlock
.
Lock
()
defer
ks
.
mlock
.
Unlock
()
defer
ks
.
mlock
.
Unlock
()
key
,
err
:=
kcache
.
MetaNamespaceKeyFunc
(
service
)
key
,
err
:=
kcache
.
MetaNamespaceKeyFunc
(
service
)
...
@@ -133,7 +132,7 @@ func (ks *kube2sky) newHeadlessService(subdomain string, service *kapi.Service,
...
@@ -133,7 +132,7 @@ func (ks *kube2sky) newHeadlessService(subdomain string, service *kapi.Service,
return
nil
return
nil
}
}
if
e
,
ok
:=
e
.
(
*
kapi
.
Endpoints
);
ok
{
if
e
,
ok
:=
e
.
(
*
kapi
.
Endpoints
);
ok
{
return
ks
.
generateRecordsForHeadlessService
(
subdomain
,
e
,
service
,
isNewStyleFormat
)
return
ks
.
generateRecordsForHeadlessService
(
subdomain
,
e
,
service
)
}
}
return
nil
return
nil
}
}
...
@@ -148,7 +147,7 @@ func getSkyMsg(ip string, port int) *skymsg.Service {
...
@@ -148,7 +147,7 @@ func getSkyMsg(ip string, port int) *skymsg.Service {
}
}
}
}
func
(
ks
*
kube2sky
)
generateRecordsForHeadlessService
(
subdomain
string
,
e
*
kapi
.
Endpoints
,
svc
*
kapi
.
Service
,
isNewStyleFormat
bool
)
error
{
func
(
ks
*
kube2sky
)
generateRecordsForHeadlessService
(
subdomain
string
,
e
*
kapi
.
Endpoints
,
svc
*
kapi
.
Service
)
error
{
for
idx
:=
range
e
.
Subsets
{
for
idx
:=
range
e
.
Subsets
{
for
subIdx
:=
range
e
.
Subsets
[
idx
]
.
Addresses
{
for
subIdx
:=
range
e
.
Subsets
[
idx
]
.
Addresses
{
b
,
err
:=
json
.
Marshal
(
getSkyMsg
(
e
.
Subsets
[
idx
]
.
Addresses
[
subIdx
]
.
IP
,
0
))
b
,
err
:=
json
.
Marshal
(
getSkyMsg
(
e
.
Subsets
[
idx
]
.
Addresses
[
subIdx
]
.
IP
,
0
))
...
@@ -163,15 +162,13 @@ func (ks *kube2sky) generateRecordsForHeadlessService(subdomain string, e *kapi.
...
@@ -163,15 +162,13 @@ func (ks *kube2sky) generateRecordsForHeadlessService(subdomain string, e *kapi.
if
err
:=
ks
.
writeSkyRecord
(
recordKey
,
recordValue
);
err
!=
nil
{
if
err
:=
ks
.
writeSkyRecord
(
recordKey
,
recordValue
);
err
!=
nil
{
return
err
return
err
}
}
if
isNewStyleFormat
{
for
portIdx
:=
range
e
.
Subsets
[
idx
]
.
Ports
{
for
portIdx
:=
range
e
.
Subsets
[
idx
]
.
Ports
{
endpointPort
:=
&
e
.
Subsets
[
idx
]
.
Ports
[
portIdx
]
endpointPort
:=
&
e
.
Subsets
[
idx
]
.
Ports
[
portIdx
]
portSegment
:=
buildPortSegmentString
(
endpointPort
.
Name
,
endpointPort
.
Protocol
)
portSegment
:=
buildPortSegmentString
(
endpointPort
.
Name
,
endpointPort
.
Protocol
)
if
portSegment
!=
""
{
if
portSegment
!=
""
{
err
:=
ks
.
generateSRVRecord
(
subdomain
,
portSegment
,
recordLabel
,
recordKey
,
endpointPort
.
Port
)
err
:=
ks
.
generateSRVRecord
(
subdomain
,
portSegment
,
recordLabel
,
recordKey
,
endpointPort
.
Port
)
if
err
!=
nil
{
if
err
!=
nil
{
return
err
return
err
}
}
}
}
}
}
}
...
@@ -200,7 +197,7 @@ func (ks *kube2sky) getServiceFromEndpoints(e *kapi.Endpoints) (*kapi.Service, e
...
@@ -200,7 +197,7 @@ func (ks *kube2sky) getServiceFromEndpoints(e *kapi.Endpoints) (*kapi.Service, e
return
nil
,
fmt
.
Errorf
(
"got a non service object in services store %v"
,
obj
)
return
nil
,
fmt
.
Errorf
(
"got a non service object in services store %v"
,
obj
)
}
}
func
(
ks
*
kube2sky
)
addDNSUsingEndpoints
(
subdomain
string
,
e
*
kapi
.
Endpoints
,
isNewStyleFormat
bool
)
error
{
func
(
ks
*
kube2sky
)
addDNSUsingEndpoints
(
subdomain
string
,
e
*
kapi
.
Endpoints
)
error
{
ks
.
mlock
.
Lock
()
ks
.
mlock
.
Lock
()
defer
ks
.
mlock
.
Unlock
()
defer
ks
.
mlock
.
Unlock
()
svc
,
err
:=
ks
.
getServiceFromEndpoints
(
e
)
svc
,
err
:=
ks
.
getServiceFromEndpoints
(
e
)
...
@@ -215,41 +212,29 @@ func (ks *kube2sky) addDNSUsingEndpoints(subdomain string, e *kapi.Endpoints, is
...
@@ -215,41 +212,29 @@ func (ks *kube2sky) addDNSUsingEndpoints(subdomain string, e *kapi.Endpoints, is
if
err
:=
ks
.
removeDNS
(
subdomain
);
err
!=
nil
{
if
err
:=
ks
.
removeDNS
(
subdomain
);
err
!=
nil
{
return
err
return
err
}
}
return
ks
.
generateRecordsForHeadlessService
(
subdomain
,
e
,
svc
,
isNewStyleFormat
)
return
ks
.
generateRecordsForHeadlessService
(
subdomain
,
e
,
svc
)
}
}
func
(
ks
*
kube2sky
)
handleEndpointAdd
(
obj
interface
{})
{
func
(
ks
*
kube2sky
)
handleEndpointAdd
(
obj
interface
{})
{
if
e
,
ok
:=
obj
.
(
*
kapi
.
Endpoints
);
ok
{
if
e
,
ok
:=
obj
.
(
*
kapi
.
Endpoints
);
ok
{
name
:=
buildDNSNameString
(
ks
.
domain
,
e
.
Namespace
,
e
.
Name
)
name
:=
buildDNSNameString
(
ks
.
domain
,
serviceSubdomain
,
e
.
Namespace
,
e
.
Name
)
ks
.
mutateEtcdOrDie
(
func
()
error
{
return
ks
.
addDNSUsingEndpoints
(
name
,
e
,
false
)
})
ks
.
mutateEtcdOrDie
(
func
()
error
{
return
ks
.
addDNSUsingEndpoints
(
name
,
e
)
})
name
=
buildDNSNameString
(
ks
.
domain
,
serviceSubdomain
,
e
.
Namespace
,
e
.
Name
)
ks
.
mutateEtcdOrDie
(
func
()
error
{
return
ks
.
addDNSUsingEndpoints
(
name
,
e
,
true
)
})
}
}
}
}
func
(
ks
*
kube2sky
)
generateRecordsForPortalService
(
subdomain
string
,
service
*
kapi
.
Service
,
isNewStyleFormat
bool
)
error
{
func
(
ks
*
kube2sky
)
generateRecordsForPortalService
(
subdomain
string
,
service
*
kapi
.
Service
)
error
{
b
,
err
:=
json
.
Marshal
(
getSkyMsg
(
service
.
Spec
.
ClusterIP
,
0
))
b
,
err
:=
json
.
Marshal
(
getSkyMsg
(
service
.
Spec
.
ClusterIP
,
0
))
if
err
!=
nil
{
if
err
!=
nil
{
return
err
return
err
}
}
recordValue
:=
string
(
b
)
recordValue
:=
string
(
b
)
recordKey
:=
subdomain
recordLabel
:=
getHash
(
recordValue
)
recordLabel
:=
""
recordKey
:=
buildDNSNameString
(
subdomain
,
recordLabel
)
if
isNewStyleFormat
{
recordLabel
=
getHash
(
recordValue
)
if
err
!=
nil
{
return
err
}
recordKey
=
buildDNSNameString
(
subdomain
,
recordLabel
)
}
glog
.
V
(
2
)
.
Infof
(
"Setting DNS record: %v -> %q, with recordKey: %v
\n
"
,
subdomain
,
recordValue
,
recordKey
)
glog
.
V
(
2
)
.
Infof
(
"Setting DNS record: %v -> %q, with recordKey: %v
\n
"
,
subdomain
,
recordValue
,
recordKey
)
if
err
:=
ks
.
writeSkyRecord
(
recordKey
,
recordValue
);
err
!=
nil
{
if
err
:=
ks
.
writeSkyRecord
(
recordKey
,
recordValue
);
err
!=
nil
{
return
err
return
err
}
}
if
!
isNewStyleFormat
{
return
nil
}
// Generate SRV Records
// Generate SRV Records
for
i
:=
range
service
.
Spec
.
Ports
{
for
i
:=
range
service
.
Spec
.
Ports
{
port
:=
&
service
.
Spec
.
Ports
[
i
]
port
:=
&
service
.
Spec
.
Ports
[
i
]
...
@@ -290,15 +275,15 @@ func (ks *kube2sky) generateSRVRecord(subdomain, portSegment, recordName, cName
...
@@ -290,15 +275,15 @@ func (ks *kube2sky) generateSRVRecord(subdomain, portSegment, recordName, cName
return
nil
return
nil
}
}
func
(
ks
*
kube2sky
)
addDNS
(
subdomain
string
,
service
*
kapi
.
Service
,
isNewStyleFormat
bool
)
error
{
func
(
ks
*
kube2sky
)
addDNS
(
subdomain
string
,
service
*
kapi
.
Service
)
error
{
if
len
(
service
.
Spec
.
Ports
)
==
0
{
if
len
(
service
.
Spec
.
Ports
)
==
0
{
glog
.
Fatalf
(
"unexpected service with no ports: %v"
,
service
)
glog
.
Fatalf
(
"unexpected service with no ports: %v"
,
service
)
}
}
// if ClusterIP is not set, a DNS entry should not be created
// if ClusterIP is not set, a DNS entry should not be created
if
!
kapi
.
IsServiceIPSet
(
service
)
{
if
!
kapi
.
IsServiceIPSet
(
service
)
{
return
ks
.
newHeadlessService
(
subdomain
,
service
,
isNewStyleFormat
)
return
ks
.
newHeadlessService
(
subdomain
,
service
)
}
}
return
ks
.
generateRecordsForPortalService
(
subdomain
,
service
,
isNewStyleFormat
)
return
ks
.
generateRecordsForPortalService
(
subdomain
,
service
)
}
}
// Implements retry logic for arbitrary mutator. Crashes after retrying for
// Implements retry logic for arbitrary mutator. Crashes after retrying for
...
@@ -345,19 +330,14 @@ func createEndpointsLW(kubeClient *kclient.Client) *kcache.ListWatch {
...
@@ -345,19 +330,14 @@ func createEndpointsLW(kubeClient *kclient.Client) *kcache.ListWatch {
func
(
ks
*
kube2sky
)
newService
(
obj
interface
{})
{
func
(
ks
*
kube2sky
)
newService
(
obj
interface
{})
{
if
s
,
ok
:=
obj
.
(
*
kapi
.
Service
);
ok
{
if
s
,
ok
:=
obj
.
(
*
kapi
.
Service
);
ok
{
//TODO(artfulcoder) stop adding and deleting old-format string for service
name
:=
buildDNSNameString
(
ks
.
domain
,
serviceSubdomain
,
s
.
Namespace
,
s
.
Name
)
name
:=
buildDNSNameString
(
ks
.
domain
,
s
.
Namespace
,
s
.
Name
)
ks
.
mutateEtcdOrDie
(
func
()
error
{
return
ks
.
addDNS
(
name
,
s
)
})
ks
.
mutateEtcdOrDie
(
func
()
error
{
return
ks
.
addDNS
(
name
,
s
,
false
)
})
name
=
buildDNSNameString
(
ks
.
domain
,
serviceSubdomain
,
s
.
Namespace
,
s
.
Name
)
ks
.
mutateEtcdOrDie
(
func
()
error
{
return
ks
.
addDNS
(
name
,
s
,
true
)
})
}
}
}
}
func
(
ks
*
kube2sky
)
removeService
(
obj
interface
{})
{
func
(
ks
*
kube2sky
)
removeService
(
obj
interface
{})
{
if
s
,
ok
:=
obj
.
(
*
kapi
.
Service
);
ok
{
if
s
,
ok
:=
obj
.
(
*
kapi
.
Service
);
ok
{
name
:=
buildDNSNameString
(
ks
.
domain
,
s
.
Namespace
,
s
.
Name
)
name
:=
buildDNSNameString
(
ks
.
domain
,
serviceSubdomain
,
s
.
Namespace
,
s
.
Name
)
ks
.
mutateEtcdOrDie
(
func
()
error
{
return
ks
.
removeDNS
(
name
)
})
name
=
buildDNSNameString
(
ks
.
domain
,
serviceSubdomain
,
s
.
Namespace
,
s
.
Name
)
ks
.
mutateEtcdOrDie
(
func
()
error
{
return
ks
.
removeDNS
(
name
)
})
ks
.
mutateEtcdOrDie
(
func
()
error
{
return
ks
.
removeDNS
(
name
)
})
}
}
}
}
...
...
cluster/addons/dns/kube2sky/kube2sky_test.go
View file @
4e1630d3
...
@@ -94,11 +94,7 @@ func newKube2Sky(ec etcdClient) *kube2sky {
...
@@ -94,11 +94,7 @@ func newKube2Sky(ec etcdClient) *kube2sky {
}
}
}
}
func
getEtcdOldStylePath
(
name
,
namespace
string
)
string
{
func
getEtcdPathForA
(
name
,
namespace
string
)
string
{
return
path
.
Join
(
basePath
,
namespace
,
name
)
}
func
getEtcdNewStylePath
(
name
,
namespace
string
)
string
{
return
path
.
Join
(
basePath
,
serviceSubDomain
,
namespace
,
name
)
return
path
.
Join
(
basePath
,
serviceSubDomain
,
namespace
,
name
)
}
}
...
@@ -125,18 +121,11 @@ func getHostPortFromString(data string) (*hostPort, error) {
...
@@ -125,18 +121,11 @@ func getHostPortFromString(data string) (*hostPort, error) {
}
}
func
assertDnsServiceEntryInEtcd
(
t
*
testing
.
T
,
ec
*
fakeEtcdClient
,
serviceName
,
namespace
string
,
expectedHostPort
*
hostPort
)
{
func
assertDnsServiceEntryInEtcd
(
t
*
testing
.
T
,
ec
*
fakeEtcdClient
,
serviceName
,
namespace
string
,
expectedHostPort
*
hostPort
)
{
oldStyleKey
:=
getEtcdOldStylePath
(
serviceName
,
namespace
)
key
:=
getEtcdPathForA
(
serviceName
,
namespace
)
values
:=
ec
.
Get
(
oldStyleKey
)
values
:=
ec
.
Get
(
key
)
require
.
True
(
t
,
len
(
values
)
>
0
,
fmt
.
Sprintf
(
"oldStyleKey '%s' not found."
,
oldStyleKey
))
actualHostPort
,
err
:=
getHostPortFromString
(
values
[
0
])
require
.
NoError
(
t
,
err
)
assert
.
Equal
(
t
,
expectedHostPort
.
Host
,
actualHostPort
.
Host
)
newStyleKey
:=
getEtcdNewStylePath
(
serviceName
,
namespace
)
values
=
ec
.
Get
(
newStyleKey
)
//require.True(t, exists)
//require.True(t, exists)
require
.
True
(
t
,
len
(
values
)
>
0
,
"
newStyleKey
entry not found."
)
require
.
True
(
t
,
len
(
values
)
>
0
,
"entry not found."
)
actualHostPort
,
err
=
getHostPortFromString
(
values
[
0
])
actualHostPort
,
err
:
=
getHostPortFromString
(
values
[
0
])
require
.
NoError
(
t
,
err
)
require
.
NoError
(
t
,
err
)
assert
.
Equal
(
t
,
expectedHostPort
.
Host
,
actualHostPort
.
Host
)
assert
.
Equal
(
t
,
expectedHostPort
.
Host
,
actualHostPort
.
Host
)
}
}
...
@@ -230,9 +219,8 @@ func TestHeadlessService(t *testing.T) {
...
@@ -230,9 +219,8 @@ func TestHeadlessService(t *testing.T) {
assert
.
NoError
(
t
,
k2s
.
servicesStore
.
Add
(
&
service
))
assert
.
NoError
(
t
,
k2s
.
servicesStore
.
Add
(
&
service
))
endpoints
:=
newEndpoints
(
service
,
newSubsetWithOnePort
(
""
,
80
,
"10.0.0.1"
,
"10.0.0.2"
),
newSubsetWithOnePort
(
""
,
8080
,
"10.0.0.3"
,
"10.0.0.4"
))
endpoints
:=
newEndpoints
(
service
,
newSubsetWithOnePort
(
""
,
80
,
"10.0.0.1"
,
"10.0.0.2"
),
newSubsetWithOnePort
(
""
,
8080
,
"10.0.0.3"
,
"10.0.0.4"
))
// We expect 4 records with "svc" subdomain and 4 records without
// We expect 4 records.
// "svc" subdomain.
expectedDNSRecords
:=
4
expectedDNSRecords
:=
8
assert
.
NoError
(
t
,
k2s
.
endpointsStore
.
Add
(
&
endpoints
))
assert
.
NoError
(
t
,
k2s
.
endpointsStore
.
Add
(
&
endpoints
))
k2s
.
newService
(
&
service
)
k2s
.
newService
(
&
service
)
assert
.
Equal
(
t
,
expectedDNSRecords
,
len
(
ec
.
writes
))
assert
.
Equal
(
t
,
expectedDNSRecords
,
len
(
ec
.
writes
))
...
@@ -251,9 +239,8 @@ func TestHeadlessServiceWithNamedPorts(t *testing.T) {
...
@@ -251,9 +239,8 @@ func TestHeadlessServiceWithNamedPorts(t *testing.T) {
assert
.
NoError
(
t
,
k2s
.
servicesStore
.
Add
(
&
service
))
assert
.
NoError
(
t
,
k2s
.
servicesStore
.
Add
(
&
service
))
endpoints
:=
newEndpoints
(
service
,
newSubsetWithTwoPorts
(
"http1"
,
80
,
"http2"
,
81
,
"10.0.0.1"
,
"10.0.0.2"
),
newSubsetWithOnePort
(
"https"
,
443
,
"10.0.0.3"
,
"10.0.0.4"
))
endpoints
:=
newEndpoints
(
service
,
newSubsetWithTwoPorts
(
"http1"
,
80
,
"http2"
,
81
,
"10.0.0.1"
,
"10.0.0.2"
),
newSubsetWithOnePort
(
"https"
,
443
,
"10.0.0.3"
,
"10.0.0.4"
))
// We expect 14 records. 6 SRV records. 4 POD entries with old style, 4 POD entries with new style
// We expect 10 records. 6 SRV records. 4 POD records.
// "svc" subdomain.
expectedDNSRecords
:=
10
expectedDNSRecords
:=
14
assert
.
NoError
(
t
,
k2s
.
endpointsStore
.
Add
(
&
endpoints
))
assert
.
NoError
(
t
,
k2s
.
endpointsStore
.
Add
(
&
endpoints
))
k2s
.
newService
(
&
service
)
k2s
.
newService
(
&
service
)
assert
.
Equal
(
t
,
expectedDNSRecords
,
len
(
ec
.
writes
))
assert
.
Equal
(
t
,
expectedDNSRecords
,
len
(
ec
.
writes
))
...
@@ -263,8 +250,8 @@ func TestHeadlessServiceWithNamedPorts(t *testing.T) {
...
@@ -263,8 +250,8 @@ func TestHeadlessServiceWithNamedPorts(t *testing.T) {
endpoints
.
Subsets
=
endpoints
.
Subsets
[
:
1
]
endpoints
.
Subsets
=
endpoints
.
Subsets
[
:
1
]
k2s
.
handleEndpointAdd
(
&
endpoints
)
k2s
.
handleEndpointAdd
(
&
endpoints
)
// We expect
8 records. 4 SRV records. 2 POD entries with old style, 2 POD entries with new style
// We expect
6 records. 4 SRV records. 2 POD records.
expectedDNSRecords
=
8
expectedDNSRecords
=
6
assert
.
Equal
(
t
,
expectedDNSRecords
,
len
(
ec
.
writes
))
assert
.
Equal
(
t
,
expectedDNSRecords
,
len
(
ec
.
writes
))
assertSRVEntryInEtcd
(
t
,
ec
,
"http1"
,
"tcp"
,
testService
,
testNamespace
,
80
,
2
)
assertSRVEntryInEtcd
(
t
,
ec
,
"http1"
,
"tcp"
,
testService
,
testNamespace
,
80
,
2
)
assertSRVEntryInEtcd
(
t
,
ec
,
"http2"
,
"tcp"
,
testService
,
testNamespace
,
81
,
2
)
assertSRVEntryInEtcd
(
t
,
ec
,
"http2"
,
"tcp"
,
testService
,
testNamespace
,
81
,
2
)
...
@@ -284,14 +271,14 @@ func TestHeadlessServiceEndpointsUpdate(t *testing.T) {
...
@@ -284,14 +271,14 @@ func TestHeadlessServiceEndpointsUpdate(t *testing.T) {
assert
.
NoError
(
t
,
k2s
.
servicesStore
.
Add
(
&
service
))
assert
.
NoError
(
t
,
k2s
.
servicesStore
.
Add
(
&
service
))
endpoints
:=
newEndpoints
(
service
,
newSubsetWithOnePort
(
""
,
80
,
"10.0.0.1"
,
"10.0.0.2"
))
endpoints
:=
newEndpoints
(
service
,
newSubsetWithOnePort
(
""
,
80
,
"10.0.0.1"
,
"10.0.0.2"
))
expectedDNSRecords
:=
4
expectedDNSRecords
:=
2
assert
.
NoError
(
t
,
k2s
.
endpointsStore
.
Add
(
&
endpoints
))
assert
.
NoError
(
t
,
k2s
.
endpointsStore
.
Add
(
&
endpoints
))
k2s
.
newService
(
&
service
)
k2s
.
newService
(
&
service
)
assert
.
Equal
(
t
,
expectedDNSRecords
,
len
(
ec
.
writes
))
assert
.
Equal
(
t
,
expectedDNSRecords
,
len
(
ec
.
writes
))
endpoints
.
Subsets
=
append
(
endpoints
.
Subsets
,
endpoints
.
Subsets
=
append
(
endpoints
.
Subsets
,
newSubsetWithOnePort
(
""
,
8080
,
"10.0.0.3"
,
"10.0.0.4"
),
newSubsetWithOnePort
(
""
,
8080
,
"10.0.0.3"
,
"10.0.0.4"
),
)
)
expectedDNSRecords
=
8
expectedDNSRecords
=
4
k2s
.
handleEndpointAdd
(
&
endpoints
)
k2s
.
handleEndpointAdd
(
&
endpoints
)
assert
.
Equal
(
t
,
expectedDNSRecords
,
len
(
ec
.
writes
))
assert
.
Equal
(
t
,
expectedDNSRecords
,
len
(
ec
.
writes
))
...
@@ -315,9 +302,8 @@ func TestHeadlessServiceWithDelayedEndpointsAddition(t *testing.T) {
...
@@ -315,9 +302,8 @@ func TestHeadlessServiceWithDelayedEndpointsAddition(t *testing.T) {
// Add an endpoints object for the service.
// Add an endpoints object for the service.
endpoints
:=
newEndpoints
(
service
,
newSubsetWithOnePort
(
""
,
80
,
"10.0.0.1"
,
"10.0.0.2"
),
newSubsetWithOnePort
(
""
,
8080
,
"10.0.0.3"
,
"10.0.0.4"
))
endpoints
:=
newEndpoints
(
service
,
newSubsetWithOnePort
(
""
,
80
,
"10.0.0.1"
,
"10.0.0.2"
),
newSubsetWithOnePort
(
""
,
8080
,
"10.0.0.3"
,
"10.0.0.4"
))
// We expect 4 records with "svc" subdomain and 4 records without
// We expect 4 records.
// "svc" subdomain.
expectedDNSRecords
:=
4
expectedDNSRecords
:=
8
k2s
.
handleEndpointAdd
(
&
endpoints
)
k2s
.
handleEndpointAdd
(
&
endpoints
)
assert
.
Equal
(
t
,
expectedDNSRecords
,
len
(
ec
.
writes
))
assert
.
Equal
(
t
,
expectedDNSRecords
,
len
(
ec
.
writes
))
}
}
...
@@ -347,7 +333,7 @@ func TestUpdateSinglePortService(t *testing.T) {
...
@@ -347,7 +333,7 @@ func TestUpdateSinglePortService(t *testing.T) {
k2s
:=
newKube2Sky
(
ec
)
k2s
:=
newKube2Sky
(
ec
)
service
:=
newService
(
testNamespace
,
testService
,
"1.2.3.4"
,
""
,
0
)
service
:=
newService
(
testNamespace
,
testService
,
"1.2.3.4"
,
""
,
0
)
k2s
.
newService
(
&
service
)
k2s
.
newService
(
&
service
)
assert
.
Len
(
t
,
ec
.
writes
,
2
)
assert
.
Len
(
t
,
ec
.
writes
,
1
)
newService
:=
service
newService
:=
service
newService
.
Spec
.
ClusterIP
=
"0.0.0.0"
newService
.
Spec
.
ClusterIP
=
"0.0.0.0"
k2s
.
updateService
(
&
service
,
&
newService
)
k2s
.
updateService
(
&
service
,
&
newService
)
...
@@ -365,9 +351,7 @@ func TestDeleteSinglePortService(t *testing.T) {
...
@@ -365,9 +351,7 @@ func TestDeleteSinglePortService(t *testing.T) {
service
:=
newService
(
testNamespace
,
testService
,
"1.2.3.4"
,
""
,
80
)
service
:=
newService
(
testNamespace
,
testService
,
"1.2.3.4"
,
""
,
80
)
// Add the service
// Add the service
k2s
.
newService
(
&
service
)
k2s
.
newService
(
&
service
)
// two entries should get created, one with the svc subdomain (new-style)
assert
.
Len
(
t
,
ec
.
writes
,
1
)
// , and one without the svc subdomain (old-style)
assert
.
Len
(
t
,
ec
.
writes
,
2
)
// Delete the service
// Delete the service
k2s
.
removeService
(
&
service
)
k2s
.
removeService
(
&
service
)
assert
.
Empty
(
t
,
ec
.
writes
)
assert
.
Empty
(
t
,
ec
.
writes
)
...
@@ -387,7 +371,7 @@ func TestServiceWithNamePort(t *testing.T) {
...
@@ -387,7 +371,7 @@ func TestServiceWithNamePort(t *testing.T) {
expectedValue
:=
getHostPort
(
&
service
)
expectedValue
:=
getHostPort
(
&
service
)
assertDnsServiceEntryInEtcd
(
t
,
ec
,
testService
,
testNamespace
,
expectedValue
)
assertDnsServiceEntryInEtcd
(
t
,
ec
,
testService
,
testNamespace
,
expectedValue
)
assertSRVEntryInEtcd
(
t
,
ec
,
"http1"
,
"tcp"
,
testService
,
testNamespace
,
80
,
1
)
assertSRVEntryInEtcd
(
t
,
ec
,
"http1"
,
"tcp"
,
testService
,
testNamespace
,
80
,
1
)
assert
.
Len
(
t
,
ec
.
writes
,
3
)
assert
.
Len
(
t
,
ec
.
writes
,
2
)
// update service
// update service
newService
:=
service
newService
:=
service
...
@@ -396,7 +380,7 @@ func TestServiceWithNamePort(t *testing.T) {
...
@@ -396,7 +380,7 @@ func TestServiceWithNamePort(t *testing.T) {
expectedValue
=
getHostPort
(
&
newService
)
expectedValue
=
getHostPort
(
&
newService
)
assertDnsServiceEntryInEtcd
(
t
,
ec
,
testService
,
testNamespace
,
expectedValue
)
assertDnsServiceEntryInEtcd
(
t
,
ec
,
testService
,
testNamespace
,
expectedValue
)
assertSRVEntryInEtcd
(
t
,
ec
,
"http2"
,
"tcp"
,
testService
,
testNamespace
,
80
,
1
)
assertSRVEntryInEtcd
(
t
,
ec
,
"http2"
,
"tcp"
,
testService
,
testNamespace
,
80
,
1
)
assert
.
Len
(
t
,
ec
.
writes
,
3
)
assert
.
Len
(
t
,
ec
.
writes
,
2
)
// Delete the service
// Delete the service
k2s
.
removeService
(
&
service
)
k2s
.
removeService
(
&
service
)
...
...
test/e2e/dns.go
View file @
4e1630d3
...
@@ -201,12 +201,10 @@ var _ = Describe("DNS", func() {
...
@@ -201,12 +201,10 @@ var _ = Describe("DNS", func() {
// All the names we need to be able to resolve.
// All the names we need to be able to resolve.
// TODO: Spin up a separate test service and test that dns works for that service.
// TODO: Spin up a separate test service and test that dns works for that service.
// TODO: Should these be changed to kubernetes.kube-system etc. ?
namesToResolve
:=
[]
string
{
namesToResolve
:=
[]
string
{
"kubernetes.default"
,
"kubernetes.default"
,
"kubernetes.default.svc"
,
"kubernetes.default.svc"
,
"kubernetes.default.svc.cluster.local"
,
"kubernetes.default.svc.cluster.local"
,
"kubernetes.default.cluster.local"
,
"google.com"
,
"google.com"
,
}
}
// Added due to #8512. This is critical for GCE and GKE deployments.
// Added due to #8512. This is critical for GCE and GKE deployments.
...
...
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