kubernetes: k8s.io/kubernetes/plugin/pkg/admission/antiaffinity Index | Files

package antiaffinity

import "k8s.io/kubernetes/plugin/pkg/admission/antiaffinity"

Package antiaffinity provides the LimitPodHardAntiAffinityTopology admission controller. It rejects any pod that specifies "hard" (RequiredDuringScheduling) anti-affinity with a TopologyKey other than v1.LabelHostname. Because anti-affinity is symmetric, without this admission controller, a user could maliciously or accidentally specify that their pod (once it has scheduled) should block other pods from scheduling into the same zone or some other large topology, essentially DoSing the cluster. In the future we will address this problem more fully by using quota and priority, but for now this admission controller provides a simple protection, on the assumption that the only legitimate use of hard pod anti-affinity is to exclude other pods from the same node.


Package Files

admission.go doc.go


const PluginName = "LimitPodHardAntiAffinityTopology"

PluginName is a string with the name of the plugin

func Register Uses

func Register(plugins *admission.Plugins)

Register registers a plugin

type Plugin Uses

type Plugin struct {

Plugin contains the client used by the admission controller

func NewInterPodAntiAffinity Uses

func NewInterPodAntiAffinity() *Plugin

NewInterPodAntiAffinity creates a new instance of the LimitPodHardAntiAffinityTopology admission controller

func (*Plugin) Validate Uses

func (p *Plugin) Validate(ctx context.Context, attributes admission.Attributes, o admission.ObjectInterfaces) (err error)

Validate will deny any pod that defines AntiAffinity topology key other than v1.LabelHostname i.e. "kubernetes.io/hostname" in requiredDuringSchedulingRequiredDuringExecution and requiredDuringSchedulingIgnoredDuringExecution.

Package antiaffinity imports 7 packages (graph) and is imported by 68 packages. Updated 2019-08-23. Refresh now. Tools for package owners.