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

Rak*_*h N 5 kubernetes kubernetes-service

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

kubectl get pods --selector property1=dev,property2!=admin
Run Code Online (Sandbox Code Playgroud)

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

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

Run Code Online (Sandbox Code Playgroud)

我尝试过matchExpressions但没有意识到service 不在支持 set-based filters 的资源中。它导致以下错误 -

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
Run Code Online (Sandbox Code Playgroud)

我正在运行上游 Kubernetes 1.12.5

Pjo*_*erS 3

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

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

您想要应用的配置将在set-based选项中工作,因为它支持innotin并且exists

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

层级 notin(前端、后端)

分割

!分割

不幸的set-based是,仅由较新的资源支持,如Job, DeploymentReplica SetDeamon Set支持services

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

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

property2: !value 
Run Code Online (Sandbox Code Playgroud)

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

Selector: property1=dev,property2=

由于附加信息,被识别ANDservices.

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