Чтение файла конфигурации из kubernetes с использованием configMap и Volumes - PullRequest
0 голосов
/ 22 апреля 2020

Так что я изо всех сил пытаюсь прочитать файл xml из kubernetes. Я использую сервер с открытой свободой и упакованное военное приложение maven. что мне нужно изменить из моего Java кода, чтобы я мог читать файл из kubernetes.

Проблема здесь в том, что код читает pdp. xml из папки ресурсов внутри файла war, а не извне в томе kubernetes.

Моя карта конфигурации выглядит следующим образом

kind: ConfigMap
apiVersion: v1
metadata:
  name: testing-config
data:
  pdp.xml: |
   <pdp    xmlns="http://authzforce.github.io/core/xmlns/pdp/7"
           xmlns:att="za.co.some.data"
           xmlns:xacml="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17"
           version="7.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   </pdp>

Вот файл yaml с томами

apiVersion: apps/v1
kind: Deployment
metadata:
  name: testing-app
  labels:
    app: testing-app
spec:
  replicas: 1
  selector:
    matchLabels:
      app: testing-app
  template:
    metadata:
      labels:
        app: testing-app
    spec:
      containers:
      - name: testing-app
        image: testing-app:1.0.24-SNAPSHOT
        imagePullPolicy: Always
        volumeMounts:
        - name: testing-app-volume
          mountPath: /config/pdp.xml
          subPath: pdp.xml
          readOnly: true
      volumes:
      - name: testing-app-volume
        configMap:
          name: testing-app-config
      restartPolicy: Always

Я не очень хорошо знаю Java, но вот как я читаю файл.

Resource resource = new ClassPathResource("pdp.xml");
InputStream cfgFile = null;
byte[] buffer = null;
try {
  cfgFile = resource.getInputStream();
  buffer = new byte[cfgFile.available()];
} catch (IOException e) {
  log.error(ERROR_MESSAGE);
  throw new IllegalStateException(ERROR_MESSAGE);
}

это структура папок внутри контейнера

enter image description here

1 Ответ

0 голосов
/ 22 апреля 2020

Очень просто. Просто прочитайте файл из того же места, куда вы монтируете его: /config/pdp.xml.

Итак, в вашем коде:

Resource resource = new ClassPathResource("/config/pdp.xml");
InputStream cfgFile = null;
byte[] buffer = null;
try {
  cfgFile = resource.getInputStream();
  buffer = new byte[cfgFile.available()];
} catch (IOException e) {
  log.error(ERROR_MESSAGE);
  throw new IllegalStateException(ERROR_MESSAGE);
}

... или смонтируйте его в каталог приложения читает с: mountPath: /liberty/usr/servers/defaultServer/pdp.xml

...