猿问

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

我在 k8s 中有两个不同的应用程序需要读取数据,例如AppAAppB它们都部署在同一个集群上

这里的部分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 等?


弑天下
浏览 159回答 4
4回答

GCT1015

注意:Kube-DNS 命名约定为service.namespace.svc.cluster-domain.tld,默认集群域为cluster.local因此,只要服务位于同一集群中,您就可以将您的应用程序称为 ..svc。然后,您需要通过发出以下命令来检查应用程序正在侦听的端口:kubectl&nbsp;-n&nbsp;<namespace>&nbsp;get&nbsp;svc记下服务标识符和问题:kubectl&nbsp;-n&nbsp;<namespace>&nbsp;get&nbsp;svc&nbsp;<identifier>&nbsp;-o&nbsp;yaml这将列出服务清单,您可以在其中查看应用程序正在侦听哪个端口。

宝慕林4294392

如果同一个集群上有 2 个应用程序,那么它们可以通过 kubernetes 内置的 DNS 相互引用。如果AppA需要引用AppB,那么只要你为AppB定义了一个Service,就可以用 来引用它<service>.<namespace>。在您的情况下,如果 AppB 在默认命名空间中运行,您可以调用AppB.default/api/app/getconfig.端口部分可以通过您的服务定义进行管理。下面我使用端口 80,因此我不必在请求中手动指定端口apiVersion: v1kind: Servicemetadata:&nbsp; name: AppBspec:&nbsp; ports:&nbsp; - name: "80"&nbsp; &nbsp; port: 80&nbsp; &nbsp; targetPort: 9090&nbsp; selector:&nbsp; &nbsp; select: AppB更多信息:https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/

慕的地8271018

如果你想让它如此宽容(从任何集群到任何集群),那么你需要一个 DNS,在App B.我会考虑在某个地方进行硬编码。通过将其硬编码为 one&nbsp;ConfigMap,您可以获得一些漂亮的实现。

绝地无双

为您的应用程序 B 定义一个服务。然后您可以使用以下 url 从其他 pod 访问它:your-service-name&nbsp;:&nbsp;port&nbsp;/api/app/getconfig
随时随地看视频慕课网APP

相关分类

Go
我要回答