如何调用Kubernetes完整服务名称而非AWS节点IP。

3

我正在运行我的应用程序 EKS 集群,几天前我们遇到了问题,假设我们的应用程序 pod 在不同的 AWS 节点上运行,副本计数为 1,让我们将虚拟机名称称为如下。

ams-99547bd55-9fp6r               1/1     Running   0          7m31s   10.255.114.81    ip-10-255-12-11.eu-central-1.compute.internal   
mongodb-58746b7584-z82nd          1/1     Running   0          21h   10.255.113.10   ip-10-255-12-11.eu-central-1.compute.internal

这里是我的运行服务

NAME                TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                      AGE
ams-service         NodePort    172.20.81.165    <none>        3030:30010/TCP               18m
mongodb-service     NodePort    172.20.158.81    <none>        27017:30003/TCP              15d

我正在运行一个作为配置映射的setting.conf.yaml文件,其中包含与应用程序相关的配置。
apiVersion: v1
kind: ConfigMap
metadata:
  name: ama-settings
  labels:
    conf: ams-settings
data:
  config : |
 "git": {
      "prefixUrl": "ssh://git@10.255.12.11:30001/app-server/repos/ams/",
      "author": {
      "name": "app poc",
      "mail": "app@domain.com"
    },

      "mongodb": {
      "host": "10.255.12.11",
      "port": "30003",
      "database": "ams",
      "ssl": false,
     }

这正如我们所期望的工作,但如果我的Pod所在的现有节点IP发生变化,有些情况下,当我删除正在运行的Pod并尝试重新部署时,我的Pod会被放置在其他一些AWS节点上,基本上是EC2 VM。

在此期间,我的应用程序无法工作,然后我需要编辑我的setting.conf.yaml文件,将其更新为新的AWS节点IP,即我的Pod所在的节点IP。

问题是如何使用服务名称而不是AWS节点IP,因为我们不希望在任何现有虚拟机停机的情况下频繁更改IP地址。


实际上,您应该能够使用服务名称“mongodb-service”而不是节点的IP地址;我有点惊讶节点IP在这里居然起作用了。(通常情况下,您根本不需要关心节点IP地址。)如果您进行此更改会发生什么? - David Maze
嗨David,感谢您的回复。当我使用服务名称mongodb-service时,Pod运行时出现错误日志,提示mangodb连接未定义。 - Gowmi
如果我使用 AWS 节点 IP,Pod 就可以正常运行,没有任何问题,但是如果现有的虚拟机被销毁并且 AWS 将启动另一个带有新 IP 的虚拟机,那么每次都需要编辑我的 YAML 文件以更新 IP 地址。 - Gowmi
1个回答

2
理想情况下,您应该使用0.0.0.0/0代替AWS IP。在Node中的示例,请参考参考文档
const cors = require("cors");
app.use(cors());

const port = process.env.PORT || 8000;
app.listen(port,"0.0.0.0" ,() => {
  console.log(`Server is running on port ${port}`);
});

然而,如果你想添加服务名称:

你可以使用完整的认证名称,但我不确定它是否适用于作为主机的0.0.0.0是更好的选择。

<service.name>.<namespace name>.svc.cluster.local

示例

ams-service.default.svc.cluster.local

很好,ams-service.default.svc.cluster.local,但我们如何指定端口号 "mongodb": { "host": "10.255.12.11", "port": "30003", - Gowmi
请使用3030端口或您的服务所需的任何端口。 - Harsh Manvar
仅使用一次0.0.0.0而不是服务名称。 - Harsh Manvar
不行,0.0.0.0也会抛出相同的错误。 - Gowmi
让我们在聊天中继续这个讨论 - Gowmi
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接