【问题标题】:Why Kubernetes defines multiple Selector?为什么 Kubernetes 定义了多个 Selector?
【发布时间】:2020-03-17 06:38:49
【问题描述】:

我对 Kubernetes (AKS) 完全陌生,我创建了一个服务,如下所示: https://docs.microsoft.com/it-it/azure/aks/internal-lb

The Yaml file looks like this :
apiVersion: v1
kind: Service
metadata:
  name: internal-app
  annotations:
    **service.beta.kubernetes.io/azure-load-balancer-internal: "true"**
spec:
  type: LoadBalancer
  loadBalancerIP: **10.240.0.25**
  ports:
  - port: 80
  selector:
    app: internal-app

几分钟后,负载均衡器被创建并正确分配了静态 IP。 问题是选择器似乎不起作用。 我无法将 pod 连接到此服务。 提前感谢您的帮助。

这是 POD 部署 yaml 文件:

{
  "kind": "Pod",
  "apiVersion": "v1",
  "metadata": {
    "name": "internal-app-6b587d746d-kstrx",
    "generateName": "internal-app-6b587d746d-",
    "namespace": "default",
    "selfLink": "/api/v1/namespaces/default/pods/internal-app-6b587d746d-kstrx",
    "uid": "03389261-a8b6-4d17-ba7f-231fd09682ec",
    "resourceVersion": "544508",
    "creationTimestamp": "2020-03-17T07:11:00Z",
    "labels": {
      "k8s-app": "internal-app",
      "pod-template-hash": "6b587d746d"
    },
    "ownerReferences": [
      {
        "apiVersion": "apps/v1",
        "kind": "ReplicaSet",
        "name": "internal-app-6b587d746d",
        "uid": "5099da2e-8a7a-4483-b752-3baccffe6d64",
        "controller": true,
        "blockOwnerDeletion": true
      }
    ]
  },
  "spec": {
    "volumes": [
      {
        "name": "default-token-kbhrk",
        "secret": {
          "secretName": "default-token-kbhrk",
          "defaultMode": 420
        }
      }
    ],
    "containers": [
      {
        "name": "internal-app",
        "image": "xxxxxxxxxxxxxxxxxx.azurecr.io/projtest:20293",
        "resources": {},
        "volumeMounts": [
          {
            "name": "default-token-kbhrk",
            "readOnly": true,
            "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount"
          }
        ],
        "terminationMessagePath": "/dev/termination-log",
        "terminationMessagePolicy": "File",
        "imagePullPolicy": "IfNotPresent",
        "securityContext": {
          "privileged": false
        }
      }
    ],
    "restartPolicy": "Always",
    "terminationGracePeriodSeconds": 30,
    "dnsPolicy": "ClusterFirst",
    "serviceAccountName": "default",
    "serviceAccount": "default",
    "nodeName": "aks-agentpool-47203187-vmss000000",
    "securityContext": {},
    "imagePullSecrets": [
      {
        "name": "acrazure"
      }
    ],
    "schedulerName": "default-scheduler",
    "tolerations": [
      {
        "key": "node.kubernetes.io/not-ready",
        "operator": "Exists",
        "effect": "NoExecute",
        "tolerationSeconds": 300
      },
      {
        "key": "node.kubernetes.io/unreachable",
        "operator": "Exists",
        "effect": "NoExecute",
        "tolerationSeconds": 300
      }
    ],
    "priority": 0,
    "enableServiceLinks": true
  },
  "status": {
    "phase": "Running",
    "conditions": [
      {
        "type": "Initialized",
        "status": "True",
        "lastProbeTime": null,
        "lastTransitionTime": "2020-03-17T07:11:00Z"
      },
      {
        "type": "Ready",
        "status": "True",
        "lastProbeTime": null,
        "lastTransitionTime": "2020-03-17T07:11:02Z"
      },
      {
        "type": "ContainersReady",
        "status": "True",
        "lastProbeTime": null,
        "lastTransitionTime": "2020-03-17T07:11:02Z"
      },
      {
        "type": "PodScheduled",
        "status": "True",
        "lastProbeTime": null,
        "lastTransitionTime": "2020-03-17T07:11:00Z"
      }
    ],
    "hostIP": "10.240.0.4",
    "podIP": "10.244.0.40",
    "startTime": "2020-03-17T07:11:00Z",
    "containerStatuses": [
      {
        "name": "internal-app",
        "state": {
          "running": {
            "startedAt": "2020-03-17T07:11:01Z"
          }
        },
        "lastState": {},
        "ready": true,
        "restartCount": 0,
        "image": "axxxxxxxxxxxxxxxazurecr.io/projtest:20293",
        "imageID": "docker-pullable://xxxxxxxxxxxxxxxxxxxxxxx/projtest@sha256:cxxxxxxxxxxxxxx315464984f7e0fe10ecef57xxxxxxxxxxxxxxxxxxxb7d227a4",
        "containerID": "docker://c4d74c2xxxxxxxxxxxxxxxxxxxxxxx878337823dc"
      }
    ],
    "qosClass": "BestEffort"
  }
}

【问题讨论】:

    标签: kubernetes azure-aks


    【解决方案1】:

    检查服务是否有端点。如果选择器正确,它将以 Pod IP 作为端点。

    kubectl describe svc internal-app
    

    服务中的选择器与 pod 上的任何标签都不匹配

      selector:
        app: internal-app
    

    在 pod 中添加标签 app: internal-app 或将服务中的选择器更改为

      selector:
        k8s-app: internal-app
    

    【讨论】:

    • 我将添加您的 pod 清单部署,检查一下,谢谢
    • pod 没有匹配的标签
    • 天哪,在哪一行?你指的是 k8s-app vs app 吗?
    • 是的 k8s-app vs app。我已经用你需要做的事情更新了我的答案
    • +1 也感谢 k8 团队,通过定义 1000 个不同的 Key 来让事情变得简单
    【解决方案2】:

    pod 标签和服务选择器不匹配。

    pod has below label
    "k8s-app": "internal-app",
    
    You need to correct service selector 
      selector:
        app: internal-app
    

    如下所示更新服务定义。它应该工作

    apiVersion: v1
    kind: Service
    metadata:
      name: internal-app
      annotations:
        **service.beta.kubernetes.io/azure-load-balancer-internal: "true"**
    spec:
      type: LoadBalancer
      loadBalancerIP: **10.240.0.25**
      ports:
      - port: 80
      selector:
        k8s-app: internal-app
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-18
      • 2012-09-20
      • 2021-07-08
      • 1970-01-01
      • 1970-01-01
      • 2019-08-16
      • 2018-01-12
      • 1970-01-01
      相关资源
      最近更新 更多