【Spark Operator】webhook的NamespaceSelector和ObjectSelector

2020-12-31 11:29:35 浏览数 (1)

之前走读 Spark Opeartor Webhook 部分的代码的时候发现,因为业务种类很多,我们需要在 webhook 层加很多参数和配置来控制用户的一些行为但是发现原生的 Spark Operator 只接受 NamespaceSelector 也就是这种行为的控制职能针对一个命名空间的对象。这个范围对我们来说有点太大了,我们喜欢更精细一点去控制 Webhook 的效果,所以这里可以通过修改 Webhook,引入 ObjectSelector 来控制。修改 spark-operator webhook 源码,添加了 ObjectSelector,保证只有 Spark 的 Pod 会被发送到 /webhook。

代码语言:go复制
	mutatingWebhook := v1beta1.MutatingWebhook{
		Name:  webhookName,
		Rules: mutatingRules,
		ObjectSelector: &metav1.LabelSelector{
			MatchLabels: map[string]string{"sparkoperator.k8s.io/launched-by-spark-operator": "true"},
		},
		ClientConfig: v1beta1.WebhookClientConfig{
			Service:  wh.serviceRef,
			CABundle: caCert,
		},
		FailurePolicy:     &wh.failurePolicy,
		NamespaceSelector: wh.selector,
	}

上述方案只能在 k8s 1.16 才能使用了,目前来说,对于大部分 1.14 的集群,只能通过 Namespace 来区分了,Namespace 加上特定的 Label,也就是只有符合 nameSpaceSelector 这个 Namespace 下的资源对象才会被 webhook 拦截,所以 ObjectSelector 是否生效还要取决于 Webhook 所在的 k8s 集群。 2020年最后一天了,水一篇…

0 人点赞