对于 StateFul 集,我可以通过内部无头服务访问其 pod。
我认为,有一种简单的方法在外部公开单个 pod 是有道理的(因为 pod 通常有一个状态,因此对它们进行负载平衡是没有意义的)。
到目前为止,我没有找到直接的方法来做到这一点。即使做kubectl expose pod pod-1 --type NodePort
也给了我一个平衡所有 pod 的服务。是否有这样的原因,或者是否有访问单个 pod 的好方法。
对于 StateFul 集,我可以通过内部无头服务访问其 pod。
我认为,有一种简单的方法在外部公开单个 pod 是有道理的(因为 pod 通常有一个状态,因此对它们进行负载平衡是没有意义的)。
到目前为止,我没有找到直接的方法来做到这一点。即使做kubectl expose pod pod-1 --type NodePort
也给了我一个平衡所有 pod 的服务。是否有这样的原因,或者是否有访问单个 pod 的好方法。
您可以通过在标签上匹配来Pod
在StatefulSet
外部公开特定内容。statefulset.kubernetes.io/pod-name
例如,如果您StatefulSet
已命名app
并且您希望将端口 80 从第一个公开Pod
为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
我看不到他们将负载分配到单个 pod 的方式。如果您希望客户端使用一个 pod 保持此会话,您可以定义 service sessionAffinity: ClientIP
。这将向同一个 pod 发送已建立的客户端流量。