为运行java映像的POD启用rest通信
这就是设置:为运行java映像的POD启用rest通信,java,docker,kubernetes,microservices,Java,Docker,Kubernetes,Microservices,这就是设置: 每个pod将运行一个容器(java应用程序) 每个pod都提供自己的UI 每个java应用程序都需要访问一个mysql数据库 对于每个java应用程序,都需要使用rest调用检索和提供信息 它是一种典型的容器化微服务体系结构 要求是使应用程序能够请求并为运行在不同POD上的其他应用程序提供信息。但由于我需要在将这些调用推送到集群之前设置它们,老实说,我不知道它应该如何工作 例如,我有一个应用程序正在使用另一个rest接口请求数据: public List<Article&
- 每个pod将运行一个容器(java应用程序)
- 每个pod都提供自己的UI
- 每个java应用程序都需要访问一个mysql数据库
- 对于每个java应用程序,都需要使用rest调用检索和提供信息
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();
}
public List getArticles(){
字符串url=http://ip:port/article/getAllArticles/;
HttpEntity=prepareHttpEntity();
ResponseEntity response=restemplate.exchange(url,HttpMethod.GET,entity,List.class);
返回response.getBody();
}
我如何确保它连接到正确的服务(pod)?
DB设置也一样。我需要告诉应用程序数据源
,这是未知的
是否有某种最佳实践来处理这些问题?每个Pod在创建时都有自己的群集专用IP,但您永远不会依赖它,因为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
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
因此,您连接Pod和服务的方式是通过标签和选择器。现在,您可以使用以下url点击pod:
http://serviceA:80
在第二个应用程序中,您将具有以下Pod定义:
kind: Service
apiVersion: v1
metadata:
name: serviceA
spec:
selector:
app: appA
ports:
- name: serviceAPort
protocol: TCP
port: 80
targetPort: 8080
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();
}
@Value(${appA.baseUrl})
字符串地址;
公共列表,而不是Pod,因为它为您提供了更多的灵活性和对容器的控制
如果要对数据库进行容器化,那么您可能需要签出每个Pod在创建时都有自己的集群专用IP,但您永远不会依赖它,因为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
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
因此,您连接Pod和服务的方式是通过标签和选择器。现在,您可以使用以下url点击pod:
http://serviceA:80
在第二个应用程序中,您将具有以下Pod定义:
kind: Service
apiVersion: v1
metadata:
name: serviceA
spec:
selector:
app: appA
ports:
- name: serviceAPort
protocol: TCP
port: 80
targetPort: 8080
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();
}
@Value(${appA.baseUrl})
字符串地址;
公共列表,而不是Pod,因为它为您提供了更多的灵活性和对容器的控制
如果您要将数据库容器化,那么您可能需要签出