【问题标题】:Kubernetes: Expose only single pod of StatefulSetKubernetes:仅公开 StatefulSet 的单个 pod
【发布时间】:2018-01-20 21:01:30
【问题描述】:

对于 StateFul 集,我可以通过内部无头服务访问其 pod。

我认为,有一种简单的方法将单个 pod 也暴露在外部是有道理的(因为 pod 通常有一个状态,因此对它们进行负载平衡是没有意义的)。

到目前为止,我还没有找到直接的方法来做到这一点。 即使是 kubectl expose pod pod-1 --type NodePort 也可以为我提供一项平衡所有 pod 的服务。 是否有这样的原因,或者是否有访问单个 pod 的好方法。

【问题讨论】:

  • 您是否在集群中运行多个状态完整集实例?
  • 我有多个副本(例如 3 个),即 pod-1、pod-2 和 pod-3。

标签: networking service kubernetes kubectl statefulset


【解决方案1】:

您可以通过匹配statefulset.kubernetes.io/pod-name 标签在外部公开StatefulSet 中的特定Pod

例如,如果您的StatefulSet 被命名为app,并且您希望将第一个Pod 中的端口80 公开为Service

apiVersion: v1
kind: Service
metadata:
  name: app-0
spec:
  type: LoadBalancer
  selector:
    statefulset.kubernetes.io/pod-name: app-0
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80

【讨论】:

    【解决方案2】:

    我看不到他们将负载分配到单个 pod 的方式。如果您希望客户端使用一个 pod 保持此会话,您可以定义服务sessionAffinity: ClientIP。这将向同一个 pod 发送已建立的客户端流量。

    【讨论】:

    • 从我的集群内部,我可以单独访问每个 pod。所以,我不明白为什么这对于从集群外部访问没有意义。
    • 我假设在集群内部您使用 POD IP 访问 Pod 是否正确?还是您使用的服务 IP 访问 pod?
    • 实际上,我通过他们的 DNS 名称通过无头服务访问 pod。所以最后,我猜这应该是 Service IP?
    猜你喜欢
    • 2019-05-24
    • 2021-09-26
    • 1970-01-01
    • 2021-09-08
    • 1970-01-01
    • 2019-04-30
    • 2019-06-08
    • 2018-03-09
    • 2018-06-17
    相关资源
    最近更新 更多