Documentation ¶
Index ¶
- Constants
- Variables
- func AS3NameFormatter(name string) string
- func DeepEqualJSON(decl1, decl2 as3Declaration) bool
- func JoinBigipPath(partition, objName string) string
- func ParseRewriteAction(targetUrlPath, valueUrlPath string) string
- func ParseWhitelistSourceRangeAnnotations(annotation string) []string
- type AS3PostManager
- type AlternateBackend
- type AnalyticsProfiles
- type AnnotationsUsed
- type BIGIPConfigs
- type BigIPSSLProfiles
- type BigIpConfigMap
- type BigIpResourceConfig
- type CMConfig
- type CRInformer
- type CacheIPAM
- type ClientSets
- type CommonInformer
- type Controller
- func (ctlr *Controller) CISHealthCheckHandler() http.Handler
- func (ctlr *Controller) GetHostFromHostPath(hostPath string) string
- func (ctlr *Controller) GetNodePodCIDRMap() map[string]string
- func (ctlr *Controller) GetPodsForService(namespace, serviceName string, nplAnnotationRequired bool) []*v1.Pod
- func (ctlr *Controller) GetPoolBackends(pool *cisapiv1.VSPool) []SvcBackendCxt
- func (ctlr *Controller) GetRouteBackends(route *routeapi.Route, clusterSvcs []cisapiv1.MultiClusterServiceReference) []RouteBackendCxt
- func (ctlr *Controller) GetService(namespace, serviceName string) *v1.Service
- func (ctlr *Controller) GetServiceRouteWithoutHealthAnnotation(svcKey MultiClusterServiceKey) *routeapi.Route
- func (ctlr *Controller) GetServicesForPod(pod *v1.Pod, clusterName string) *v1.Service
- func (ctlr *Controller) HandlePathBasedABIRule(rsCfg *ResourceConfig, vsHost string, tlsTerminationType string)
- func (ctlr *Controller) NewRequestHandler(userAgent string, httpClientMetrics bool)
- func (ctlr *Controller) ProcessAssociatedExternalDNS(hostnames []string)
- func (ctlr *Controller) ProcessNodeUpdate(obj interface{}, clusterName string)
- func (ctlr *Controller) ProcessRouteEDNS(hosts []string)
- func (ctlr *Controller) SetupNodeProcessing(clusterName string) error
- func (ctlr *Controller) Start()
- func (ctlr *Controller) Stop()
- func (ctlr *Controller) UpdatePoolHealthMonitors(svcKey MultiClusterServiceKey)
- func (ctlr *Controller) UpdatePoolMembersForNodeUpdate(clusterName string)
- type CustomProfile
- type CustomProfileStore
- type DataGroupNamespaceMap
- type GSLBPool
- type GTMConfig
- type GTMPartitionConfig
- type IRule
- type IRulesMap
- type InternalDataGroup
- type InternalDataGroupMap
- type InternalDataGroupRecord
- type InternalDataGroupRecords
- type L3PostManager
- type LTMConfig
- type ManagedResources
- type Monitor
- type MonitorName
- type Monitors
- type MultiClusterPoolInformer
- type MultiClusterResourceStore
- type MultiClusterServiceConfig
- type MultiClusterServiceKey
- type MultiPoolPersistence
- type NPLAnnoations
- type NPLAnnotation
- type NPLStore
- type NRInformer
- type NSInformer
- type NameRef
- type Node
- type NodeInformer
- type NodeList
- type Params
- type PartitionConfig
- type Policies
- type Policy
- type Pool
- type PoolIdentifier
- type PoolMember
- type PoolMemberCache
- type Pools
- type PostManager
- type PostManagers
- type PostParams
- type PrimaryClusterHealthProbeParams
- type ProcessedHostPath
- type ProfileHTTP2
- type ProfileRef
- type ProfileRefs
- type ProfileTCP
- type RequestHandler
- type ResourceConfig
- type ResourceConfigRequest
- type ResourceConfigs
- type ResourceMap
- type ResourceSelectorConfig
- type ResourceStore
- type RouteBackendCxt
- type Rule
- type Rules
- type SecretKey
- type ServiceAddress
- type ServiceTypeLBHealthMonitor
- type Services
- type SourceAddrTranslation
- type SvcBackendCxt
- type TLSContext
- type TLSVersion
- type VSSpecProperties
- type Virtual
- type Virtuals
- type WideIP
- type WideIPs
Constants ¶
const ( // DefaultCustomResourceLabel is a label used for F5 Custom Resources. DefaultCustomResourceLabel = "f5cr in (true)" // VirtualServer is a F5 Custom Resource Kind. VirtualServer = "VirtualServer" // TLSProfile is a F5 Custom Resource Kind TLSProfile = "TLSProfile" // IngressLink is a Custom Resource used by both F5 and Nginx IngressLink = "IngressLink" // TransportServer is a F5 Custom Resource Kind TransportServer = "TransportServer" // ExternalDNS is a F5 Custom Resource Kind ExternalDNS = "ExternalDNS" // Policy is collection of BIG-IP profiles, LTM policies and iRules CustomPolicy = "CustomPolicy" // IPAM is a F5 Custom Resource Kind IPAM = "IPAM" // Service is a k8s native Service Resource. Service = "Service" //Pod is a k8s native object Pod = "Pod" //Secret is a k8s native object K8sSecret = "Secret" // Endpoints is a k8s native Endpoint Resource. Endpoints = "Endpoints" // Namespace is k8s namespace Namespace = "Namespace" // ConfigCR is k8s native ConfigCR resource ConfigCR = "ConfigCR" // Route is OpenShift Route Route = "Route" // Node update NodeUpdate = "Node" NodePort = "nodeport" Cluster = "cluster" Auto = "auto" StandAloneCIS = "standalone" SecondaryCIS = "secondary" PrimaryCIS = "primary" // Namespace is k8s namespace HACIS = "HACIS" // Primary cluster health probe DefaultProbeInterval = 60 DefaultRetryInterval = 15 PolicyControlForward = "forwarding" // Namespace for IPAM CRD IPAMNamespace = "kube-system" // TLS Terminations TLSEdge = "edge" AllowSourceRange = "allowSourceRange" DefaultPool = "defaultPool" TLSReencrypt = "reencrypt" TLSPassthrough = "passthrough" TLSRedirectInsecure = "redirect" TLSAllowInsecure = "allow" TLSNoInsecure = "none" LBServiceIPAMLabelAnnotation = "cis.f5.com/ipamLabel" LBServiceIPAnnotation = "cis.f5.com/ip" LBServiceHostAnnotation = "cis.f5.com/host" HealthMonitorAnnotation = "cis.f5.com/health" LBServicePolicyNameAnnotation = "cis.f5.com/policyName" //Antrea NodePortLocal support NPLPodAnnotation = "nodeportlocal.antrea.io" NPLSvcAnnotation = "nodeportlocal.antrea.io/enabled" NodePortLocal = "nodeportlocal" Create = "Create" Update = "Update" Delete = "Delete" // DefaultNativeResourceLabel is a label used for kubernetes/openshift Resources. DefaultNativeResourceLabel = "f5nr in (true)" Local = "local" F5RouterName = "F5 BIG-IP" HTTP = "http" HTTPS = "https" //OVN K8S CNI OVN_K8S = "ovn-k8s" OVNK8sNodeSubnetAnnotation = "k8s.ovn.org/node-subnets" OVNK8sNodeIPAnnotation = "k8s.ovn.org/node-primary-ifaddr" //k8s.ovn.org/host-addresses is changed to k8s.ovn.org/host-cidrs in openshift 4.14 OVNK8sNodeIPAnnotation2 = "k8s.ovn.org/host-addresses" OvnK8sNodeIPAnnotation3 = "k8s.ovn.org/host-cidrs" //Cilium CNI CILIUM = "cilium" CiliumK8sNodeSubnetAnnotation12 = "io.cilium.network.ipv4-pod-cidr" CiliumK8sNodeSubnetAnnotation13 = "network.cilium.io/ipv4-pod-cidr" //Calico CNI CALICO = "calico" CALICO_API_BLOCK_AFFINITIES = "/apis/crd.projectcalico.org/v1/blockaffinities" CALICONodeIPAnnotation = "projectcalico.org/IPv4Address" //CNI plugin FLANNEL = "flannel" ANTREA = "antrea" OPENSHIFTSDN = "OpenShiftSDN" F5VsWAFPolicy = "virtual-server.f5.com/waf" F5VsAllowSourceRangeAnnotation = "virtual-server.f5.com/allow-source-range" MultiClusterServicesAnnotation = "virtual-server.f5.com/multiClusterServices" F5VsBalanceAnnotation = "virtual-server.f5.com/balance" F5VsAppRootAnnotation = "virtual-server.f5.com/rewrite-app-root" F5VsURLRewriteAnnotation = "virtual-server.f5.com/rewrite-target-url" F5ServerSslProfileAnnotation = "virtual-server.f5.com/serverssl" F5ClientSslProfileAnnotation = "virtual-server.f5.com/clientssl" F5HealthMonitorAnnotation = "virtual-server.f5.com/health" PodConcurrentConnectionsAnnotation = "virtual-server.f5.com/pod-concurrent-connections" TLSVerion1_3 TLSVersion = "1.3" Active cisapiv1.HAModeType = "active-active" StandBy cisapiv1.HAModeType = "active-standby" Ratio cisapiv1.HAModeType = "ratio" None cisapiv1.AutoMonitorType = "none" ReadinessProbe cisapiv1.AutoMonitorType = "readiness-probe" ServiceEndpoint cisapiv1.AutoMonitorType = "service-endpoint" Ok = "Ok" UnknownResponse = "unknown response" )
const ( DEFAULT_HTTP_PORT int32 = 80 DEFAULT_HTTPS_PORT int32 = 443 DEFAULT_SNAT string = "auto" // Constants for CustomProfile.Type as defined in CCCL CustomProfileClient string = "clientside" CustomProfileServer string = "serverside" // Constants for CustomProfile.PeerCertMode PeerCertRequired = "require" // Constants HttpRedirectIRuleName = "http_redirect_irule" // Constants HttpRedirectNoHostIRuleName = "http_redirect_irule_nohost" // Internal data group for https redirect HttpsRedirectDgName = "https_redirect_dg" TLSIRuleName = "tls_irule" ABPathIRuleName = "ab_deployment_path_irule" )
const ( // reference for profiles stored in BIG-IP BIGIP = "bigip" // reference for profiles stores as secrets in k8s cluster Secret = "secret" // reference for routes Certificate = "certificate" // reference for service“ ServiceRef = "service" )
constants for TLS references
const ( PolicySSLOption = "policySSL" AnnotationSSLOption = "annotation" RouteCertificateSSLOption = "routeCertificate" DefaultSSLOption = "defaultSSL" InvalidSSLOption = "invalid" )
constants for SSL options
const ( NetworkConfigInvalid = "network config is invalid" NamespaceConfigInvalid = "namespace config is invalid" DeployConfigInvalid = "deploy config is invalid" )
Constants for Errors
const AbDeploymentDgName = "ab_deployment_dg"
Internal data group for ab deployment routes.
const AllowSourceRangeDgName = "allowSourceRange"
const BigIPLabel = ""
const CmDeclareApi = "/api/v1/spaces/default/appsvcs/declare"
const CmDeclareInfoApi = "/api/v1/spaces/default/appsvcs/info"
const CmDeclareTaskApi = "/api/v1/spaces/default/appsvcs/task/"
const DataGroupAllowSourceRangeType = "ip"
Allow Source Range
const DataGroupType = "string"
Internal DataGroup Default Type
const DefaultPoolsDgName = "default_pool_servername_dg"
Internal data group for default pool of a virtual server.
const EdgeHostsDgName = "ssl_edge_servername_dg"
Internal data group for edge termination.
const EdgeServerSslDgName = "ssl_edge_serverssl_dg"
Internal data group for edge termination that maps the host name to the false. This will help Irule to understand ssl should be disabled on serverside.
const PassthroughHostsDgName = "ssl_passthrough_servername_dg"
Internal data group for passthrough termination.
const ReencryptHostsDgName = "ssl_reencrypt_servername_dg"
Internal data group for reencrypt termination.
const ReencryptServerSslDgName = "ssl_reencrypt_serverssl_dg"
Internal data group for reencrypt termination that maps the host name to the server ssl profile.
Variables ¶
var DEFAULT_GTM_PARTITION string
var DEFAULT_PARTITION string
var K8SCoreServices = map[string]bool{ "kube-dns": true, "kube-scheduler": true, "kube-controller-manager": true, "kube-apiserver": true, "docker-registry": true, "kubernetes": true, "registry-console": true, "router": true, "kubelet": true, "console": true, "alertmanager-main": true, "alertmanager-operated": true, "cluster-monitoring-operator": true, "kube-state-metrics": true, "node-exporter": true, "kube-proxy": true, "flannel": true, "etcd": true, "antrea": true, }
var OSCPCoreServices = map[string]bool{ "openshift": true, "metrics": true, "api": true, "check-endpoints": true, "oauth-openshift": true, "cco-metrics": true, "machine-approver": true, "node-tuning-operator": true, "performance-addon-operator-service": true, "cluster-storage-operator-metrics": true, "csi-snapshot-controller-operator-metrics": true, "csi-snapshot-webhook": true, "cluster-version-operator": true, "downloads": true, "controller-manager": true, "dns-default": true, "image-registry-operator": true, "router-internal-default": true, "apiserver": true, "scheduler": true, "cluster-autoscaler-operator": true, "cluster-baremetal-operator-service": true, "cluster-baremetal-webhook-service": true, "machine-api-controllers": true, "machine-api-operator": true, "machine-api-operator-webhook": true, "machine-config-controller": true, "machine-config-daemon": true, "certified-operators": true, "community-operators": true, "marketplace-operator-metrics": true, "redhat-marketplace": true, "redhat-operators": true, "openshift-state-metrics": true, "telemeter-client": true, "thanos-querier": true, "multus-admission-controller": true, "network-metrics-service": true, "network-check-source": true, "network-check-target": true, "catalog-operator-metrics": true, "olm-operator-metrics": true, "packageserver-service": true, "sdn": true, "sdn-controller": true, }
Functions ¶
func AS3NameFormatter ¶
AS3NameFormatter formarts resources names according to AS3 convention TODO: Should we use this? Or this will be done in agent?
func DeepEqualJSON ¶
func DeepEqualJSON(decl1, decl2 as3Declaration) bool
func JoinBigipPath ¶
func ParseRewriteAction ¶
Types ¶
type AS3PostManager ¶
type AlternateBackend ¶
type AlternateBackend struct { Service string `json:"service"` ServiceNamespace string `json:"serviceNamespace,omitempty"` Weight int32 `json:"weight,omitempty"` }
AlternateBackends lists backend svc of A/B
type AnalyticsProfiles ¶
type AnalyticsProfiles struct {
HTTPAnalyticsProfile string `json:"http,omitempty"`
}
type AnnotationsUsed ¶
type BIGIPConfigs ¶
type BIGIPConfigs []cisapiv1.BigIpConfig
BigIP struct to hold the bigip address and label for HA pairs
func (BIGIPConfigs) Less ¶
func (configs BIGIPConfigs) Less(i, j int) bool
func (BIGIPConfigs) Swap ¶
func (configs BIGIPConfigs) Swap(i, j int)
type BigIPSSLProfiles ¶
type BigIPSSLProfiles struct {
// contains filtered or unexported fields
}
type BigIpConfigMap ¶
type BigIpConfigMap map[cisapiv1.BigIpConfig]BigIpResourceConfig
BigIpConfigMap Where key is the BigIP structure and value is the bigip-next configuration
type BigIpResourceConfig ¶
type BigIpResourceConfig struct {
// contains filtered or unexported fields
}
BigIpResourceConfig struct to hold the bigip-next ltm and gtm configuration
type CRInformer ¶
type CRInformer struct {
// contains filtered or unexported fields
}
CRInformer defines the structure of Custom Resource Informer
type ClientSets ¶
type ClientSets struct { KubeCRClient versioned.Interface KubeClient kubernetes.Interface RouteClientV1 routeclient.RouteV1Interface }
type CommonInformer ¶
type CommonInformer struct {
// contains filtered or unexported fields
}
type Controller ¶
type Controller struct { PostParams PostParams RequestHandler *RequestHandler PoolMemberType string UseNodeInternal bool TeemData *teem.TeemsData StaticRoutingMode bool OrchestrationCNI string StaticRouteNodeCIDR string CMTokenManager *tokenmanager.TokenManager ControllerIdentifier string // contains filtered or unexported fields }
Controller defines the structure of K-Native and Custom Resource Controller
func NewController ¶
func NewController(params Params, statusManager *statusmanager.StatusManager) *Controller
NewController creates a new Controller Instance.
func RunController ¶
func RunController(params Params) *Controller
RunController creates a new controller and starts it.
func (*Controller) CISHealthCheckHandler ¶
func (ctlr *Controller) CISHealthCheckHandler() http.Handler
func (*Controller) GetHostFromHostPath ¶
func (ctlr *Controller) GetHostFromHostPath(hostPath string) string
func (*Controller) GetNodePodCIDRMap ¶
func (ctlr *Controller) GetNodePodCIDRMap() map[string]string
func (*Controller) GetPodsForService ¶
func (ctlr *Controller) GetPodsForService(namespace, serviceName string, nplAnnotationRequired bool) []*v1.Pod
GetPodsForService returns podList with labels set to svc selector
func (*Controller) GetPoolBackends ¶
func (ctlr *Controller) GetPoolBackends(pool *cisapiv1.VSPool) []SvcBackendCxt
return the services associated with a virtualserver pool (svc names + weight)
func (*Controller) GetRouteBackends ¶
func (ctlr *Controller) GetRouteBackends(route *routeapi.Route, clusterSvcs []cisapiv1.MultiClusterServiceReference) []RouteBackendCxt
GetRouteBackends returns the services associated with a route (names + weight)
func (*Controller) GetService ¶
func (ctlr *Controller) GetService(namespace, serviceName string) *v1.Service
returns service obj with servicename
func (*Controller) GetServiceRouteWithoutHealthAnnotation ¶
func (ctlr *Controller) GetServiceRouteWithoutHealthAnnotation(svcKey MultiClusterServiceKey) *routeapi.Route
func (*Controller) GetServicesForPod ¶
func (*Controller) HandlePathBasedABIRule ¶
func (ctlr *Controller) HandlePathBasedABIRule( rsCfg *ResourceConfig, vsHost string, tlsTerminationType string, )
func (*Controller) NewRequestHandler ¶
func (ctlr *Controller) NewRequestHandler(userAgent string, httpClientMetrics bool)
func (*Controller) ProcessAssociatedExternalDNS ¶
func (ctlr *Controller) ProcessAssociatedExternalDNS(hostnames []string)
func (*Controller) ProcessNodeUpdate ¶
func (ctlr *Controller) ProcessNodeUpdate(obj interface{}, clusterName string)
ProcessNodeUpdate Check for a change in Node state
func (*Controller) ProcessRouteEDNS ¶
func (ctlr *Controller) ProcessRouteEDNS(hosts []string)
func (*Controller) SetupNodeProcessing ¶
func (ctlr *Controller) SetupNodeProcessing(clusterName string) error
func (*Controller) UpdatePoolHealthMonitors ¶
func (ctlr *Controller) UpdatePoolHealthMonitors(svcKey MultiClusterServiceKey)
UpdatePoolHealthMonitors we need to call this method on update of pod/ pool members update
func (*Controller) UpdatePoolMembersForNodeUpdate ¶
func (ctlr *Controller) UpdatePoolMembersForNodeUpdate(clusterName string)
type CustomProfile ¶
type CustomProfile struct { Name string `json:"name"` Partition string `json:"-"` Context string `json:"context"` // 'clientside', 'serverside', or 'all' Ciphers string `json:"ciphers,omitempty"` CipherGroup string `json:"cipherGroup,omitempty"` TLS1_3Enabled bool `json:"tls1_3Enabled"` ServerName string `json:"serverName,omitempty"` SNIDefault bool `json:"sniDefault,omitempty"` PeerCertMode string `json:"peerCertMode,omitempty"` CAFile string `json:"caFile,omitempty"` ChainCA string `json:"chainCA,omitempty"` Certificates []certificate }
SSL Profile loaded from Secret or Route object
func NewCustomProfile ¶
func NewCustomProfile( profile ProfileRef, certificates []certificate, serverName string, sni bool, peerCertMode, caFile string, chainCA string, tlsCipher cisapiv1.TLSCipher, ) CustomProfile
type CustomProfileStore ¶
type CustomProfileStore struct { sync.Mutex Profs map[SecretKey]CustomProfile }
Store of CustomProfiles
type DataGroupNamespaceMap ¶
type DataGroupNamespaceMap map[string]*InternalDataGroup
type GSLBPool ¶
type GSLBPool struct { Name string `json:"name"` RecordType string `json:"recordType"` LBMethod string `json:"LoadBalancingMode"` LBModeFallBack string `json:"fallbackMode"` PriorityOrder int `json:"order"` Ratio int `json:"ratio"` Members []string `json:"members"` Monitors []Monitor `json:"monitors,omitempty"` DataServer string }
type GTMPartitionConfig ¶
type IRule ¶
type IRule struct { Name string `json:"name"` Partition string `json:"-"` Code string `json:"apiAnonymous"` }
iRules
type InternalDataGroup ¶
type InternalDataGroup struct { Name string `json:"name"` Partition string `json:"-"` Type string `json:"-"` Records InternalDataGroupRecords `json:"records"` }
func (*InternalDataGroup) AddOrUpdateRecord ¶
func (idg *InternalDataGroup) AddOrUpdateRecord(name, data string) bool
func (*InternalDataGroup) RemoveRecord ¶
func (idg *InternalDataGroup) RemoveRecord(name string) bool
type InternalDataGroupMap ¶
type InternalDataGroupMap map[NameRef]DataGroupNamespaceMap
type InternalDataGroupRecord ¶
type InternalDataGroupRecords ¶
type InternalDataGroupRecords []InternalDataGroupRecord
func (InternalDataGroupRecords) Len ¶
func (slice InternalDataGroupRecords) Len() int
func (InternalDataGroupRecords) Less ¶
func (slice InternalDataGroupRecords) Less(i, j int) bool
func (InternalDataGroupRecords) Swap ¶
func (slice InternalDataGroupRecords) Swap(i, j int)
type L3PostManager ¶
type L3PostManager struct { }
type LTMConfig ¶
type LTMConfig map[string]*PartitionConfig
LTMConfig contain partition based ResourceMap
func (LTMConfig) GetAllPoolMembers ¶
func (lc LTMConfig) GetAllPoolMembers() []PoolMember
type ManagedResources ¶
type Monitor ¶
type Monitor struct { Name string `json:"name"` Partition string `json:"-"` Interval int `json:"interval,omitempty"` Type string `json:"type,omitempty"` Send string `json:"send,omitempty"` Recv string `json:"recv"` Timeout int `json:"timeout,omitempty"` TargetPort int32 `json:"targetPort,omitempty"` Path string `json:"path,omitempty"` TimeUntilUp *int `json:"timeUntilUp,omitempty"` }
Monitor is Pool health monitor
type MonitorName ¶
type MultiClusterPoolInformer ¶
type MultiClusterPoolInformer struct {
// contains filtered or unexported fields
}
type MultiClusterServiceConfig ¶
type MultiClusterServiceConfig struct {
// contains filtered or unexported fields
}
type MultiClusterServiceKey ¶
type MultiClusterServiceKey struct {
// contains filtered or unexported fields
}
type MultiPoolPersistence ¶
type NPLAnnotation ¶
type NPLAnnotation struct { PodPort int32 `json:"podPort"` NodeIP string `json:"nodeIP"` NodePort int32 `json:"nodePort"` }
NPL information from pod annotation
type NPLStore ¶
type NPLStore map[string]NPLAnnoations
key is namespace/pod. stores list of npl annotation on pod
type NRInformer ¶
type NRInformer struct {
// contains filtered or unexported fields
}
NRInformer is informer context for Native Resources of Kubernetes/Openshift
type NSInformer ¶
type NSInformer struct {
// contains filtered or unexported fields
}
type NodeInformer ¶
type NodeInformer struct {
// contains filtered or unexported fields
}
type Params ¶
type Params struct { Config *rest.Config ClientSets *ClientSets Namespaces []string UserAgent string UseNodeInternal bool NodePollInterval int IPAM bool DefaultRouteDomain int CISConfigCRKey string MultiClusterMode string CMConfigDetails *CMConfig CMTrustedCerts string CMSSLInsecure bool HttpAddress string ManageCustomResources bool // contains filtered or unexported fields }
Params defines parameters
type PartitionConfig ¶
type PartitionConfig struct { ResourceMap ResourceMap Priority *int PriorityMutex sync.RWMutex }
PartitionConfig contains ResourceMap and priority of partition
type Policy ¶
type Policy struct { Name string `json:"name"` Partition string `json:"-"` SubPath string `json:"subPath,omitempty"` Controls []string `json:"controls,omitempty"` Description string `json:"description,omitempty"` Legacy bool `json:"legacy,omitempty"` Requires []string `json:"requires,omitempty"` Rules Rules `json:"rules,omitempty"` Strategy string `json:"strategy,omitempty"` }
Policy Virtual policy
type Pool ¶
type Pool struct { Name string `json:"name"` Partition string `json:"-"` ServiceName string `json:"-"` ServiceNamespace string `json:"-"` ServicePort intstr.IntOrString `json:"-"` Balance string `json:"loadBalancingMethod,omitempty"` Members []PoolMember `json:"members"` NodeMemberLabel string `json:"-"` MonitorNames []MonitorName `json:"monitors,omitempty"` MinimumMonitors intstr.IntOrString `json:"minimumMonitors,omitempty"` ReselectTries int32 `json:"reselectTries,omitempty"` ServiceDownAction string `json:"serviceDownAction,omitempty"` SlowRampTime int32 `json:"slowRampTime,omitempty"` Weight int32 `json:"weight,omitempty"` AlternateBackends []AlternateBackend `json:"alternateBackends"` MultiClusterServices []cisapiv1.MultiClusterServiceReference `json:"_"` Cluster string `json:"-"` ConnectionLimit int32 `json:"-"` }
Pool config
type PoolIdentifier ¶
type PoolIdentifier struct {
// contains filtered or unexported fields
}
type PoolMember ¶
type PoolMember struct { Address string `json:"address"` Port int32 `json:"port"` MemberType string `json:"memberType"` SvcPort int32 `json:"svcPort,omitempty"` Session string `json:"session,omitempty"` AdminState string `json:"adminState,omitempty"` ConnectionLimit int32 `json:"connectionLimit,omitempty"` }
type PoolMemberCache ¶
type PoolMemberCache map[MultiClusterServiceKey]*poolMembersInfo
PoolMemberCache key is namespace/service
type PostManager ¶
type PostManager struct { AS3PostManager *AS3PostManager L3PostManager *L3PostManager PostParams // contains filtered or unexported fields }
func NewPostManager ¶
func NewPostManager(params PostParams, partition string) *PostManager
func (*PostManager) GetAS3DeclarationFromBigIP ¶
func (postMgr *PostManager) GetAS3DeclarationFromBigIP() (map[string]interface{}, error)
func (*PostManager) GetBigipAS3Version ¶
func (postMgr *PostManager) GetBigipAS3Version() (string, string, string, error)
func (*PostManager) GetBigipRegKey ¶
func (postMgr *PostManager) GetBigipRegKey() (string, error)
GetBigipRegKey ...
type PostManagers ¶
type PostManagers struct { sync.RWMutex PostManagerMap map[cisapiv1.BigIpConfig]*PostManager }
type PostParams ¶
type ProcessedHostPath ¶
Store of CustomProfiles
type ProfileHTTP2 ¶
type ProfileRef ¶
type ProfileRef struct { Name string `json:"name"` Partition string `json:"partition"` Context string `json:"context"` // 'clientside', 'serverside', or 'all' // Used as reference to which Namespace/Ingress this profile came from // (for deletion purposes) Namespace string `json:"-"` BigIPProfile bool `json:"-"` }
ProfileRef is a Reference to pre-existing profiles
func ConvertStringToProfileRef ¶
func ConvertStringToProfileRef(profileName, context, ns string) ProfileRef
ConvertStringToProfileRef converts strings to profile references
type ProfileRefs ¶
type ProfileRefs []ProfileRef
ProfileRefs is a list of ProfileRef
func (ProfileRefs) Len ¶
func (slice ProfileRefs) Len() int
func (ProfileRefs) Less ¶
func (slice ProfileRefs) Less(i, j int) bool
func (ProfileRefs) Swap ¶
func (slice ProfileRefs) Swap(i, j int)
type ProfileTCP ¶
type RequestHandler ¶
type RequestHandler struct { PostManagers PostManagers PostParams PostParams CMTokenManager *tokenmanager.TokenManager HAMode bool PrimaryClusterHealthProbeParams PrimaryClusterHealthProbeParams // contains filtered or unexported fields }
func (*RequestHandler) EnqueueRequestConfig ¶
func (req *RequestHandler) EnqueueRequestConfig(rsConfig ResourceConfigRequest)
type ResourceConfig ¶
type ResourceConfig struct { MetaData metaData `json:"-"` Virtual Virtual `json:"virtual,omitempty"` Pools Pools `json:"pools,omitempty"` Policies Policies `json:"policies,omitempty"` Monitors []Monitor `json:"monitors,omitempty"` ServiceAddress []ServiceAddress `json:"serviceAddress,omitempty"` IRulesMap IRulesMap IntDgMap InternalDataGroupMap // contains filtered or unexported fields }
ResourceConfig contains a set of LTM resources to create a Virtual Server
func (*ResourceConfig) AddRuleToPolicy ¶
func (rsCfg *ResourceConfig) AddRuleToPolicy(policyName, partition string, rules *Rules)
func (*ResourceConfig) FindPolicy ¶
func (rc *ResourceConfig) FindPolicy(controlType string) *Policy
FindPolicy gets the information of a policy
func (*ResourceConfig) GetName ¶
func (cfg *ResourceConfig) GetName() string
func (*ResourceConfig) SetPolicy ¶
func (rc *ResourceConfig) SetPolicy(policy Policy)
SetPolicy sets a policy
type ResourceConfigRequest ¶
type ResourceConfigRequest struct {
// contains filtered or unexported fields
}
ResourceConfigRequest Each BigIPConfig per BigIP HA pair to put into the queue to process
type ResourceConfigs ¶
type ResourceConfigs []*ResourceConfig
ResourceConfigs is group of ResourceConfig
type ResourceMap ¶
type ResourceMap map[string]*ResourceConfig
ResourceMap key is resource name, value is pointer to config. May be shared.
type ResourceSelectorConfig ¶
type ResourceStore ¶
type ResourceStore struct {
// contains filtered or unexported fields
}
ResourceStore contain processed LTM and GTM resource data
func NewResourceStore ¶
func NewResourceStore() *ResourceStore
NewResourceStore is Constructor for ResourceStore
func (*ResourceStore) Init ¶
func (rs *ResourceStore) Init()
Init is Receiver to initialize the object.
type RouteBackendCxt ¶
type Rule ¶
type Rule struct { Name string `json:"name"` FullURI string `json:"-"` Ordinal int `json:"ordinal,omitempty"` Actions []*action `json:"actions,omitempty"` Conditions []*condition `json:"conditions,omitempty"` }
Rule config for a Policy
type ServiceAddress ¶
type ServiceAddress struct { ArpEnabled bool `json:"arpEnabled,omitempty"` ICMPEcho string `json:"icmpEcho,omitempty"` RouteAdvertisement string `json:"routeAdvertisement,omitempty"` TrafficGroup string `json:"trafficGroup,omitempty"` SpanningEnabled bool `json:"spanningEnabled,omitempty"` }
ServiceAddress Service IP address definition (BIG-IP virtual-address).
type ServiceTypeLBHealthMonitor ¶
type ServiceTypeLBHealthMonitor struct { Interval int `json:"interval"` Timeout int `json:"timeout"` }
This is the format for each item in the health monitor annotation used in the ServiceType LB objects.
type SourceAddrTranslation ¶
SourceAddrTranslation is Virtual Server Source Address Translation
type SvcBackendCxt ¶
type TLSContext ¶
type TLSContext struct {
// contains filtered or unexported fields
}
type TLSVersion ¶
type TLSVersion string
type VSSpecProperties ¶
type VSSpecProperties struct {
PoolWAF bool
}
type Virtual ¶
type Virtual struct { Name string `json:"name"` PoolName string `json:"pool,omitempty"` Partition string `json:"-"` Destination string `json:"destination"` Enabled bool `json:"enabled"` IpProtocol string `json:"ipProtocol,omitempty"` SourceAddrTranslation SourceAddrTranslation `json:"sourceAddressTranslation,omitempty"` Policies []nameRef `json:"policies,omitempty"` Profiles ProfileRefs `json:"profiles,omitempty"` IRules []string `json:"rules,omitempty"` Description string `json:"description,omitempty"` VirtualAddress *virtualAddress `json:"-"` AdditionalVirtualAddresses []string `json:"additionalVirtualAddresses,omitempty"` SNAT string `json:"snat,omitempty"` ConnectionMirroring string `json:"connectionMirroring,omitempty"` WAF string `json:"waf,omitempty"` Firewall string `json:"firewallPolicy,omitempty"` LogProfiles []string `json:"logProfiles,omitempty"` ProfileL4 string `json:"profileL4,omitempty"` ProfileMultiplex string `json:"profileMultiplex,omitempty"` ProfileWebSocket string `json:"profileWebSocket,omitempty"` ProfileDOS string `json:"profileDOS,omitempty"` ProfileBotDefense string `json:"profileBotDefense,omitempty"` TCP ProfileTCP `json:"tcp,omitempty"` HTTP2 ProfileHTTP2 `json:"http2,omitempty"` Mode string `json:"mode,omitempty"` TranslateServerAddress bool `json:"translateServerAddress"` TranslateServerPort bool `json:"translateServerPort"` Source string `json:"source,omitempty"` AllowVLANs []string `json:"allowVlans,omitempty"` PersistenceProfile string `json:"persistenceProfile,omitempty"` TLSTermination string `json:"-"` AllowSourceRange []string `json:"allowSourceRange,omitempty"` HttpMrfRoutingEnabled *bool `json:"httpMrfRoutingEnabled,omitempty"` IpIntelligencePolicy string `json:"ipIntelligencePolicy,omitempty"` AutoLastHop string `json:"lastHop,omitempty"` AnalyticsProfiles AnalyticsProfiles `json:"analyticsProfiles,omitempty"` MultiPoolPersistence MultiPoolPersistence `json:"multiPoolPersistence,omitempty"` }
Virtual server config
func (*Virtual) AddOrUpdateProfile ¶
func (v *Virtual) AddOrUpdateProfile(prof ProfileRef) bool
AddOrUpdateProfile updates profile to rsCfg
func (*Virtual) SetVirtualAddress ¶
SetVirtualAddress sets a VirtualAddress
type WideIP ¶
type WideIP struct { DomainName string `json:"name"` ClientSubnetPreferred *bool `json:"clientSubnetPreferred,omitempty"` RecordType string `json:"recordType"` LBMethod string `json:"LoadBalancingMode"` PersistenceEnabled bool `json:"persistenceEnabled"` PersistCidrIPv4 uint8 `json:"persistCidrIpv4"` PersistCidrIPv6 uint8 `json:"persistCidrIpv6"` TTLPersistence uint32 `json:"ttlPersistence"` Pools []GSLBPool `json:"pools"` UID string }
Source Files ¶
- as3PostManager.go
- backend.go
- constants.go
- controller.go
- informerManager.go
- informers.go
- metrics.go
- multiClusterHealthProbeManager.go
- multiClusterInformers.go
- multiClusterWorker.go
- nativeResourceWorker.go
- node_poll_handler.go
- postManager.go
- profile.go
- requestHandler.go
- resourceConfig.go
- responseHandler.go
- routing.go
- types.go
- validate.go
- worker.go