Controller: Fix panic in alternative backend merging. (#11794)
Co-authored-by: joey <zchengjoey@gmail.com>
This commit is contained in:
parent
5fec9baa79
commit
c419a2ca27
2 changed files with 78 additions and 2 deletions
|
@ -1594,7 +1594,11 @@ func mergeAlternativeBackends(ing *ingress.Ingress, upstreams map[string]*ingres
|
||||||
altEqualsPri := false
|
altEqualsPri := false
|
||||||
|
|
||||||
for _, loc := range servers[defServerName].Locations {
|
for _, loc := range servers[defServerName].Locations {
|
||||||
priUps := upstreams[loc.Backend]
|
priUps, ok := upstreams[loc.Backend]
|
||||||
|
if !ok {
|
||||||
|
klog.Warningf("cannot find primary backend %s for location %s%s", loc.Backend, servers[defServerName].Hostname, loc.Path)
|
||||||
|
continue
|
||||||
|
}
|
||||||
altEqualsPri = altUps.Name == priUps.Name
|
altEqualsPri = altUps.Name == priUps.Name
|
||||||
if altEqualsPri {
|
if altEqualsPri {
|
||||||
klog.Warningf("alternative upstream %s in Ingress %s/%s is primary upstream in Other Ingress for location %s%s!",
|
klog.Warningf("alternative upstream %s in Ingress %s/%s is primary upstream in Other Ingress for location %s%s!",
|
||||||
|
@ -1653,7 +1657,11 @@ func mergeAlternativeBackends(ing *ingress.Ingress, upstreams map[string]*ingres
|
||||||
|
|
||||||
// find matching paths
|
// find matching paths
|
||||||
for _, loc := range server.Locations {
|
for _, loc := range server.Locations {
|
||||||
priUps := upstreams[loc.Backend]
|
priUps, ok := upstreams[loc.Backend]
|
||||||
|
if !ok {
|
||||||
|
klog.Warningf("cannot find primary backend %s for location %s%s", loc.Backend, server.Hostname, loc.Path)
|
||||||
|
continue
|
||||||
|
}
|
||||||
altEqualsPri = altUps.Name == priUps.Name
|
altEqualsPri = altUps.Name == priUps.Name
|
||||||
if altEqualsPri {
|
if altEqualsPri {
|
||||||
klog.Warningf("alternative upstream %s in Ingress %s/%s is primary upstream in Other Ingress for location %s%s!",
|
klog.Warningf("alternative upstream %s in Ingress %s/%s is primary upstream in Other Ingress for location %s%s!",
|
||||||
|
|
|
@ -1292,6 +1292,74 @@ func TestMergeAlternativeBackends(t *testing.T) {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
"alternative backend does not merge for missing upstream": {
|
||||||
|
&ingress.Ingress{
|
||||||
|
Ingress: networking.Ingress{
|
||||||
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
|
Namespace: "example",
|
||||||
|
},
|
||||||
|
Spec: networking.IngressSpec{
|
||||||
|
Rules: []networking.IngressRule{
|
||||||
|
{
|
||||||
|
Host: "example.com",
|
||||||
|
IngressRuleValue: networking.IngressRuleValue{
|
||||||
|
HTTP: &networking.HTTPIngressRuleValue{
|
||||||
|
Paths: []networking.HTTPIngressPath{
|
||||||
|
{
|
||||||
|
Path: "/",
|
||||||
|
PathType: &pathTypePrefix,
|
||||||
|
Backend: networking.IngressBackend{
|
||||||
|
Service: &networking.IngressServiceBackend{
|
||||||
|
Name: "http-svc-canary",
|
||||||
|
Port: networking.ServiceBackendPort{
|
||||||
|
Number: 80,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
map[string]*ingress.Backend{
|
||||||
|
"example-http-svc-canary-80": {
|
||||||
|
Name: "example-http-svc-canary-80",
|
||||||
|
NoServer: true,
|
||||||
|
TrafficShapingPolicy: ingress.TrafficShapingPolicy{
|
||||||
|
Weight: 20,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
map[string]*ingress.Server{
|
||||||
|
"example.com": {
|
||||||
|
Hostname: "example.com",
|
||||||
|
Locations: []*ingress.Location{
|
||||||
|
{
|
||||||
|
Path: "/",
|
||||||
|
PathType: &pathTypePrefix,
|
||||||
|
Backend: "example-http-svc-80",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
map[string]*ingress.Backend{},
|
||||||
|
map[string]*ingress.Server{
|
||||||
|
"example.com": {
|
||||||
|
Hostname: "example.com",
|
||||||
|
Locations: []*ingress.Location{
|
||||||
|
{
|
||||||
|
Path: "/",
|
||||||
|
PathType: &pathTypePrefix,
|
||||||
|
Backend: "example-http-svc-80",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
for title, tc := range testCases {
|
for title, tc := range testCases {
|
||||||
|
|
Loading…
Reference in a new issue