mirror of
https://github.com/traefik/traefik.git
synced 2026-06-17 19:09:29 +03:00
Fix BackendTLSPolicy status update
Co-authored-by: Kevin Pollet <pollet.kevin@gmail.com>
This commit is contained in:
@@ -720,20 +720,27 @@ func (c *clientWrapper) UpdateBackendTLSPolicyStatus(ctx context.Context, policy
|
|||||||
ancestorStatuses := make([]gatev1.PolicyAncestorStatus, len(status.Ancestors))
|
ancestorStatuses := make([]gatev1.PolicyAncestorStatus, len(status.Ancestors))
|
||||||
copy(ancestorStatuses, status.Ancestors)
|
copy(ancestorStatuses, status.Ancestors)
|
||||||
|
|
||||||
// keep statuses added by other gateway controllers,
|
|
||||||
// and statuses for Traefik gateway controller but not for the same Gateway as the one in parameter (AncestorRef).
|
|
||||||
for _, ancestorStatus := range currentPolicy.Status.Ancestors {
|
for _, ancestorStatus := range currentPolicy.Status.Ancestors {
|
||||||
|
// Keep statuses added by other gateway controllers.
|
||||||
if ancestorStatus.ControllerName != controllerName {
|
if ancestorStatus.ControllerName != controllerName {
|
||||||
ancestorStatuses = append(ancestorStatuses, ancestorStatus)
|
ancestorStatuses = append(ancestorStatuses, ancestorStatus)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Keep statuses added by Traefik for other ancestors.
|
||||||
|
// A BackendTLSPolicy can target services attached to different listeners.
|
||||||
|
if !slices.ContainsFunc(status.Ancestors, func(s gatev1.PolicyAncestorStatus) bool {
|
||||||
|
return reflect.DeepEqual(s.AncestorRef, ancestorStatus.AncestorRef)
|
||||||
|
}) {
|
||||||
|
ancestorStatuses = append(ancestorStatuses, ancestorStatus)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(ancestorStatuses) > 16 {
|
if len(ancestorStatuses) > 16 {
|
||||||
return fmt.Errorf("failed to update BackendTLSPolicy %s/%s status: PolicyAncestor statuses count exceeds 16", policy.Namespace, policy.Name)
|
return fmt.Errorf("failed to update BackendTLSPolicy %s/%s status: PolicyAncestor statuses count exceeds 16", policy.Namespace, policy.Name)
|
||||||
}
|
}
|
||||||
|
|
||||||
// do not update status when nothing has changed.
|
// Do not update status when nothing has changed.
|
||||||
if policyAncestorStatusesEqual(currentPolicy.Status.Ancestors, ancestorStatuses) {
|
if policyAncestorStatusesEqual(currentPolicy.Status.Ancestors, ancestorStatuses) {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -451,6 +451,12 @@ func (p *Provider) loadHTTPServers(ctx context.Context, namespace string, route
|
|||||||
var serversTransport *dynamic.ServersTransport
|
var serversTransport *dynamic.ServersTransport
|
||||||
for _, policy := range backendTLSPolicies {
|
for _, policy := range backendTLSPolicies {
|
||||||
for _, targetRef := range policy.Spec.TargetRefs {
|
for _, targetRef := range policy.Spec.TargetRefs {
|
||||||
|
// Skip targetRefs that doesn't match the backendRef,
|
||||||
|
// since a BackendTLSPolicy can select multiple services.
|
||||||
|
if targetRef.Name != backendRef.Name {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
// Skip the targetRef if the sectionName doesn't match the backendRef port.
|
||||||
if targetRef.SectionName != nil && svcPort.Name != string(*targetRef.SectionName) {
|
if targetRef.SectionName != nil && svcPort.Name != string(*targetRef.SectionName) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user