Каждый Pod при создании будет иметь свой собственный частный IP-адрес кластера, но вы никогда не будете зависеть от него, так как pods ephemeral .Если вы хотите поговорить с 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
Таким образом, вы подключаете Pod и Service через метки и селектор .Теперь вы можете поразить ваш модуль следующим URL:
http://serviceA:80
Во втором приложении у вас будет следующее определение модуля:
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, какон предлагает вам больше гибкости и контроля над вашими контейнерами.
Если вы собираетесь контейнировать свою БД, то вы можете проверить Постоянный том