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

标签 kubernetes kubernetes-service

我正在尝试为基于某些选择器的一组 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没有意识到 service is not among the resources that support 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

我正在运行上游 Kubernetes 1.12.5

最佳答案

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

  • Equality-based
  • Set-based
  • kubeclt允许使用像 = 这样的操作符, ==!= .所以当你使用 $ kubectl get pods --selector property1=dev,property2!=admin 时它有效.

    您要应用的配置在 set-based 中有效选项,因为它支持 in , notinexists :

    environment in (production, qa)

    tier notin (frontend, backend)

    partition

    !partition



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

    更多信息请见 here .

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

    服务中,property2将没有任何值(value)。
    Selector: property1=dev,property2=
    作为附加信息 ,被识别为 ANDservices .

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

    关于kubernetes - 如何在 kubernetes 服务定义 yaml 中指定不相等的选择器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58917686/

    相关文章:

    mysql - 使用 Azure Kubernetes 服务中的 MySQL 数据库向外界公开 pod

    amazon-web-services - AWS EKS : Service(LoadBalancer) running but not responding to requests

    docker - 为什么我用Kubernetes在Ceph上收到 “Structure needs cleaning”消息?

    python - 如何在 Apache Airflow 中混合使用 Celery Executor 和 Kubernetes Executor?

    azure-aks - 使用 AKS 应用程序网关入口 Controller 时 Kubernetes 服务的角色

    dns - 描述 kubernetes 命名空间时的随机字符

    kubernetes - minikube 中的 "kubernetes"服务

    docker - 从 Kubernetes 中的 docker 收集指标

    google-cloud-platform - 在Google Cloud执行个体上建立Kubernetes丛集时“403 Insufficient Permission”

    postgresql - 从 Kubernetes 访问外部数据库