【问题标题】:Is there a command to check which pods have a service applied是否有命令检查哪些 pod 应用了服务
【发布时间】:2020-06-30 16:54:04
【问题描述】:

我已经制作了一个 service.yaml 并创建了服务。

kind: Service
apiVersion: v1
metadata:
  name: cass-operator-service
spec:
  type: LoadBalancer
  ports:
    - port: 9042
      targetPort: 9042
  selector:
    name: cass-operator

有没有办法检查服务应用在哪些 pod 上?

我希望使用上述服务,连接到在 external_ip/port(9042 端口)上运行 Kubernetes/Cassandra 的 Google Cloud 中的集群。但是使用上述服务,我不能。

kubectl get svc 显示

NAME                    TYPE           CLUSTER-IP     EXTERNAL-IP     PORT(S)          AGE
cass-operator-service   LoadBalancer   10.51.247.82   34.91.214.233   9042:31902/TCP   73s

所以可能该服务正在侦听 9042,但正在转发到 31902 中的 pod。我希望两个端口都是 9042。有可能吗?

【问题讨论】:

    标签: kubernetes


    【解决方案1】:

    最好的方法是跟随标签和选择器

    您的 pod 有一个标签部分,服务在选择器部分使用它,一些示例在:

    https://kubernetes.io/docs/concepts/services-networking/service/

    您可以通过以下方式找到服务的选择器:

    kubectl describe svc cass-operator-service
    

    您可以列出您的标签:

    kubectl get pods --show-labels
    

    【讨论】:

    • 谢谢。因此,如果服务中的注释是 Selector: name=cass-operatorkubectl get namespaces 返回 cass-operatorkubectl get pods -l name=cass-operator --show-labels 返回 no resouces 那么这是否意味着我使用了错误的选择器或其他东西?
    • 如果 pod 位于命名空间:cass-operator,则需要运行:kubectl get pods -l "name=cass-operator" -n cass-operator
    • 谢谢。这样可行。指定选择器时命名空间是否有意义?对于服务中的此类 pod,选择器应该是什么。我想将服务与这些 pod 相关联,但无法做到。请看stackoverflow.com/questions/62651374/…
    • 我认为此链接将帮助您了解命名空间的工作原理:cloud.google.com/blog/products/gcp/…。查看部分:跨命名空间通信。
    【解决方案2】:

    您可以通过如下选择器查询来获取 pods

    kubectl get pods -l name=cass-operator
    
    

    您还可以通过运行列出所有在 kubernetes 服务后面提供流量的 pod

    kubectl get ep <service name> -o=jsonpath='{.subsets[*].addresses[*].ip}' | tr ' ' '\n' | xargs -I % kubectl get pods -o=name --field-selector=status.podIP=%
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-18
      相关资源
      最近更新 更多