Allow custom default server when host is empty in ingress rule

This commit is contained in:
Manuel de Brito Fontes 2016-05-01 19:07:31 -03:00
parent b086a686dd
commit 4d25306b52
2 changed files with 30 additions and 15 deletions

View file

@ -618,15 +618,18 @@ func (lbc *loadBalancerController) getUpstreamServers(data []interface{}) ([]*ng
upstreams[defUpstreamName] = lbc.getDefaultUpstream()
servers := lbc.createServers(data)
// default server - no servername.
servers[defServerName] = &nginx.Server{
Name: defServerName,
Locations: []*nginx.Location{{
Path: rootLocation,
IsDefBackend: true,
Upstream: *lbc.getDefaultUpstream(),
},
},
if _, ok := servers[defServerName]; !ok {
// default server - no servername.
// there is no rule with default backend
servers[defServerName] = &nginx.Server{
Name: defServerName,
Locations: []*nginx.Location{{
Path: rootLocation,
IsDefBackend: true,
Upstream: *lbc.getDefaultUpstream(),
},
},
}
}
for _, ingIf := range data {
@ -637,7 +640,14 @@ func (lbc *loadBalancerController) getUpstreamServers(data []interface{}) ([]*ng
continue
}
server := servers[rule.Host]
host := rule.Host
if host == "" {
host = defServerName
}
server := servers[host]
if server == nil {
server = servers["_"]
}
for _, path := range rule.HTTP.Paths {
upsName := fmt.Sprintf("%v-%v-%v", ing.GetNamespace(), path.Backend.ServiceName, path.Backend.ServicePort.String())
@ -768,18 +778,23 @@ func (lbc *loadBalancerController) createServers(data []interface{}) map[string]
ing := ingIf.(*extensions.Ingress)
for _, rule := range ing.Spec.Rules {
if _, ok := servers[rule.Host]; !ok {
host := rule.Host
if host == "" {
host = defServerName
}
if _, ok := servers[host]; !ok {
locs := []*nginx.Location{}
locs = append(locs, &nginx.Location{
Path: rootLocation,
IsDefBackend: true,
Upstream: *lbc.getDefaultUpstream(),
})
servers[rule.Host] = &nginx.Server{Name: rule.Host, Locations: locs}
servers[host] = &nginx.Server{Name: host, Locations: locs}
}
if pemFile, ok := pems[rule.Host]; ok {
server := servers[rule.Host]
if pemFile, ok := pems[host]; ok {
server := servers[host]
server.SSL = true
server.SSLCertificate = pemFile
server.SSLCertificateKey = pemFile

View file

@ -16,7 +16,7 @@ spec:
spec:
terminationGracePeriodSeconds: 60
containers:
- image: aledbf/nginx-third-party:0.15
- image: gcr.io/google_containers/nginx-ingress-controller:0.6
name: nginx-ingress-lb
imagePullPolicy: Always
livenessProbe: