gpt4 book ai didi

java - kubernetes 中服务的 Java 应用程序中的服务器配置

转载 作者:行者123 更新时间:2023-12-02 11:57:26 24 4
gpt4 key购买 nike

我在几个 Java 应用程序中遇到了有关配置设置的问题。

我正在使用minikube版本:v0.21.0docker for mac

我对所有应用程序进行了 Docker 化,但应用程序之间的通信部分让我感到困扰。

由于我知道应用程序需要通过 server.url 选项(在 java 的 application.propertions 中)进行通信,所以我不确定如何实现这一点。

主应用程序还有一个 Angular 前端,我必须在其中定义两个服务器 Java 应用程序的 url。

我知道 k8 中的应用程序通过服务(使用其虚拟 IP)进行通信,并且我已经为每个应用程序做到了这一点。

但是在前端应用程序中(config.js)

angular.module('app').constant("CONFIG", {
app1_server_URL: "http://app1:8080/app1/",
app2_server_URL: "http://app2:8095/"
});

因此,当我到达前端页面时,当我尝试通过 Chrome 控制台登录时,它会尝试转到 http://app1:8080/app1/ ,但是说找不到该应用程序?似乎 DNS 解析找不到名为的服务应用程序1?解析 DNS(当我通过浏览器查看时),但它会查找 http://app1:8080/app1/在集群之外?

如果我为我的所有应用程序提供如下所示的服务:

apiVersion: v1
kind: Service
metadata:
name: app1
labels:
app: app1
spec:
selector:
app: app1
ports:
- protocol: TCP
port: 8080
name: http

我可以在java 应用程序属性中写入可以像这样访问的url:

server.url=http://app1

我不确定我做错了什么,所以任何建议都会有帮助。

Tnx,汤姆

最佳答案

您的角度应用程序是前端应用程序。这意味着代码将在用户的浏览器上执行。因此,从 Angular 应用程序到 Java 应用程序的请求来自 Kubernetes 集群外部

但是您创建了一个 kubernetes Service,但没有指定 ServiceType,这将创建一个 ClusterIP 类型的 Service >。这种服务不允许来自集群外部的请求,例如来自前端应用程序的请求。您需要一种方法来允许来自集群外部的流量。有多种方法可以实现这一目标,具体取决于您的需求。 NodePort 服务类型在静态端口上公开每个节点 IP 上的服务。

假设您创建以下服务

apiVersion: v1
kind: Service
metadata:
name: app1
labels:
app: app1
spec:
type: NodePort
selector:
app: app1
ports:
- protocol: TCP
targetPort: 80 # Port exposed by Pods behind the Service
port: 8080 # Port used when connecting from inside the cluster
nodePort: 30140 # Port used when connecting from outside the cluster
name: http

这样,您的角度应用程序就可以将请求发送到 http://192.168.99.100:30140 ,或者您的 minikube ip 以及已分配为 NodePort 的任何端口(本例中为 30140)。

除了 Services 之外,还有其他方法可以将流量引入集群,例如使用 Ingress 对象。

关于java - kubernetes 中服务的 Java 应用程序中的服务器配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47498957/

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