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
1 change: 1 addition & 0 deletions contrib/kind.sh
Original file line number Diff line number Diff line change
Expand Up @@ -478,6 +478,7 @@ create_ovn_kube_manifests() {
--ovn-loglevel-controller="${OVN_LOG_LEVEL_CONTROLLER}" \
--ovn-loglevel-nbctld="${OVN_LOG_LEVEL_NBCTLD}" \
--egress-ip-enable=true \
--egress-firewall-enable=true \
--v4-join-subnet="${JOIN_SUBNET_IPV4}" \
--v6-join-subnet="${JOIN_SUBNET_IPV6}"
popd
Expand Down
7 changes: 7 additions & 0 deletions dist/images/daemonset.sh
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ OVN_DISABLE_SNAT_MULTIPLE_GWS=""
OVN_EMPTY_LB_EVENTS=""
OVN_MULTICAST_ENABLE=""
OVN_EGRESSIP_ENABLE=
OVN_EGRESSFIREWALL_ENABLE=
OVN_V4_JOIN_SUBNET=""
OVN_V6_JOIN_SUBNET=""
OVN_NETFLOW_TARGETS=""
Expand Down Expand Up @@ -157,6 +158,9 @@ while [ "$1" != "" ]; do
--egress-ip-enable)
OVN_EGRESSIP_ENABLE=$VALUE
;;
--egress-firewall-enable)
OVN_EGRESSFIREWALL_ENABLE=$VALUE
;;
--v4-join-subnet)
OVN_V4_JOIN_SUBNET=$VALUE
;;
Expand Down Expand Up @@ -230,6 +234,8 @@ ovn_hybrid_overlay_enable=${OVN_HYBRID_OVERLAY_ENABLE}
echo "ovn_hybrid_overlay_enable: ${ovn_hybrid_overlay_enable}"
ovn_egress_ip_enable=${OVN_EGRESSIP_ENABLE}
echo "ovn_egress_ip_enable: ${ovn_egress_ip_enable}"
ovn_egress_firewall_enable=${OVN_EGRESSFIREWALL_ENABLE}
echo "ovn_egress_firewall_enable: ${ovn_egress_firewall_enable}"
ovn_hybrid_overlay_net_cidr=${OVN_HYBRID_OVERLAY_NET_CIDR}
echo "ovn_hybrid_overlay_net_cidr: ${ovn_hybrid_overlay_net_cidr}"
ovn_disable_snat_multiple_gws=${OVN_DISABLE_SNAT_MULTIPLE_GWS}
Expand Down Expand Up @@ -338,6 +344,7 @@ ovn_image=${image} \
ovn_v6_join_subnet=${ovn_v6_join_subnet} \
ovn_multicast_enable=${ovn_multicast_enable} \
ovn_egress_ip_enable=${ovn_egress_ip_enable} \
ovn_egress_firewall_enable=${ovn_egress_firewall_enable} \
ovn_ssl_en=${ovn_ssl_en} \
ovn_master_count=${ovn_master_count} \
ovn_gateway_mode=${ovn_gateway_mode} \
Expand Down
9 changes: 9 additions & 0 deletions dist/images/ovnkube.sh
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@ fi
# OVN_SSL_ENABLE - use SSL transport to NB/SB db and northd (default: no)
# OVN_REMOTE_PROBE_INTERVAL - ovn remote probe interval in ms (default 100000)
# OVN_EGRESSIP_ENABLE - enable egress IP for ovn-kubernetes
# OVN_EGRESSFIREWALL_ENABLE - enable egressFirewall for ovn-kubernetes
# OVN_UNPRIVILEGED_MODE - execute CNI ovs/netns commands from host (default no)
# OVNKUBE_NODE_MODE - ovnkube node mode of operation, one of: full, smart-nic, smart-nic-host (default: full)
# OVN_ENCAP_IP - encap IP to be used for OVN traffic on the node. mandatory in case ovnkube-node-mode=="smart-nic"
Expand Down Expand Up @@ -194,6 +195,8 @@ ovn_remote_probe_interval=${OVN_REMOTE_PROBE_INTERVAL:-100000}
ovn_multicast_enable=${OVN_MULTICAST_ENABLE:-}
#OVN_EGRESSIP_ENABLE - enable egress IP for ovn-kubernetes
ovn_egressip_enable=${OVN_EGRESSIP_ENABLE:-false}
#OVN_EGRESSFIREWALL_ENABLE - enable egressFirewall for ovn-kubernetes
ovn_egressfirewall_enable=${OVN_EGRESSFIREWALL_ENABLE:-false}
ovn_acl_logging_rate_limit=${OVN_ACL_LOGGING_RATE_LIMIT:-"20"}
ovn_netflow_targets=${OVN_NETFLOW_TARGETS:-}
ovn_sflow_targets=${OVN_SFLOW_TARGETS:-}
Expand Down Expand Up @@ -893,6 +896,11 @@ ovn-master() {
if [[ ${ovn_egressip_enable} == "true" ]]; then
egressip_enabled_flag="--enable-egress-ip"
fi
egressfirewall_enabled_flag=
if [[ ${ovn_egressfirewall_enable} == "true" ]]; then
egressfirewall_enabled_flag="--enable-egress-firewall"
fi
echo "egressfirewall_enabled_flag=${egressfirewall_enabled_flag}"

ovnkube_master_metrics_bind_address="${metrics_endpoint_ip}:9409"

Expand All @@ -918,6 +926,7 @@ ovn-master() {
${multicast_enabled_flag} \
${ovn_acl_logging_rate_limit_flag} \
${egressip_enabled_flag} \
${egressfirewall_enabled_flag} \
--metrics-bind-address ${ovnkube_master_metrics_bind_address} \
--host-network-namespace ${ovn_host_network_namespace} &

Expand Down
2 changes: 2 additions & 0 deletions dist/templates/ovnkube-master.yaml.j2
Original file line number Diff line number Diff line change
Expand Up @@ -240,6 +240,8 @@ spec:
value: "{{ ovn_hybrid_overlay_enable }}"
- name: OVN_EGRESSIP_ENABLE
value: "{{ ovn_egress_ip_enable }}"
- name: OVN_EGRESSFIREWALL_ENABLE
value: "{{ ovn_egress_firewall_enable }}"
- name: OVN_HYBRID_OVERLAY_NET_CIDR
value: "{{ ovn_hybrid_overlay_net_cidr }}"
- name: OVN_DISABLE_SNAT_MULTIPLE_GWS
Expand Down
9 changes: 8 additions & 1 deletion go-controller/pkg/config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -249,7 +249,8 @@ type KubernetesConfig struct {

// OVNKubernetesFeatureConfig holds OVN-Kubernetes feature enhancement config file parameters and command-line overrides
type OVNKubernetesFeatureConfig struct {
EnableEgressIP bool `gcfg:"enable-egress-ip"`
EnableEgressIP bool `gcfg:"enable-egress-ip"`
EnableEgressFirewall bool `gcfg:"enable-egress-firewall"`
}

// GatewayMode holds the node gateway mode
Expand Down Expand Up @@ -693,6 +694,12 @@ var OVNK8sFeatureFlags = []cli.Flag{
Destination: &cliConfig.OVNKubernetesFeature.EnableEgressIP,
Value: OVNKubernetesFeature.EnableEgressIP,
},
&cli.BoolFlag{
Name: "enable-egress-firewall",
Usage: "Configure to use EgressFirewall CRD feature with ovn-kubernetes.",
Destination: &cliConfig.OVNKubernetesFeature.EnableEgressFirewall,
Value: OVNKubernetesFeature.EnableEgressFirewall,
},
}

// K8sFlags capture Kubernetes-related options
Expand Down
44 changes: 10 additions & 34 deletions go-controller/pkg/factory/factory.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,6 @@ import (
egressipapi "github.com/ovn-org/ovn-kubernetes/go-controller/pkg/crd/egressip/v1"
egressipscheme "github.com/ovn-org/ovn-kubernetes/go-controller/pkg/crd/egressip/v1/apis/clientset/versioned/scheme"
egressipinformerfactory "github.com/ovn-org/ovn-kubernetes/go-controller/pkg/crd/egressip/v1/apis/informers/externalversions"
apiextensionsapi "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1"
apiextensionsscheme "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset/scheme"
apiextensionsinformerfactory "k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions"

kapi "k8s.io/api/core/v1"
v1 "k8s.io/api/core/v1"
Expand All @@ -46,7 +43,6 @@ type WatchFactory struct {
eipFactory egressipinformerfactory.SharedInformerFactory
efFactory egressfirewallinformerfactory.SharedInformerFactory
efClientset egressfirewallclientset.Interface
crdFactory apiextensionsinformerfactory.SharedInformerFactory
informers map[reflect.Type]*informer

stopChan chan struct{}
Expand Down Expand Up @@ -77,7 +73,6 @@ var (
namespaceType reflect.Type = reflect.TypeOf(&kapi.Namespace{})
nodeType reflect.Type = reflect.TypeOf(&kapi.Node{})
egressFirewallType reflect.Type = reflect.TypeOf(&egressfirewallapi.EgressFirewall{})
crdType reflect.Type = reflect.TypeOf(&apiextensionsapi.CustomResourceDefinition{})
egressIPType reflect.Type = reflect.TypeOf(&egressipapi.EgressIP{})
)

Expand All @@ -93,17 +88,16 @@ func NewMasterWatchFactory(ovnClientset *util.OVNClientset) (*WatchFactory, erro
iFactory: informerfactory.NewSharedInformerFactory(ovnClientset.KubeClient, resyncInterval),
eipFactory: egressipinformerfactory.NewSharedInformerFactory(ovnClientset.EgressIPClient, resyncInterval),
efClientset: ovnClientset.EgressFirewallClient,
crdFactory: apiextensionsinformerfactory.NewSharedInformerFactory(ovnClientset.APIExtensionsClient, resyncInterval),
informers: make(map[reflect.Type]*informer),
stopChan: make(chan struct{}),
}
var err error

err = apiextensionsapi.AddToScheme(apiextensionsscheme.Scheme)
err = egressipapi.AddToScheme(egressipscheme.Scheme)
if err != nil {
return nil, err
}
err = egressipapi.AddToScheme(egressipscheme.Scheme)
err = egressfirewallapi.AddToScheme(egressfirewallscheme.Scheme)
if err != nil {
return nil, err
}
Expand Down Expand Up @@ -149,21 +143,11 @@ func NewMasterWatchFactory(ovnClientset *util.OVNClientset) (*WatchFactory, erro
if err != nil {
return nil, err
}
wf.informers[crdType], err = newInformer(crdType, wf.crdFactory.Apiextensions().V1beta1().CustomResourceDefinitions().Informer())
if err != nil {
return nil, err
}
wf.informers[nodeType], err = newQueuedInformer(nodeType, wf.iFactory.Core().V1().Nodes().Informer(), wf.stopChan)
if err != nil {
return nil, err
}

wf.crdFactory.Start(wf.stopChan)
for oType, synced := range wf.crdFactory.WaitForCacheSync(wf.stopChan) {
if !synced {
return nil, fmt.Errorf("error in syncing cache for %v informer", oType)
}
}
wf.iFactory.Start(wf.stopChan)
for oType, synced := range wf.iFactory.WaitForCacheSync(wf.stopChan) {
if !synced {
Expand All @@ -182,6 +166,13 @@ func NewMasterWatchFactory(ovnClientset *util.OVNClientset) (*WatchFactory, erro
}
}
}
if config.OVNKubernetesFeature.EnableEgressFirewall {
err = wf.InitializeEgressFirewallWatchFactory()
if err != nil {
return nil, err
}

}
return wf, nil
}

Expand All @@ -190,9 +181,7 @@ func NewMasterWatchFactory(ovnClientset *util.OVNClientset) (*WatchFactory, erro
func NewNodeWatchFactory(ovnClientset *util.OVNClientset, nodeName string) (*WatchFactory, error) {
wf := &WatchFactory{
iFactory: informerfactory.NewSharedInformerFactory(ovnClientset.KubeClient, resyncInterval),
eipFactory: egressipinformerfactory.NewSharedInformerFactory(ovnClientset.EgressIPClient, resyncInterval),
efClientset: ovnClientset.EgressFirewallClient,
crdFactory: apiextensionsinformerfactory.NewSharedInformerFactory(ovnClientset.APIExtensionsClient, resyncInterval),
informers: make(map[reflect.Type]*informer),
stopChan: make(chan struct{}),
}
Expand Down Expand Up @@ -260,10 +249,7 @@ func NewNodeWatchFactory(ovnClientset *util.OVNClientset, nodeName string) (*Wat
}

func (wf *WatchFactory) InitializeEgressFirewallWatchFactory() error {
err := egressfirewallapi.AddToScheme(egressfirewallscheme.Scheme)
if err != nil {
return err
}
var err error
wf.efFactory = egressfirewallinformerfactory.NewSharedInformerFactory(wf.efClientset, resyncInterval)
wf.informers[egressFirewallType], err = newInformer(egressFirewallType, wf.efFactory.K8s().V1().EgressFirewalls().Informer())
if err != nil {
Expand Down Expand Up @@ -446,16 +432,6 @@ func (wf *WatchFactory) RemoveEgressFirewallHandler(handler *Handler) {
wf.removeHandler(egressFirewallType, handler)
}

// AddCRDHandler adds a handler function that will be executed on CRD obje changes
func (wf *WatchFactory) AddCRDHandler(handlerFuncs cache.ResourceEventHandler, processExisting func([]interface{})) *Handler {
return wf.addHandler(crdType, "", nil, handlerFuncs, processExisting)
}

// RemoveCRDHandler removes a CRD object event handler function
func (wf *WatchFactory) RemoveCRDHandler(handler *Handler) {
wf.removeHandler(crdType, handler)
}

// AddEgressIPHandler adds a handler function that will be executed on EgressIP object changes
func (wf *WatchFactory) AddEgressIPHandler(handlerFuncs cache.ResourceEventHandler, processExisting func([]interface{})) *Handler {
return wf.addHandler(egressIPType, "", nil, handlerFuncs, processExisting)
Expand Down
Loading