如何在 kubernetes 服务定义 yaml 中指定不等于的选择器?



我正在尝试基于某些选择器为一组 pod 创建一个服务。例如,下面的get pods命令会根据我的要求检索正确的 pod -

kubectl get pods --selector property1=dev,property2!=admin

以下是服务定义yaml的摘录,我正在尝试使用与上述相同的选择器 -

apiVersion: v1
kind: Service
metadata:
name: service1
spec:
type: NodePort
ports:
- name: port1
port: 30303
targetPort: 30303
selector:
property1: dev
<< property2: ???? >>>

我尝试过matchExpressions,但没有意识到服务不在支持基于集的过滤器的资源之列。它导致了以下错误 -

error: error validating "STDIN": error validating data: ValidationError(Service.spec.selector.matchExpressions): invalid type for io.k8s.api.core.v1.ServiceSpec.selector: got "array", expected "string"; if you choose to ignore these errors, turn validation off with --validate=false

我正在运行上游 Kubernetes 1.12.5

我已经做了一些测试,但恐怕这是不可能的。根据文档,API 支持两种类型的选择器:

  • 基于平等
  • 基于集

kubeclt允许使用===!=等运算符。所以当你使用$ kubectl get pods --selector property1=dev,property2!=admin时它有效。

您要应用的配置将在set-based选项中工作,因为它支持innotinexists

环境中(生产、质量保证)

层诺丁(前端、后端)

分区

!分区

不幸的是,set-based只支持较新的复苏,如JobDeploymentReplica SetDeamon Set,但不支持services

可以在此处找到有关此内容的更多信息。

即使您将在 YAML 中将选择器设置为:

property2: !value 

在服务中,property2将没有任何价值。

Selector: property1=dev,property2=

作为附加信息,,services中被识别为AND

由于我不知道您如何管理集群,我唯一能建议的是重新定义标签以仅使用AND作为逻辑运算符。

最新更新