Skip to content
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
2 changes: 1 addition & 1 deletion assets/components/ovn/configmap.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ metadata:
data:
ovnkube.conf: |-
[default]
mtu="{{.MTU}}"
mtu="{{.OVNConfig.MTU}}"
cluster-subnets={{.ClusterCIDR}}
encap-port="6081"
enable-lflow-cache=false
Expand Down
3 changes: 0 additions & 3 deletions docs/howto_config.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ cluster:
dns: ""
domain: ""
url: ""
mtu: ""
nodeIP: ""
nodeName: ""
logVLevel: ""
Expand All @@ -33,7 +32,6 @@ The configuration settings alongside with the supported command line arguments a
| dns | --cluster-dns | MICROSHIFT_CLUSTER_DNS | The Kubernetes service IP address where pods query for name resolution
| domain | --cluster-domain | MICROSHIFT_CLUSTER_DOMAIN | Base DNS domain used to construct fully qualified pod and service domain names
| url | --url | MICROSHIFT_CLUSTER_URL | URL of the API server for the cluster.
| mtu | --cluster-mtu | MICROSHIFT_CLUSTER_MTU | The maximum transmission unit for the Generic Network Virtualization Encapsulation overlay network
| nodeIP | --node-ip | MICROSHIFT_NODEIP | The IP address of the node, defaults to IP of the default route
| nodeName | --node-name | MICROSHIFT_NODENAME | The name of the node, defaults to hostname
| logVLevel | --v | MICROSHIFT_LOGVLEVEL | Log verbosity (0-5)
Expand All @@ -50,7 +48,6 @@ cluster:
dns: 10.43.0.10
domain: cluster.local
url: https://127.0.0.1:6443
mtu: "1400"
nodeIP: ""
nodeName: ""
logVLevel: 0
Expand Down
3 changes: 0 additions & 3 deletions packaging/microshift/config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,6 @@ cluster:
# URL of the API server for the cluster
#url: https://127.0.0.1:6443

# MTU for CNI
#mtu: "1400"

# Log verbosity (0-5)
#logVLevel: 0

Expand Down
9 changes: 9 additions & 0 deletions packaging/systemd/configure-ovs.sh
Original file line number Diff line number Diff line change
Expand Up @@ -626,6 +626,15 @@ fi
# print initial state
print_state
if [ "$1" == "OVNKubernetes" ]; then
# Skip configuring NICs onto OVS bridge "br-ex" when disableOVSInit is true
MICROSHIFT_OVN_CONFIG_FILE_PATH="/etc/microshift/ovn.yaml"
if [ -f "$MICROSHIFT_OVN_CONFIG_FILE_PATH" ]; then
disableOVSInit=$(cat "$MICROSHIFT_OVN_CONFIG_FILE_PATH" | awk "/disableOVSInit:/ && ! /#.*disableOVSInit:/ {print \$2}")
if [ "$disableOVSInit" == "true" ]; then
echo "disableOVSInit is true, skipped configure-ovs.sh "
exit 0
fi
fi
# Configures NICs onto OVS bridge "br-ex"
# Configuration is either auto-detected or provided through a config file written already in Network Manager
# key files under /etc/NetworkManager/system-connections/
Expand Down
1 change: 0 additions & 1 deletion pkg/cmd/run.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,6 @@ func addRunFlags(cmd *cobra.Command, cfg *config.MicroshiftConfig) {
flags.String("service-node-port-range", cfg.Cluster.ServiceNodePortRange, "The port range to reserve for services with NodePort visibility. This must not overlap with the ephemeral port range on nodes.")
flags.String("cluster-dns", cfg.Cluster.DNS, "Comma-separated list of DNS server IP address. This value is used for containers DNS server in case of Pods with \"dnsPolicy=ClusterFirst\".")
flags.String("cluster-domain", cfg.Cluster.Domain, "Domain for this cluster.")
flags.String("cluster-mtu", cfg.Cluster.MTU, "Network MTU for pods in the cluster.")
}

