gpt4 book ai didi

java - 为运行 java 镜像的 pod 启用其余通信

转载 作者:行者123 更新时间:2023-12-01 19:44:50 24 4
gpt4 key购买 nike

所以,这是设置:

  • 每个 Pod 将运行一个容器(Java 应用程序)
  • 每个 Pod 都提供自己的 UI
  • 对于每个 Java 应用程序,都有一个需要访问的 mysql 数据库
  • 对于每个 Java 应用程序,都需要使用剩余调用来检索和提供信息

这是某种经典的容器化微服务架构。

要求是使应用程序能够请求并为在不同 Pod 上运行的其他应用程序提供信息。但是,由于我需要在将这些调用推送到我拥有的集群之前设置这些调用,因此说实话,不知道它应该如何工作。

例如我有一个应用程序正在使用另一个休息接口(interface)来请求数据:

public List<Article> getArticles() {
String url = http://ip:port/article/getAllArticles/;
HttpEntity entity = prepareHttpEntity();
ResponseEntity<List> response = restTemplate.exchange(url, HttpMethod.GET, entity, List.class);
return response.getBody();
}

我如何确保它连接到正确的服务(pod)?

数据库设置相同。我需要告诉应用程序数据源,该数据源尚不清楚。

是否有某种最佳实践来处理这些问题?

最佳答案

每个Pod在创建时都会有自己的集群专用IP,但您永远不会依赖它,因为Pod是短暂的。如果您想与 Pod 对话,您可以创建一个 Service将流量路由到 Pod。

restCall --> Service --> Pod

假设您有以下 Pod 定义

apiVersion: v1
kind: Pod
metadata:
name: appAPod
labels:
app: appA
spec:
containers:
- name: aNameForApp1Container
image: yourRepository/imageName:tag
ports:
- containerPort: 8080
...

然后,您可以通过创建服务定义来使其可访问:

kind: Service
apiVersion: v1
metadata:
name: serviceA
spec:
selector:
app: appA
ports:
- name: serviceAPort
protocol: TCP
port: 80
targetPort: 8080

因此,连接 PodService 的方式是通过标签选择器。现在,您可以使用以下 url 访问您的 pod:

http://serviceA:80

在您的第二个应用程序中,您将具有以下 Pod 定义:

apiVersion: v1
kind: Pod
metadata:
name: appBPod
labels:
app: appB
spec:
containers:
- name: aNameForApp2Container
image: yourRepository/imageName2:tag
ports:
- containerPort: 8080
env:
- name: "APP_A_ADDRESS"
value: serviceA
- name: "APP_A_PORT"
value: 80

由于您使用的是 RestTemplate,我假设您正在使用 Spring。所以在你的 application.properties 中:

..
..
appA.baseUrl=http://${APP_A_ADDRESS}:${APP_A_PORT}

在你的代码中:

@Value("${appA.baseUrl}")
String appABaseUrl;

public List<Article> getArticles() {
String url = appABaseUrl + "/article/getAllArticles/";
HttpEntity entity = prepareHttpEntity();
ResponseEntity<List> response = restTemplate.exchange(url, HttpMethod.GET, entity, List.class);
return response.getBody();
}
<小时/>

您应该考虑Deplyments ,而不是 Pod,因为它为您提供了更大的灵 active 和对容器的控制。

如果您要将数据库容器化,那么您可能需要查看 Persistent Volume

关于java - 为运行 java 镜像的 pod 启用其余通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53794602/

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