为了账号安全,请及时绑定邮箱和手机立即绑定

如何在运行时使用应用程序主机和端口

如何在运行时使用应用程序主机和端口

Go
弑天下 2023-08-14 14:26:19
我在 k8s 中有两个不同的应用程序需要读取数据,例如AppA,AppB它们都部署在同一个集群上这里的部分tricky是我需要将两个应用程序部署到任何集群并知道要连接的主机和端口,我不想使用硬编码值。例如应用程序A从应用程序B读取数据应用程序B是具有 REST API 的 Web 应用程序,因此应用程序A需要像http://10.26.131.136:9090/api/app/getconfig一样调用App A 知道服务路径:就像api/app/getconfigApp 一样B,但它如何知道appB 的主机和端口?我无法使用它硬编码,如果我使用它,这是可行的,type:LoadBalacer但这是硬编码的主机和端口,我需要以某种方式在运行时确定它,也许使用 serviceName 等?
查看完整描述

4 回答

?
GCT1015

TA贡献1827条经验 获得超4个赞

注意:Kube-DNS 命名约定为service.namespace.svc.cluster-domain.tld,默认集群域为cluster.local

因此,只要服务位于同一集群中,您就可以将您的应用程序称为 ..svc。然后,您需要通过发出以下命令来检查应用程序正在侦听的端口:

kubectl -n <namespace> get svc

记下服务标识符和问题:

kubectl -n <namespace> get svc <identifier> -o yaml

这将列出服务清单,您可以在其中查看应用程序正在侦听哪个端口。


查看完整回答
反对 回复 2023-08-14
?
宝慕林4294392

TA贡献2021条经验 获得超8个赞

如果同一个集群上有 2 个应用程序,那么它们可以通过 kubernetes 内置的 DNS 相互引用。


如果AppA需要引用AppB,那么只要你为AppB定义了一个Service,就可以用 来引用它<service>.<namespace>。在您的情况下,如果 AppB 在默认命名空间中运行,您可以调用AppB.default/api/app/getconfig.


端口部分可以通过您的服务定义进行管理。下面我使用端口 80,因此我不必在请求中手动指定端口


apiVersion: v1

kind: Service

metadata:

  name: AppB

spec:

  ports:

  - name: "80"

    port: 80

    targetPort: 9090

  selector:

    select: AppB

更多信息:https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/


查看完整回答
反对 回复 2023-08-14
?
慕的地8271018

TA贡献1796条经验 获得超4个赞

如果你想让它如此宽容(从任何集群到任何集群),那么你需要一个 DNS,在App B.

我会考虑在某个地方进行硬编码。通过将其硬编码为 one ConfigMap,您可以获得一些漂亮的实现。


查看完整回答
反对 回复 2023-08-14
?
绝地无双

TA贡献1946条经验 获得超4个赞

为您的应用程序 B 定义一个服务。然后您可以使用以下 url 从其他 pod 访问它:your-service-name : port /api/app/getconfig



查看完整回答
反对 回复 2023-08-14
  • 4 回答
  • 0 关注
  • 158 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信