Skip to content

Commit

Permalink
Merge pull request openshift#391 from luis5tb/ovn-octavia-autodetect
Browse files Browse the repository at this point in the history
Autodetect OVN octavia provider
  • Loading branch information
openshift-merge-robot committed Dec 18, 2019
2 parents e83d06c + c1cdc53 commit f804733
Show file tree
Hide file tree
Showing 110 changed files with 3,347 additions and 270 deletions.
6 changes: 4 additions & 2 deletions Gopkg.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions Gopkg.toml
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ required = [
[prune]
go-tests = true
non-go = true

[[prune.project]]
name = "k8s.io/code-generator"
non-go = false
Expand All @@ -61,7 +61,7 @@ required = [

[[constraint]]
name = "github.com/gophercloud/gophercloud"
revision="17584a22adf89c48eb1f2518e71326b3b01ba573"
revision="2567326a4c71208f8b4717a784a912212b5eff7d"

[[constraint]]
name = "github.com/containernetworking/cni"
Expand Down
8 changes: 8 additions & 0 deletions bindata/network/kuryr/003-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,14 @@ data:
service_security_groups_driver = policy
pod_subnets_driver = namespace
endpoints_driver_octavia_provider = {{ default "default" .OctaviaProvider }}
[octavia_defaults]
member_mode = {{ default "L3" .OctaviaMemberMode }}
sg_mode = {{ default "update" .OctaviaSGMode }}
enforce_sg_rules = {{ .OctaviaSGEnforce }}
lb_algorithm = {{ .OctaviaLBAlgorithm }}
[namespace_subnet]
pod_router = {{ .WorkerNodesRouter }}
pod_subnet_pool = {{ .PodSubnetpool }}
Expand Down
1 change: 1 addition & 0 deletions pkg/bootstrap/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ type KuryrBootstrapResult struct {
PodSecurityGroups []string
ExternalNetwork string
ClusterID string
OctaviaProvider string
OpenStackCloud clientconfig.Cloud
WebhookCA string
WebhookCAKey string
Expand Down
18 changes: 18 additions & 0 deletions pkg/network/kuryr.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,10 @@ import (
iputil "github.com/openshift/cluster-network-operator/pkg/util/ip"
)

const (
OVNProvider = "ovn"
)

// renderKuryr returns manifests for Kuryr SDN.
// This includes manifests of
// - the openshift-kuryr namespace
Expand Down Expand Up @@ -54,6 +58,20 @@ func renderKuryr(conf *operv1.NetworkSpec, bootstrapResult *bootstrap.BootstrapR
data.Data["PoolMinPorts"] = c.PoolMinPorts
data.Data["PoolBatchPorts"] = c.PoolBatchPorts

// Octavia config data
data.Data["OctaviaProvider"] = b.OctaviaProvider
if b.OctaviaProvider == OVNProvider {
data.Data["OctaviaMemberMode"] = "L2"
data.Data["OctaviaSGMode"] = "create"
data.Data["OctaviaSGEnforce"] = "false"
data.Data["OctaviaLBAlgorithm"] = "SOURCE_IP_PORT"
} else {
data.Data["OctaviaMemberMode"] = "L3"
data.Data["OctaviaSGMode"] = "update"
data.Data["OctaviaSGEnforce"] = "true"
data.Data["OctaviaLBAlgorithm"] = "ROUND_ROBIN"
}

// kuryr-daemon DaemonSet data
data.Data["DaemonEnableProbes"] = true
data.Data["DaemonProbesPort"] = c.DaemonProbesPort
Expand Down
30 changes: 30 additions & 0 deletions pkg/platform/openstack/kuryr_bootstrap.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import (
"github.com/gophercloud/gophercloud/openstack/loadbalancer/v2/loadbalancers"
"github.com/gophercloud/gophercloud/openstack/loadbalancer/v2/monitors"
"github.com/gophercloud/gophercloud/openstack/loadbalancer/v2/pools"
"github.com/gophercloud/gophercloud/openstack/loadbalancer/v2/providers"
"github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/attributestags"
"github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/layer3/routers"
"github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/security/groups"
Expand Down Expand Up @@ -49,9 +50,12 @@ const (
// NOTE(dulek): This one is hardcoded in openshift/installer.
InfrastructureCRDName = "cluster"
MinOctaviaVersionWithHTTPSMonitors = "v2.10"
MinOctaviaVersionWithProviders = "v2.6"
MinOctaviaVersionWithTagSupport = "v2.5"
MinOctaviaVersionWithTimeouts = "v2.1"
KuryrNamespace = "openshift-kuryr"
// NOTE(ltomasbo): Only OVN octavia driver supported on kuryr
OVNProvider = "ovn"
)

func GetClusterID(kubeClient client.Client) (string, error) {
Expand Down Expand Up @@ -1077,6 +1081,31 @@ func BootstrapKuryr(conf *operv1.NetworkSpec, kubeClient client.Client) (*bootst
return nil, errors.Wrap(err, "failed to ensure Certificate")
}

log.Print("Checking OVN Octavia driver support")
octaviaProviderSupport, err := IsOctaviaVersionSupported(client, MinOctaviaVersionWithProviders)
if err != nil {
return nil, errors.Wrap(err, "failed to determine if Octavia supports providers")
}

octaviaProvider := "default"
if octaviaProviderSupport {
page, err := providers.List(lbClient, providers.ListOpts{}).AllPages()
if err != nil {
log.Print("failed to get lbs provider list, using default octavia provider")
} else {
providers, err := providers.ExtractProviders(page)
if err != nil {
return nil, errors.Wrap(err, "failed to extract providers list")
}
for _, provider := range providers {
if provider.Name == OVNProvider {
log.Print("OVN Provider is enabled and Kuryr will use it")
octaviaProvider = OVNProvider
}
}
}
}

log.Print("Kuryr bootstrap finished")

res := bootstrap.BootstrapResult{
Expand All @@ -1088,6 +1117,7 @@ func BootstrapKuryr(conf *operv1.NetworkSpec, kubeClient client.Client) (*bootst
PodSecurityGroups: []string{podSgId},
ExternalNetwork: externalNetwork,
ClusterID: clusterID,
OctaviaProvider: octaviaProvider,
OpenStackCloud: cloud,
WebhookCA: b64.StdEncoding.EncodeToString(ca),
WebhookCAKey: b64.StdEncoding.EncodeToString(key),
Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit f804733

Please sign in to comment.