Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[release-4.16] OCPBUGS-53248: Enforce VIPs to be collocated at the same host #4923

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,63 @@ contents:
fall 2
}

{{- if and (eq .Infra.Status.PlatformStatus.Type "OpenStack") (or (eq .IPFamilies "DualStack") (eq .IPFamilies "DualStackIPv6Primary")) }}
# When using dual-stack with OpenStack, both IPv4 and IPv6 share the same Neutron Port,
# causing OVN to assume both addresses belong to the same node, which may not always be the case.
# To address this, we ensure that the API VIPs remain grouped through state changes,
# the same goes for Ingress VIPs.
vrrp_sync_group VG_API {
group {
{{`{{ range $i, $config := .Configs }}`}}
{{`{{$nonVirtualIP := .NonVirtualIP}}`}}

{{`{{$participateInAPIVRRP := not .EnableUnicast}}`}}
{{`{{- if .EnableUnicast}}
{{- range .LBConfig.Backends}}
{{- if eq $nonVirtualIP .Address}}
{{$participateInAPIVRRP = true}}
{{- end}}
{{- end}}
{{- end}}`}}

{{`{{if $participateInAPIVRRP}}`}}
{{`{{ .Cluster.Name }}`}}_API_{{`{{$i}}`}}
{{`{{ end }}`}}
{{`{{ end }}`}}
}
track_script {
chk_ocp_lb
chk_ocp_both
chk_mcs
}
}

vrrp_sync_group VG_INGRESS {
group {
{{`{{ range $i, $config := .Configs }}`}}
{{`{{$nonVirtualIP := .NonVirtualIP}}`}}
{{`{{$participateInIngressVRRP := not .EnableUnicast}}`}}
{{`{{- if .EnableUnicast}}
{{- range .IngressConfig.Peers}}
{{- if eq $nonVirtualIP .}}
{{$participateInIngressVRRP = true}}
{{- end}}
{{- end}}
{{- end}}`}}

{{`{{if $participateInIngressVRRP}}`}}
{{`{{ .Cluster.Name }}`}}_INGRESS_{{`{{$i}}`}}
{{`{{ end }}`}}
{{`{{ end }}`}}
}
track_script {
chk_ingress
chk_ingress_ready
chk_default_ingress
}
}
{{- end}}

{{`{{ range $i, $config := .Configs }}`}}
{{`{{$nonVirtualIP := .NonVirtualIP}}`}}

Expand Down Expand Up @@ -105,11 +162,13 @@ contents:
virtual_ipaddress {
{{`{{ .Cluster.APIVIP }}`}}/{{`{{ .Cluster.VIPNetmask }}`}} label vip
}
{{- if not (and (eq .Infra.Status.PlatformStatus.Type "OpenStack") (or (eq .IPFamilies "DualStack") (eq .IPFamilies "DualStackIPv6Primary"))) }}
track_script {
chk_ocp_lb
chk_ocp_both
chk_mcs
}
{{- end}}
}
{{`{{end}}`}}

Expand Down Expand Up @@ -146,11 +205,13 @@ contents:
virtual_ipaddress {
{{`{{ .Cluster.IngressVIP }}`}}/{{`{{ .Cluster.VIPNetmask }}`}} label vip
}
{{- if not (and (eq .Infra.Status.PlatformStatus.Type "OpenStack") (or (eq .IPFamilies "DualStack") (eq .IPFamilies "DualStackIPv6Primary"))) }}
track_script {
chk_ingress
chk_ingress_ready
chk_default_ingress
}
{{- end}}
}
{{`{{ end }}`}}
{{`{{ end }}`}}
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,38 @@ contents:
fall 2
}

{{- if and (eq .Infra.Status.PlatformStatus.Type "OpenStack") (or (eq .IPFamilies "DualStack") (eq .IPFamilies "DualStackIPv6Primary")) }}
# When using dual-stack with OpenStack, both IPv4 and IPv6 share the same Neutron Port,
# causing OVN to assume both addresses belong to the same node, which may not always be the case.
# To address this, we ensure that the API VIPs remain grouped through state changes,
# the same goes for Ingress VIPs.
vrrp_sync_group VG_INGRESS {
group {
{{`{{ range $i, $config := .Configs }}`}}
{{`{{$nonVirtualIP := .NonVirtualIP}}`}}

{{`{{$participateInIngressVRRP := not .EnableUnicast}}`}}
{{`{{- if .EnableUnicast}}
{{- range .IngressConfig.Peers}}
{{- if eq $nonVirtualIP .}}
{{$participateInIngressVRRP = true}}
{{- end}}
{{- end}}
{{- end}}`}}

{{`{{if $participateInIngressVRRP}}`}}
{{`{{ .Cluster.Name }}`}}_INGRESS_{{`{{$i}}`}}
{{`{{ end }}`}}
{{`{{ end }}`}}
}
track_script {
chk_ingress
chk_ingress_ready
chk_default_ingress
}
}
{{- end}}

{{`{{ range $i, $config := .Configs }}`}}
{{`{{$nonVirtualIP := .NonVirtualIP}}`}}

Expand Down Expand Up @@ -70,11 +102,13 @@ contents:
virtual_ipaddress {
{{`{{ .Cluster.IngressVIP }}`}}/{{`{{ .Cluster.VIPNetmask }}`}} label vip
}
{{- if not (and (eq .Infra.Status.PlatformStatus.Type "OpenStack") (or (eq .IPFamilies "DualStack") (eq .IPFamilies "DualStackIPv6Primary"))) }}
track_script {
chk_ingress
chk_ingress_ready
chk_default_ingress
}
{{- end}}
}
{{`{{ end }}`}}
{{`{{ end }}`}}