Kubernetes Exposed Service Created With Type NodePortedit

This rule detects an attempt to create or modify a service as type NodePort. The NodePort service allows a user to externally expose a set of labeled pods to the internet. This creates an open port on every worker node in the cluster that has a pod for that service. When external traffic is received on that open port, it directs it to the specific pod through the service representing it. A malicious user can configure a service as type Nodeport in order to intercept traffic from other pods or nodes, bypassing firewalls and other network security measures configured for load balancers within a cluster. This creates a direct method of communication between the cluster and the outside world, which could be used for more malicious behavior and certainly widens the attack surface of your cluster.

Rule type: query

Rule indices:

  • logs-kubernetes.*

Severity: medium

Risk score: 47

Runs every: 5 minutes

Searches indices from: now-6m (Date Math format, see also Additional look-back time)

Maximum alerts per execution: 100



  • Elastic
  • Kubernetes
  • Continuous Monitoring
  • Execution
  • Persistence

Version: 200 (version history)

Added (Elastic Stack release): 8.4.0

Last modified (Elastic Stack release): 8.6.0

Rule authors: Elastic

Rule license: Elastic License v2

Potential false positivesedit

Developers may have a legitimate use for NodePorts. For frontend parts of an application you may want to expose a Service onto an external IP address without using cloud specific Loadbalancers. NodePort can be used to expose the Service on each Node’s IP at a static port (the NodePort). You’ll be able to contact the NodePort Service from outside the cluster, by requesting <NodeIP>:<NodePort>. NodePort unlike Loadbalancers, allow the freedom to set up your own load balancing solution, configure environments that aren’t fully supported by Kubernetes, or even to expose one or more node’s IPs directly.

Investigation guideedit

Rule queryedit

event.dataset : "kubernetes.audit_logs" and
and kubernetes.audit.objectRef.resource:"services" and
kubernetes.audit.verb:("create" or "update" or "patch") and

Threat mappingedit


Rule version historyedit

Version 200 (8.6.0 release)
  • Updated query, changed from:

    kubernetes.audit.objectRef.resource:"services" and
    kubernetes.audit.verb:("create" or "update" or "patch") and
Version 100 (8.5.0 release)
  • Formatting only