【问题标题】:Kubernetes - How to get Service Name of a Pod Aligned toKubernetes - 如何让 Pod 的服务名称与
【发布时间】:2021-12-09 08:58:58
【问题描述】:

我想知道,如何从 Kubernetes 中的 Pod Name 中找到服务名称。

你们能推荐一下吗?

【问题讨论】:

    标签: kubernetes microk8s


    【解决方案1】:

    Services (spec.selector) 和 Pods (metadata.labels) 通过共享标签绑定。

    因此,您希望找到包含(某些)Pod 标签的所有服务。

    kubectl get services \
    --selector=${KEY-1}=${VALUE-1},${KEY-2}=${VALUE-2},...
    --namespace=${NAMESPACE}
    

    ${KEY}${VALUE} 是 Pod 的标签键和值

    这很有挑战性,因为 Service 的 selector 标签可能与 Pod 标签不同。您不希望没有交集,但 Service 的标签很可能是任何 Pod 的子集。

    以下内容不是您想要的,但您可以扩展它来做您想要的。鉴于上述情况,它枚举命名空间中的服务,并使用每个服务的selector 标签,枚举基于它们进行选择的 Pod:

    
    NAMESPACE="..."
    
    SERVICES="$(\
      kubectl get services \
      --namespace=${NAMESPACE} \
      --output=name)"
    
    for SERVICE in ${SERVICES}
    do
      SELECTOR=$(\
        kubectl get ${SERVICE} \
        --namespace=${NAMESPACE}\
        --output=jsonpath="{.spec.selector}" \
        | jq -r '.|to_entries|map("\(.key)=\(.value)")|@csv' \
        | tr -d '"')
      PODS=$(\
        kubectl get pods \
        --selector=${SELECTOR} \
        --namespace=${NAMESPACE} \
        --output=name)
      printf "%s: %s\n" ${SERVICE} ${PODS}
    done
    

    注意这需要jq,因为我不确定是否可以使用kubectlJSONPath 来覆盖服务的标签重新格式化这些如所须。即使使用jq,我的命令也很乱:

    1. 获取服务的selector{"k1":"v1","k2":"v2",...}
    2. 将此转换为"k1=v1","k2=v2",...
    3. 修剪多余的 (?) "

    如果您想对所有命名空间执行此操作,您可以将所有内容包装在:

    NAMESPACES=$(kubectl get namespaces --output=name)
    for NAMESPACE in ${NAMESPACE}
    do
      ...
    done
    

    【讨论】:

    • 不客气!
    【解决方案2】:

    您可以从 Pod 服务的环境变量中获取有关它的信息。 (参考:https://kubernetes.io/docs/concepts/services-networking/connect-applications-service/#environment-variables

    kubectl exec <pod_name> -- printenv | grep SERVICE
    

    例子:

    获取有关 pod 的详细信息

    从环境变量中获取服务

    【讨论】:

    • 这不是他想要的。 OP,查看所有环境变量,看看你是否发现任何有用的东西。或许可以寻找“SERVICE_NAME”。
    猜你喜欢
    • 2021-11-30
    • 1970-01-01
    • 2020-05-17
    • 2019-01-07
    • 2016-04-06
    • 2020-10-02
    • 1970-01-01
    • 2019-02-06
    • 2017-07-05
    相关资源
    最近更新 更多