func NewRunMicroshiftCommand() *cobra.Command {
Expand Down
4 changes: 2 additions & 2 deletions pkg/components/components.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,8 @@ func StartComponents(cfg *config.MicroshiftConfig) error {
return err
}

if err := startOVNKubernetes(cfg, kubeAdminConfig); err != nil {
klog.Warningf("Failed to start OVNKubernetes: %v", err)
if err := startCNIPlugin(cfg, kubeAdminConfig); err != nil {
klog.Warningf("Failed to start CNI plugin: %v", err)
return err
}
return nil
Expand Down
17 changes: 16 additions & 1 deletion pkg/components/networking.go
Original file line number Diff line number Diff line change
@@ -1,14 +1,17 @@
package components

import (
"fmt"
"path/filepath"

"github.com/openshift/microshift/pkg/assets"
"github.com/openshift/microshift/pkg/config"
"github.com/openshift/microshift/pkg/config/ovn"
"github.com/openshift/microshift/pkg/util"
"k8s.io/klog/v2"
)

func startOVNKubernetes(cfg *config.MicroshiftConfig, kubeconfigPath string) error {
func startCNIPlugin(cfg *config.MicroshiftConfig, kubeconfigPath string) error {
var (
ns = []string{
"components/ovn/namespace.yaml",
Expand Down Expand Up @@ -38,6 +41,17 @@ func startOVNKubernetes(cfg *config.MicroshiftConfig, kubeconfigPath string) err
}
)

ovnConfig, err := ovn.NewOVNKubernetesConfigFromFileOrDefault(filepath.Join(filepath.Dir(config.GetConfigFile()), ovn.ConfigFileName))
if err != nil {
return err
}

if ovnConfig.DisableOVSInit {
if err := ovnConfig.ValidateOVSBridge(util.OVNGatewayInterface); err != nil {
return fmt.Errorf("failed to find ovn-kubernetes gateway bridge %s: %v", util.OVNGatewayInterface, err)
}
}

if err := assets.ApplyNamespaces(ns, kubeconfigPath); err != nil {
klog.Warningf("Failed to apply ns %v: %v", ns, err)
return err
Expand All @@ -63,6 +77,7 @@ func startOVNKubernetes(cfg *config.MicroshiftConfig, kubeconfigPath string) err
return err
}
extraParams := assets.RenderParams{
"OVNConfig": ovnConfig,
"KubeconfigPath": kubeconfigPath,
"KubeconfigDir": filepath.Join(microshiftDataDir, "/resources/kubeadmin"),
}
Expand Down
1 change: 0 additions & 1 deletion pkg/components/render.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@ func renderParamsFromConfig(cfg *config.MicroshiftConfig, extra assets.RenderPar
"ServiceCIDR": cfg.Cluster.ServiceCIDR,
"ClusterDNS": cfg.Cluster.DNS,
"ClusterDomain": cfg.Cluster.Domain,
"MTU": cfg.Cluster.MTU,
}
for k, v := range extra {
params[k] = v
Expand Down
5 changes: 0 additions & 5 deletions pkg/config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,6 @@ type ClusterConfig struct {
ServiceNodePortRange string `json:"serviceNodePortRange"`
DNS string `json:"dns"`
Domain string `json:"domain"`
MTU string `json:"mtu"`
}

type IngressConfig struct {
Expand Down Expand Up @@ -112,7 +111,6 @@ func NewMicroshiftConfig() *MicroshiftConfig {
ServiceNodePortRange: "30000-32767",
DNS: "10.43.0.10",
Domain: "cluster.local",
MTU: "1400",
},
}
}
Expand Down Expand Up @@ -231,9 +229,6 @@ func (c *MicroshiftConfig) ReadFromCmdLine(flags *pflag.FlagSet) error {
if s, err := flags.GetString("cluster-domain"); err == nil && flags.Changed("cluster-domain") {
c.Cluster.Domain = s
}
if s, err := flags.GetString("cluster-mtu"); err == nil && flags.Changed("cluster-mtu") {
c.Cluster.MTU = s
}

return nil
}
Expand Down
7 changes: 0 additions & 7 deletions pkg/config/config_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,6 @@ func TestCommandLineConfig(t *testing.T) {
ServiceNodePortRange: "1024-32767",
DNS: "cluster.dns",
Domain: "cluster.local",
MTU: "1200",
},
},
err: nil,
Expand All @@ -72,7 +71,6 @@ func TestCommandLineConfig(t *testing.T) {
flags.String("service-node-port-range", config.Cluster.ServiceNodePortRange, "")
flags.String("cluster-dns", config.Cluster.DNS, "")
flags.String("cluster-domain", config.Cluster.Domain, "")
flags.String("cluster-mtu", config.Cluster.MTU, "")

// parse the flags
var err error
Expand All @@ -86,7 +84,6 @@ func TestCommandLineConfig(t *testing.T) {
"--service-node-port-range=" + tt.config.Cluster.ServiceNodePortRange,
"--cluster-dns=" + tt.config.Cluster.DNS,
"--cluster-domain=" + tt.config.Cluster.Domain,
"--cluster-mtu=" + tt.config.Cluster.MTU,
})
if err != nil {
t.Errorf("failed to parse command line flags: %s", err)
Expand Down Expand Up @@ -126,7 +123,6 @@ func TestEnvironmentVariableConfig(t *testing.T) {
ServiceNodePortRange: "1024-32767",
DNS: "10.43.0.10",
Domain: "cluster.local",
MTU: "1400",
},
},
err: nil,
Expand All @@ -143,7 +139,6 @@ func TestEnvironmentVariableConfig(t *testing.T) {
{"MICROSHIFT_CLUSTER_SERVICENODEPORTRANGE", "1024-32767"},
{"MICROSHIFT_CLUSTER_DNS", "10.43.0.10"},
{"MICROSHIFT_CLUSTER_DOMAIN", "cluster.local"},
{"MICROSHIFT_CLUSTER_MTU", "1400"},
},
},
{
Expand All @@ -158,7 +153,6 @@ func TestEnvironmentVariableConfig(t *testing.T) {
ServiceNodePortRange: "1024-32767",
DNS: "10.43.0.10",
Domain: "cluster.local",
MTU: "1300",
},
},
err: nil,
Expand All @@ -174,7 +168,6 @@ func TestEnvironmentVariableConfig(t *testing.T) {
{"MICROSHIFT_CLUSTER_SERVICECIDR", "40.30.20.10/16"},
{"MICROSHIFT_CLUSTER_SERVICENODEPORTRANGE", "1024-32767"},
{"MICROSHIFT_CLUSTER_DNS", "10.43.0.10"},
{"MICROSHIFT_CLUSTER_MTU", "1300"},
},
},
}
Expand Down
70 changes: 70 additions & 0 deletions pkg/config/ovn/ovn.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
package ovn

