Documentation
¶
Overview ¶
Package kafka defines the Kafka API of the Cilium network policy interface +groupName=policy
Index ¶
Constants ¶
const ( ProduceKey = 0 FetchKey = 1 OffsetsKey = 2 MetadataKey = 3 LeaderAndIsr = 4 StopReplica = 5 UpdateMetadata = 6 OffsetCommitKey = 8 OffsetFetchKey = 9 FindCoordinatorKey = 10 JoinGroupKey = 11 CreateTopicsKey = 19 DeleteTopicsKey = 20 DeleteRecordsKey = 21 OffsetForLeaderEpochKey = 23 AddPartitionsToTxnKey = 24 WriteTxnMarkersKey = 27 TxnOffsetCommitKey = 28 AlterReplicaLogDirsKey = 34 DescribeLogDirsKey = 35 CreatePartitionsKey = 37 )
List of Kafka apiKeys which have a topic in their request
const ( HeartbeatKey = 12 LeaveGroupKey = 13 SyncgroupKey = 14 APIVersionsKey = 18 )
List of Kafka apiKey which are not associated with any topic
const ( ProduceRole = "produce" ConsumeRole = "consume" )
List of Kafka Roles
const (
MaxTopicLen = 255
)
MaxTopicLen is the maximum character len of a topic. Older Kafka versions had longer topic lengths of 255, in Kafka 0.10 version the length was changed from 255 to 249. For compatibility reasons we are using 255
Variables ¶
var APIKeyMap = map[string]int16{
"produce": 0,
"fetch": 1,
"offsets": 2,
"metadata": 3,
"leaderandisr": 4,
"stopreplica": 5,
"updatemetadata": 6,
"controlledshutdown": 7,
"offsetcommit": 8,
"offsetfetch": 9,
"findcoordinator": 10,
"joingroup": 11,
"heartbeat": 12,
"leavegroup": 13,
"syncgroup": 14,
"describegroups": 15,
"listgroups": 16,
"saslhandshake": 17,
"apiversions": 18,
"createtopics": 19,
"deletetopics": 20,
"deleterecords": 21,
"initproducerid": 22,
"offsetforleaderepoch": 23,
"addpartitionstotxn": 24,
"addoffsetstotxn": 25,
"endtxn": 26,
"writetxnmarkers": 27,
"txnoffsetcommit": 28,
"describeacls": 29,
"createacls": 30,
"deleteacls": 31,
"describeconfigs": 32,
"alterconfigs": 33,
}
APIKeyMap is the map of all allowed kafka API keys with the key values. Reference: https://kafka.apache.org/protocol#protocol_api_keys
var ReverseAPIKeyMap = map[int16]string{
0: "produce",
1: "fetch",
2: "offsets",
3: "metadata",
4: "leaderandisr",
5: "stopreplica",
6: "updatemetadata",
7: "controlledshutdown",
8: "offsetcommit",
9: "offsetfetch",
10: "findcoordinator",
11: "joingroup",
12: "heartbeat",
13: "leavegroup",
14: "syncgroup",
15: "describegroups",
16: "listgroups",
17: "saslhandshake",
18: "apiversions",
19: "createtopics",
20: "deletetopics",
21: "deleterecords",
22: "initproducerid",
23: "offsetforleaderepoch",
24: "addpartitionstotxn",
25: "addoffsetstotxn",
26: "endtxn",
27: "writetxnmarkers",
28: "txnoffsetcommit",
29: "describeacls",
30: "createacls",
31: "deleteacls",
32: "describeconfigs",
33: "alterconfigs",
}
ReverseApiKeyMap is the map of all allowed kafka API keys with the key values. Reference: https://kafka.apache.org/protocol#protocol_api_keys
var TopicValidChar = regexp.MustCompile(`^[a-zA-Z0-9\\._\\-]+$`)
TopicValidChar is a one-time regex generation of all allowed characters in kafka topic name.
Functions ¶
func ApiKeyToString ¶
Types ¶
type PortRule ¶
type PortRule struct {
// Role is a case-insensitive string and describes a group of API keys
// necessary to perform certain higher-level Kafka operations such as "produce"
// or "consume". A Role automatically expands into all APIKeys required
// to perform the specified higher-level operation.
//
// The following values are supported:
// - "produce": Allow producing to the topics specified in the rule
// - "consume": Allow consuming from the topics specified in the rule
//
// This field is incompatible with the APIKey field, i.e APIKey and Role
// cannot both be specified in the same rule.
//
// If omitted or empty, and if APIKey is not specified, then all keys are
// allowed.
//
// +kubebuilder:validation:Enum=produce;consume
// +kubebuilder:validation:Optional
Role string `json:"role,omitempty"`
// APIKey is a case-insensitive string matched against the key of a
// request, e.g. "produce", "fetch", "createtopic", "deletetopic", et al
// Reference: https://kafka.apache.org/protocol#protocol_api_keys
//
// If omitted or empty, and if Role is not specified, then all keys are allowed.
//
// +kubebuilder:validation:Optional
APIKey string `json:"apiKey,omitempty"`
// APIVersion is the version matched against the api version of the
// Kafka message. If set, it has to be a string representing a positive
// integer.
//
// If omitted or empty, all versions are allowed.
//
// +kubebuilder:validation:Optional
APIVersion string `json:"apiVersion,omitempty"`
// ClientID is the client identifier as provided in the request.
//
// From Kafka protocol documentation:
// This is a user supplied identifier for the client application. The
// user can use any identifier they like and it will be used when
// logging errors, monitoring aggregates, etc. For example, one might
// want to monitor not just the requests per second overall, but the
// number coming from each client application (each of which could
// reside on multiple servers). This id acts as a logical grouping
// across all requests from a particular client.
//
// If omitted or empty, all client identifiers are allowed.
//
// +kubebuilder:validation:Optional
ClientID string `json:"clientID,omitempty"`
// Topic is the topic name contained in the message. If a Kafka request
// contains multiple topics, then all topics must be allowed or the
// message will be rejected.
//
// This constraint is ignored if the matched request message type
// doesn't contain any topic. Maximum size of Topic can be 249
// characters as per recent Kafka spec and allowed characters are
// a-z, A-Z, 0-9, -, . and _.
//
// Older Kafka versions had longer topic lengths of 255, but in Kafka 0.10
// version the length was changed from 255 to 249. For compatibility
// reasons we are using 255.
//
// If omitted or empty, all topics are allowed.
//
// +kubebuilder:validation:MaxLength=255
// +kubebuilder:validation:Optional
Topic string `json:"topic,omitempty"`
}
PortRule is a list of Kafka protocol constraints. All fields are optional, if all fields are empty or missing, the rule will match all Kafka messages.
func (*PortRule) DeepEqual ¶
DeepEqual is an autogenerated deepequal function, deeply comparing the receiver with other. in must be non-nil.
func (*PortRule) GetAPIKeys ¶
GetAPIKeys() returns a slice of numeric apikeys for the PortRule
func (*PortRule) GetAPIVersion ¶
GetAPIVersion() returns the numeric API version for the PortRule