【发布时间】:2019-06-12 16:55:43
【问题描述】:
我必须在 GCP Kubernetes 集群中设置 FTP 服务器,但不知道如何路由客户端,以便将来自同一 IP 到不同端口的多个请求路由到同一个 Kubernetes pod。
在(被动)FTP协议中,服务器打开一个新端口,并将端口号发送给客户端。客户端然后创建到该端口的新连接。因此,我需要确保第二个请求被路由到同一个 pod,因为只有在那个 pod 上,服务器才在等待新的连接。
我尝试了一个最小示例,其中两个 Pod 的工作负载什么都不做,并且暴露了端口 21 和 30000-30098。然后,我将 LoadBalancer 类型的服务设置如下(简化为相关部分):
kind: Service
spec:
type: LoadBalancer
sessionAffinity: ClientIP
loadBalancerIP: IP_OF_LB
ports:
- name: ftp-control
port: 21
protocol: TCP
targetPort: 21
- name: pasv-30000
port: 30000
protocol: TCP
targetPort: 30000
# and so on for the remaining ports up to 30098
现在我使用 shell 登录每个 pod,并开始在一个端口上手动监听,如下所示:
netcat -l -p 30001
然后,我从我的工作站使用 telnet 连接到负载平衡器的 IP 地址。
telnet IP_OF_LB 30001
这样,我可以看到哪个 pod 获得了传入的连接请求。
对于单个端口,负载均衡器总是将我的请求转发到同一个 pod。
但是,当我尝试多个端口时,我可以看到后续请求被路由到不同的 pod,即使会话亲和性设置为 ClientIP。
有没有我遗漏的设置?我假设,客户端 IP 的会话亲和性只会使用客户端的 IP 来确定目标 pod。但是,它看起来好像在使用 IP 和端口。
有谁知道我是否可以尝试更多设置来获得所需的行为?
【问题讨论】:
-
请将您的问题移至Super User(在此处删除,在此处重新发布)。这是off-topic here。
-
您好,马丁,感谢您的提示。但是,我在超级用户上没有看到标签“kubernetes”、“google-cloud-platform”。您知道是否有更合适的页面涵盖这些主题?也许这个问题更像是一个 devops 问题
标签: kubernetes ftp google-cloud-platform load-balancing google-kubernetes-engine