import (
"errors"
"fmt"
"net"
"os"

"gopkg.in/yaml.v2"
"k8s.io/klog/v2"
)

const (
ConfigFileName = "ovn.yaml"
)

type OVNKubernetesConfig struct {
// disable microshift-ovs-init.service.
// OVS bridge "br-ex" needs to be configured manually when disableOVSInit is true.
DisableOVSInit bool `json:"disableOVSInit,omitempty"`
// MTU to use for the geneve tunnel interface.
// This must be 100 bytes smaller than the uplink mtu.
// Default is 1400.
MTU uint32 `json:"mtu,omitempty"`
}

func (o *OVNKubernetesConfig) ValidateOVSBridge(bridge string) error {
_, err := net.InterfaceByName(bridge)
if err != nil {
return err
}
return nil
}

func (o *OVNKubernetesConfig) withDefaults() *OVNKubernetesConfig {
o.DisableOVSInit = false
o.MTU = 1400
return o
}

func newOVNKubernetesConfigFromFile(path string) (*OVNKubernetesConfig, error) {
o := new(OVNKubernetesConfig)
buf, err := os.ReadFile(path)
if err != nil {
return nil, err
}

err = yaml.Unmarshal(buf, &o)
if err != nil {
return nil, fmt.Errorf("parsing OVNKubernetes config: %v", err)
}
return o, nil
}

func NewOVNKubernetesConfigFromFileOrDefault(path string) (*OVNKubernetesConfig, error) {
if _, err := os.Stat(path); err != nil {
if errors.Is(err, os.ErrNotExist) {
klog.Info("OVNKubernetes config file not found, assuming default values")
return new(OVNKubernetesConfig).withDefaults(), nil
}
return nil, fmt.Errorf("failed to get OVNKubernetes config file: %v", err)
}

o, err := newOVNKubernetesConfigFromFile(path)
if err == nil {
klog.Info("got OVNKubernetes config from file %q", path)
return o, nil
}
return nil, fmt.Errorf("getting OVNKubernetes config: %v", err)
}
43 changes: 43 additions & 0 deletions pkg/config/ovn/ovn_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package ovn

import (
"fmt"
"testing"
)

func TestValidateOVSBridge(t *testing.T) {

var ttests = []struct {
name string
err error
}{
{"lo", nil},
{"unexist-bridge-interface-name", fmt.Errorf("failed to validate bridge interface name")},
}

o := new(OVNKubernetesConfig)
for _, tt := range ttests {
err := o.ValidateOVSBridge(tt.name)
if (err != nil) != (tt.err != nil) {
t.Errorf("ValidateOVSBridge() error = %v, wantErr %v", err, tt.err)
}
}
}

// tests to make sure that the config file is parsed correctly
func TestNewOVNKubernetesConfigFromFileOrDefault(t *testing.T) {
var ttests = []struct {
configFile string
err error
}{
{"./test/ovn.yaml", nil},
{"./test/non-exist.yaml", nil},
}

for _, tt := range ttests {
_, err := NewOVNKubernetesConfigFromFileOrDefault(tt.configFile)
if (err != nil) != (tt.err != nil) {
t.Errorf("NewOVNKubernetesConfigFromFileOrDefault() error = %v, wantErr %v", err, tt.err)
}
}
}
2 changes: 2 additions & 0 deletions pkg/config/ovn/test/ovn.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
disableOVSInit: true
mtu: 1300
1 change: 0 additions & 1 deletion test/config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,3 @@ cluster:
dns: 'cluster.dns'
domain: cluster.local
serviceNodePortRange: 30000-32767
mtu: "1400"