F5GenericMsgSetting¶
F5GenericMsgSetting is a Custom Resource Definition (CRD) in the k8s.f5net.com API group. It exposes a namespaced custom resource that configures generic message routing and protocol/parser behavior.
CR Parameters¶
metadata¶
| Parameter | Type | Description |
|---|---|---|
name |
string | Unique name of the custom resource. |
namespace |
string | Namespace where the resource is created (because the CRD is namespaced). |
spec¶
The spec section defines routing behavior, retry/pending limits, iRule scoping, and protocol/parser settings.
| Parameter | Type | Description | Default |
|---|---|---|---|
ignoreClientPort |
boolean | If true, the system ignores the remote port on client-side connections when searching for an existing connection. |
false |
maxPendingBytes |
integer | Max bytes of messages held pending while waiting for a connection to a peer. If iruleScopeMessage=true, also limits bytes for messages concurrently processing iRule events. 0 disables the limit. Min 0, max 4294967295. |
32768 |
maxPendingMessages |
integer | Max count of messages held pending while waiting for a connection to a peer. If iruleScopeMessage=true, also limits number of messages concurrently processing iRule events. 0 disables the limit. Min 0, max 4294967295. |
64 |
maxRetries |
integer | Maximum number of times a message may be resubmitted for rerouting by the MR::retry iRule command. Min 0, max 4294967295. |
1 |
perPeerStats |
boolean | If enabled, profile-specific statistics are captured for each pool member. | false |
routes |
array(object) | List of static routes for the router instance to use. | [] |
routes.destinationAddress |
string | Destination address of the route. If not present, treated as wildcard. Max length 255. The value must match the pattern ^[0-9a-zA-Z._-]*$, meaning it can only contain alphanumeric characters (0-9, a-z, A-Z), periods (.), underscores (_), and hyphens (-). |
"" |
routes.sourceAddress |
string | Source address of the route. If not present, treated as wildcard. Max length 255. The value must match the pattern ^[0-9a-zA-Z._-]*$, meaning it can only contain alphanumeric characters (0-9, a-z, A-Z), periods (.), underscores (_), and hyphens (-). |
"" |
routes.peerSelectionMode |
string | How to select a peer from peers. Enum: sequential, ratio. |
"sequential" |
routes.peers |
array(object) | List of peers for this route. | [] |
routes.peers.autoInitialization |
boolean | If enabled, BIG-IP automatically creates outbound connections to active pool members using the referenced transport-config. | false |
routes.peers.autoInitializationInterval |
integer | Interval (ms) between attempts to initiate connections. Min 500, max 65535. |
5000 |
routes.peers.connectionMode |
string | How connections per host are limited/distributed. Enum: per-peer, per-tmm, per-client, per-client-per-tmm, per-peer-alternate-tmm, per-client-alternate-tmm. |
"per-peer" |
routes.peers.numberConnections |
integer | Distribution of connections between BIG-IP and a remote host. Min 1, max 4294967295. |
1 |
routes.peers.pool |
string | Name of the pool to which messages are routed. Max length 255. The value must match the pattern ^$^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$, meaning it can be an empty string or a domain-like structure containing lowercase letters (a-z), digits (0-9), optional hyphens (-), and subdomains separated by periods (.). |
"" |
routes.peers.ratio |
integer | Ratio used when peerSelectionMode=ratio. Min 0, max 100. |
1 |
routes.peers.transportConfig |
object | Transport configuration for this peer (required: protocolProfile). |
|
routes.peers.transportConfig.protocol |
string | Transport protocol. Enum: tcp, udp. |
tcp |
routes.peers.transportConfig.protocolProfile |
string | Name of the protocol profile to be used. Min length 1, max length 255. The value must match the pattern ^$^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$, meaning it can be an empty string or a domain-like structure containing lowercase letters (a-z), digits (0-9), optional hyphens (-), and subdomains separated by periods (.). |
(required) |
routes.peers.transportConfig.iRules |
array(string) | iRules that customize the transport configuration. Each entry: min length 1, max length 255. The value must match the pattern ^$^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$, meaning it can be an empty string or a domain-like structure containing lowercase letters (a-z), digits (0-9), optional hyphens (-), and subdomains separated by periods (.). |
[] |
routes.peers.transportConfig.snat |
object | Source NAT configuration (see below validations). | |
routes.peers.transportConfig.snat.type |
string | Source address translation type. Enum: none, snat, automap. |
none |
routes.peers.transportConfig.snat.pool |
string | SNAT pool name (only valid when type=snat). The value must match the pattern ^$^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$, meaning it can be an empty string or a domain-like structure containing lowercase letters (a-z), digits (0-9), optional hyphens (-), and subdomains separated by periods (.). |
"" |
routes.peers.transportConfig.sourcePort |
integer | Source port for the created connection if non-zero. Min 0, max 65535. |
0 |
routes.peers.transportConfig.sourcePortMode |
string | How to select a source port. Enum: change, preserve, preserve-strict. |
"change" |
useLocalConnection |
boolean | If true, attempts to route to an existing connection on the same TMM as the incoming message; otherwise uses deterministic algorithm / creates connection as needed. May reduce connections created to a peer. |
true |
iruleScopeMessage |
boolean | If true, iRule events are scoped to each message (concurrent processing). If false, iRule events are scoped to the connection flow (legacy mode: executes one-at-a-time per flow). |
false |
protocol |
object | Protocol/parser configuration. | |
protocol.disableParser |
boolean | If true, the generic message parser is disabled; it ignores incoming packets and doesn’t directly send message data. Used for iRule script protocol implementations. |
false |
protocol.maxEgressBuffer |
integer | Max send buffer size (bytes). If exceeded, router stops receiving outgoing messages until buffer drops below the limit. Min 1, max 4294967295. |
32768 |
protocol.maxMessageSize |
integer | Max size of a received message; if exceeded, connection is reset. Min 1, max 4294967295. |
32768 |
protocol.messageTerminator |
string | Terminator used to split messages. If empty, input stream is not separated into messages. Max length 63. |
"\n" |
protocol.matchResponse |
boolean | If false, matching of responses to requests is disabled. |
true |
SNAT validations¶
The CRD enforces the following rules:
If
snat.type == "none"thensnat.poolmust be empty.If
snat.type == "automap"thensnat.poolmust be empty.If
snat.type == "snat"thensnat.poolmust be non-empty.
CR Example¶
apiVersion: k8s.f5net.com/v1
kind: F5GenericMsgSetting
metadata:
name: example-genericmsg
namespace: default
spec:
ignoreClientPort: false
maxPendingBytes: 32768
maxPendingMessages: 64
maxRetries: 1
perPeerStats: false
useLocalConnection: true
iruleScopeMessage: false
routes:
- destinationAddress: "serviceA"
sourceAddress: "clientA"
peerSelectionMode: sequential
peers:
- pool: "example-pool"
connectionMode: per-peer
numberConnections: 1
ratio: 1
transportConfig:
protocol: tcp
protocolProfile: "example-tcp-profile"
iRules: []
snat:
type: none
pool: ""
sourcePort: 0
sourcePortMode: change
protocol:
disableParser: false
maxEgressBuffer: 32768
maxMessageSize: 32768
messageTerminator: "\n"
matchResponse: true