Kubernetes:仅公开 StatefulSet 的单个 pod

Kubernetes: Expose only single pod of StatefulSet

对于 StateFul 集,我可以通过内部无头服务访问它的 pods。

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

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

的好方法

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

您可以在 StatefulSet 中通过匹配 statefulset.kubernetes.io/pod-name 标签向外部公开特定的 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