我正在考虑将kubernetes作为我的应用程序的平台。我将启动多个StatefulSet,每个包含最多32个容器。 kubernetes集群将包含几个节点,并且将为每个节点分配例如节点。 32个外部IP地址。
我的应用程序要求运行在Internet上某处的客户端能够通过静态IP地址和端口访问每个单独的服务器实例,以实现基于客户端的负载平衡和故障转移。服务器可以随时出现并死亡,但服务器运行时服务器地址应该是稳定的。
总而言之,我希望能够从互联网上访问我的容器,如下所示:
这是否可以通过kubernetes实现?如果是这样,您能提供一些提示,并提供相关的kubernetes文档吗?
答案 0 :(得分:0)
您是否与StatefulSet
绑定?对我来说听起来更像DaemonSet。如果您想坚持StatefulSet
,只需使用container
规范中的容器/主机端口参数。
示例,在与群集中的选择器条件匹配的每个节点上各自的端口上运行应用overflow-foo
,overflow-bar
,overflow-baz
。
apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
name: overflow-app
labels:
app: overflow-app-agent
version: v1
spec:
template:
metadata:
labels:
name: overflow-app
spec:
hostPID: true
hostIPC: true
hostNetwork: true
containers:
- image: overflow-foo:latest
name: overflow-bar
command: [ "bash", "-c", "run.sh" ]
ports:
- containerPort: 1000
hostPort: 1000
- image: overflow-bar:latest
name: overflow-bar
command: [ "bash", "-c", "run.sh" ]
ports:
- containerPort: 1001
hostPort: 1001
- image: overflow-baz:latest
name: overflow-baz
command: [ "bash", "-c", "run.sh" ]
ports:
- containerPort: 1002
hostPort: 1002
答案 1 :(得分:0)
听起来您想使用Services
曝光您的StatefulSets
。您可以为每个有状态集定义一个服务,并使用NodePort
或LoadBalancer
将其公开给外部世界。 NodePort
可用于在群集中的每个Node
上进行寻址,而LoadBalancer可以是单个入口点,也可以平衡负载与StatefulSet的不同PODs
。有关详细信息,请阅读Services的官方文档,尤其是NodePort和LoadBalancer的相应部分。
另外一个注意事项 - 默认情况下,NodePort使用端口范围30000-32767,但您可以使用群集参数service-node-port-range
更改它。请参阅docs。