ActiveMQ работает в мини-кубе Kubernetes: как настроить пароль администратора - PullRequest
1 голос
/ 06 февраля 2020

Я устанавливаю мини-куб, содержащий очередь сообщений activeMQ вместе с InfluxDB и Grafana.

Для Grafana мне удалось установить пароль администратора через развертывание:

  containers:
  - env:
    - name: GF_INSTALL_PLUGINS
      value: grafana-piechart-panel, blackmirror1-singlestat-math-panel
    - name: GF_SECURITY_ADMIN_USER
      value: <grafanaadminusername>
    - name: GF_SECURITY_ADMIN_PASSWORD
      value: <grafanaadminpassword>
    image: grafana/grafana:6.6.0
    name: grafana
    volumeMounts:
    - mountPath: /etc/grafana/provisioning
      name: grafana-volume
      subPath: provisioning/
    - mountPath: /var/lib/grafana/dashboards
      name: grafana-volume
      subPath: dashboards/
    - mountPath: /etc/grafana/grafana.ini
      name: grafana-volume
      subPath: grafana.ini
      readOnly: true
  restartPolicy: Always
  volumes:
  - name: grafana-volume
    hostPath:
      path: /grafana

Для influenxdb я установил user / passwd с помощью секрета:

apiVersion: v1  

kind: Secret  
metadata:  
  name: influxdb
  namespace: default
type: Opaque  
stringData:  
  INFLUXDB_CONFIG_PATH: /etc/influxdb/influxdb.conf  
  INFLUXDB_ADMIN_USER: <influxdbadminuser>
  INFLUXDB_ADMIN_PASSWORD: <influxdbbadminpassword>
  INFLUXDB_DB: <mydb>

В настоящее время мое развертывание ActiveMQ выглядит следующим образом:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: activemq
spec:
  replicas: 1
  selector:
    matchLabels:
      app: activemq
  template:
    metadata:
      labels:
        app: activemq
    spec:
      containers:
      - name: web
        image: rmohr/activemq:5.15.9
        imagePullPolicy: IfNotPresent
        ports:
          - containerPort: 61616
          - containerPort: 8161
        resources:
          limits:
            memory: 512Mi

Как добиться аналогичного результата (пароль и администратор пользователя через конфигурационный файл) для ActiveMQ? Еще лучше, если это будет достигнуто с помощью зашифрованного секрета, которым я еще не управлял в случае с притоком InfxDB и Grafana

Ответы [ 2 ]

2 голосов
/ 07 февраля 2020

Я бы сделал это следующим образом:

Здесь вы хорошо описали зашифрованные пароли в ActiveMQ .

Сначала вам нужно подготовиться такой зашифрованный пароль. ActiveMQ имеет встроенную утилиту для этого:

Начиная с ActiveMQ 5.4.1, вы можете шифровать свои пароли и безопасно хранить их в файлах конфигурации. Чтобы зашифровать пароль, вы можете использовать только что добавленную команду шифрования, например:

$ bin/activemq encrypt --password activemq --input mypassword
...
Encrypted text: eeWjNyX6FY8Fjp3E+F6qTytV11bZItDp

Где пароль, который вы хотите зашифровать, передается с входным аргументом, а аргумент пароля является секретом, используемым шифровщиком. Аналогичным образом вы можете проверить свои пароли, например:

$ bin/activemq decrypt  --password activemq --input eeWjNyX6FY8Fjp3E+F6qTytV11bZItDp
...
Decrypted text: mypassword

Примечание. Рекомендуется использовать для пароля только буквы алфавита c. Специальные символы, такие как $ / ^ &, не поддерживаются.

Следующим шагом является добавление пароля в соответствующий файл конфигурации, $ ACTIVEMQ_HOME / conf / credentials-ru c .properties по умолчанию.

activemq.username=system
activemq.password=ENC(mYRkg+4Q4hua1kvpCCI2hg==)
guest.password=ENC(Cf3Jf3tM+UrSOoaKU50od5CuBa8rxjoL)
...
jdbc.password=ENC(eeWjNyX6FY8Fjp3E+F6qTytV11bZItDp)

Возможно, вам даже не нужно перестраивать свое изображение, так как оно содержит соответствующий файл конфигурации с зашифрованным паролем. Вы можете добавить его как ConfigMap данные в volume. Вы можете прочитать, как это сделать здесь , поэтому я скорее избегу вставки копий из документации. В качестве альтернативы вы можете использовать секретный том . Это не самый важный момент, так как это просто способ замены вашего исходного файла конфигурации ActiveMQ в вашем Pod вашим файлом пользовательской конфигурации, и вы, вероятно, уже знаете, как это сделать.

На стороне ActiveMQ есть еще один шаг для настройки. Этот файл конфигурации также может быть передан через ConfigMaP, как в предыдущем примере.

Наконец, вам нужно указать загрузчику свойств шифровать переменные при загрузке свойств в память. Вместо стандартного загрузчика свойств мы будем использовать специальный (см. \ $ ACTIVEMQ_HOME / conf / activemq-security. xml) для достижения этого.

<bean id="environmentVariablesConfiguration" class="org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig">
  <property name="algorithm" value="PBEWithMD5AndDES" />
  <property name="passwordEnvName" value="ACTIVEMQ\_ENCRYPTION\_PASSWORD" />
</bean>

<bean id="configurationEncryptor" class="org.jasypt.encryption.pbe.StandardPBEStringEncryptor">
  <property name="config" ref="environmentVariablesConfiguration" />
</bean> 

<bean id="propertyConfigurer" class="org.jasypt.spring31.properties.EncryptablePropertyPlaceholderConfigurer">

  <constructor-arg ref="configurationEncryptor" /> 
  <property name="location" value="file:${activemq.base}/conf/credentials-enc.properties"/> 
</bean>

Таким образом, мы указали нашему ActiveMQ , чтобы загрузить encryptor password из переменной среды ACTIVEMQ_ENCRYPTION_PASSWORD и затем использовать ее для расшифровки паролей из credential-enc.properties file.

Теперь давайте позаботимся о ACTIVEMQ_ENCRYPTION_PASSWORD env var content.

Мы можем установить такую ​​переменную окружения в нашем Pod через Secret. Сначала нам нужно создать один . Затем нам нужно использовать его как переменную окружения .

Надеюсь, это поможет.

1 голос
/ 07 февраля 2020

Кажется, что этот активный mq dockerfile не дает много в этом отношении. Но он отмечает, что вы можете указать расположение файлов конфигурации в хост-системе. Вам необходимо подготовить эти файлы:

По умолчанию данные и конфигурация хранятся внутри контейнера и будут потеряны после его закрытия и удаления. Чтобы сохранить эти файлы, вы можете смонтировать эти каталоги в каталоги вашей хост-системы:

docker run -p 61616:61616 -p 8161:8161 \
           -v /your/persistent/dir/conf:/opt/activemq/conf \
           -v /your/persistent/dir/data:/opt/activemq/data \
           rmohr/activemq

Но может быть, вы можете использовать другую активную реализацию контейнера mq? Похоже, что этот предоставляет конфигурацию учетных данных через переменные окружения так же, как вы используете для других контейнеров: https://hub.docker.com/r/webcenter/activemq

...