我正在尝试在集群中部署coturn
服务器。Kubernetes
根据启动手册,似乎每台服务器都必须有自己的外部 IP 地址。但是我找不到将外部 IP 地址绑定到每个 coturnpod
的方法。
我怎么解决这个问题?或者我应该将服务器放在 Kubernetes 集群之外?
最简单的方法是使用带有 hostNetwork: true 的 DaemonSet。这样,您将为每个节点服务器拥有一个可直接访问外部接口的 coturn 服务器。
尽管您不能直接将静态 IP 分配给 pod,但您可以创建一个服务来公开 pod 并允许您通过外部 IP 地址将流量路由到它们。
例如,您可以通过运行以下将创建服务的命令来公开部署(此命令假定您的应用程序正在侦听端口 8080):
kubectl expose deployment DEPLOYMENT_NAME --type=LoadBalancer --port 80 --target-port 8080
要检索生成的外部 IP 地址,请运行:
kubectl get services
这里有更多关于这方面的信息
您还可以通过创建入口资源来生成外部 IP,详见此处。
为此,您应该使用适当的 CNI 插件,例如 multus:阅读此内容。
简而言之:Multus 在 k8s 外部接口之上创建了一个桥接器,然后它会将这个桥接器附加到您的容器中,此外,它将附加第二个接口用于使用 ClusterIP 进行集群间通信,您也可以使用默认的 CoreDNS pod 之间的 DNS 查询服务。
您创建一个 NetworkAttachmentDefinition 来配置 multus,然后提供如下配置:
config: '{
"cniVersion": "0.3.0",
"type": "macvlan",
"master": "eth0",
"mode": "bridge",
"ipam": {
"type": "host-local",
"subnet": "192.168.1.0/24",
"rangeStart": "192.168.1.200",
"rangeEnd": "192.168.1.216",
"routes": [
{ "dst": "0.0.0.0/0" }
],
"gateway": "192.168.1.1"
}
}'
Multus 将根据预先配置的范围从池中为您的 coturn pod 动态分配一个 IP 地址。如果由于某种原因包含“coturn server”容器的 pod 将被杀死(假设您已经配置了适当的 liveliness Probes),它将立即使用相同的桥接外部接口重新调度到具有相同网络设置的不同节点。
使用 "hostNetwork: true" 是个坏主意,它会暴露每个 k8s 节点上的端口,并且会使网络变得非常复杂,而且如果任何其他服务需要,您将无法使用 ClusterIP 与 coturn 服务通信或者使用 k8s DNS 服务。