gpt4 book ai didi

kubernetes - 如何使用服务名称访问 kubernetes 集群中的服务。

转载 作者:行者123 更新时间:2023-12-02 14:48:33 25 4
gpt4 key购买 nike

我对 kubernetes 还很陌生,并且我已经在 google 容器引擎上成功设置了一个集群。在我的集群中,我有一个使用 dropwizard 开发的后端 api,使用 Node js 开发的前端和一个 mysql 数据库。所有这些都已部署到集群并正在工作。但是,我的挑战是在为我的节点容器和后端设置外部 IP 后,我可以远程访问它们,但我无法使用服务名称从前端访问我的后端,例如我的后端在集群内称为 backendapi。我做不到 http://backendapi:8080在部署到集群时调用我的其余服务。对我来说,问题是当我部署到集群时,我不希望我的前端使用外部 ip 访问我的后端,我希望它们在集群内进行连接,而不通过外部 ip 地址。当我连接到 pod 并 ping backendapi 时,它会返回结果,但是当我部署前端并使用标签名称时,它不起作用。我可能做错了什么?

最佳答案

只要 kube-dns 正在运行(我相信“除非您禁用它,否则总是如此”),所有服务对象的集群内 DNS 名称为 service_name +"."+ service_namespace + ".svc.cluster.local" 因此所有其他内容都会在 default 命名空间中将您的 backendapi 寻址为 (使用您的端口号示例)http://backendapi.default.svc.cluster.local:8080。这一事实就是 Kubernetes 强制所有标识符为“dns 兼容”名称(没有下划线或其他愚蠢字符)的原因。

即使您没有运行 kube-dns,所有服务名称和端口也会像 docker 一样注入(inject)到 Pod 的环境中,因此环境变量 ${BACKENDAPI_SERVICE_HOST} :${BACKENDAPI_SERVICE_PORT} 将包含服务的集群内 IP(即使环境变量名为“host”)和“默认”服务端口(在您的示例中为 8080)(如果只有一个)。

您选择使用 DNS 名称还是环境变量 IP 取决于您是否喜欢在日志输出或错误消息中使用“可读”的名称,还是您是否愿意跳过 DNS 查找和使用服务 IP 地址可提高速度,但易读性较差。他们行为相同。

整个故事活着in the services-networking concept documentation

关于kubernetes - 如何使用服务名称访问 kubernetes 集群中的服务。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47027194/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com