# Добавление новых нод в кластер с настроенным security

**URL:** <https://discuss.elastic.co/t/security/241172>\
**Category:** Вопросы на русском языке\
**Created:** [July 14, 2020, 5:27pm UTC](https://discuss.elastic.co/t/security/241172 "2020-07-14T17:27:01Z")\
**Posts on this page:** 12\
**Page:** 1

<div class="post-metadata">

**Author:** ![Sergei\_Frolov](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/sergei_frolov/32/47922_2.png) [@Sergei\_Frolov](https://discuss.elastic.co/u/Sergei_Frolov)\
**Post date:** [July 14, 2020, 5:27pm UTC](https://discuss.elastic.co/t/security/241172/1 "2020-07-14T17:27:02Z")

</div>

Добрый день!

Есть кластер из 8 нод (5 дата-нод, 3 мастер-ноды). Появилась необходимость добавить еще 5 дата-нод.

Security настраивал по инструкции, сертификаты генерил так:

`elasticsearch-certutil cert ca --pem --in instances.yml --out certs.zip --days 9999`

`instances.yml` выглядит примерно так:

```auto
instances:
  - name: 'es-master1'
    dns: ['es-master1.ru']
  - name: 'es-master2'
    dns: ['es-master2.ru']
  - name: 'es-master3'
    dns: ['es-master3a.ru']

```

Как добавить ноды в кластер, подскажите пожалуйста? Нужен ли рестарт всего кластера после добавления новых нод? Всем нодам (и дата, и мастерам) нужно прописывать новые ноды в конфигах, или достаточно только одинакового имени кластера у всех?

---

<div class="post-metadata">

**Author:** ![Igor\_Motov](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/igor_motov/32/45193_2.png) [@Igor\_Motov](https://discuss.elastic.co/u/Igor_Motov)\
**Post date:** [July 14, 2020, 6:44pm UTC](https://discuss.elastic.co/t/security/241172/2 "2020-07-14T18:44:37Z")

</div>

Какая версия?

---

<div class="post-metadata">

**Author:** ![Sergei\_Frolov](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/sergei_frolov/32/47922_2.png) [@Sergei\_Frolov](https://discuss.elastic.co/u/Sergei_Frolov)\
**Post date:** [July 14, 2020, 7:28pm UTC](https://discuss.elastic.co/t/security/241172/3 "2020-07-14T19:28:02Z")

</div>

Версия 7.7.1

---

<div class="post-metadata">

**Author:** ![Igor\_Motov](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/igor_motov/32/45193_2.png) [@Igor\_Motov](https://discuss.elastic.co/u/Igor_Motov)\
**Post date:** [July 14, 2020, 7:44pm UTC](https://discuss.elastic.co/t/security/241172/4 "2020-07-14T19:44:06Z")

</div>

> Как добавить ноды в кластер, подскажите пожалуйста?

Посмотрите [документацию](https://www.elastic.co/guide/en/elasticsearch/reference/7.7/encrypting-communications-hosts.html)

> Нужен ли рестарт всего кластера после добавления новых нод?

Если вы используете старый CA, то не надо. В противном случае, посмотрите [эту дискуссию](https://discuss.elastic.co/t/data/207533).

---

<div class="post-metadata">

**Author:** ![Sergei\_Frolov](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/sergei_frolov/32/47922_2.png) [@Sergei\_Frolov](https://discuss.elastic.co/u/Sergei_Frolov)\
**Post date:** [July 14, 2020, 8:06pm UTC](https://discuss.elastic.co/t/security/241172/5 "2020-07-14T20:06:18Z")

</div>

> [@Igor\_Motov](#):
>
> Если вы используете старый CA, то не надо

`ca.crt` есть - получается нужно добавить только на каждую ноду в конфиг `elasticsearch.yml` в `discovery.seed_hosts` новые ноды и все - ноды появятся в кластере без рестарта?

---

<div class="post-metadata">

**Author:** ![Igor\_Motov](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/igor_motov/32/45193_2.png) [@Igor\_Motov](https://discuss.elastic.co/u/Igor_Motov)\
**Post date:** [July 14, 2020, 8:47pm UTC](https://discuss.elastic.co/t/security/241172/6 "2020-07-14T20:47:29Z")

</div>

Да. Более того `discovery.seed_hosts` нужен будет только, если надо узлы перестартовать. Пока узлы подсоединены к кластеру, они о новых узлах от мастер-узла узнают.

---

<div class="post-metadata">

**Author:** ![Sergei\_Frolov](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/sergei_frolov/32/47922_2.png) [@Sergei\_Frolov](https://discuss.elastic.co/u/Sergei_Frolov)\
**Post date:** [July 21, 2020, 11:05pm UTC](https://discuss.elastic.co/t/security/241172/7 "2020-07-21T23:05:09Z")

</div>

Все же так и не получается выпустить сертификаты для новых нод.

Как я делаю:

1. Установить Elasticsearch на ноды
2. Сгенерим сертификаты:

сделаем новый `new_instances.yml` с добавляемыми хостами:

```
instances:
  - name: 'ws-search-elk4a.blabla.ru'
    dns: ['ws-search-elk4a.blabla.ru']
  - name: 'ws-search-elk5a.blabla.ru'
    dns: ['ws-search-elk5a.blabla.ru']

```

и затем:

`sudo /usr/share/elasticsearch/bin/elasticsearch-certutil cert --ca /etc/elasticsearch/certs/ca/ca.crt --in /home/s.frolov/new_instances.yml --out /home/s.frolov/new_cert.zip`

у меня просит пароль и выдает ошибку:

```
Enter password for CA (/etc/elasticsearch/certs/ca/ca.crt) :
Exception in thread "main" java.io.IOException: toDerInputStream rejects tag type 45
	at java.base/sun.security.util.DerValue.toDerInputStream(DerValue.java:860)
	at java.base/sun.security.pkcs12.PKCS12KeyStore.engineLoad(PKCS12KeyStore.java:1982)
	at java.base/sun.security.util.KeyStoreDelegator.engineLoad(KeyStoreDelegator.java:220)
	at java.base/java.security.KeyStore.load(KeyStore.java:1472)
	at org.elasticsearch.xpack.core.ssl.CertParsingUtils.readKeyStore(CertParsingUtils.java:75)
	at org.elasticsearch.xpack.core.ssl.CertParsingUtils.readKeyPairsFromKeystore(CertParsingUtils.java:141)
	at org.elasticsearch.xpack.core.ssl.CertParsingUtils.readPkcs12KeyPairs(CertParsingUtils.java:134)
	at org.elasticsearch.xpack.security.cli.CertificateTool$CertificateCommand.lambda$loadPkcs12CA$1(CertificateTool.java:342)
	at org.elasticsearch.xpack.security.cli.CertificateTool.withPassword(CertificateTool.java:933)
	at org.elasticsearch.xpack.security.cli.CertificateTool.access$100(CertificateTool.java:85)
	at org.elasticsearch.xpack.security.cli.CertificateTool$CertificateCommand.loadPkcs12CA(CertificateTool.java:341)
	at org.elasticsearch.xpack.security.cli.CertificateTool$CertificateCommand.getCAInfo(CertificateTool.java:329)
	at org.elasticsearch.xpack.security.cli.CertificateTool$GenerateCertificateCommand.execute(CertificateTool.java:685)
	at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:86)
	at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:127)
	at org.elasticsearch.cli.MultiCommand.execute(MultiCommand.java:91)
	at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:127)
	at org.elasticsearch.cli.Command.main(Command.java:90)
	at org.elasticsearch.xpack.security.cli.CertificateTool.main(CertificateTool.java:137)

```

пароля у меня точно нет.

Подскажите, как это сделать? Мне не нужно генерить новый ca.crt, а воспользоваться старым. Его я генерировал без пароля, пример находится в первом посте.

---

<div class="post-metadata">

**Author:** ![Sergei\_Frolov](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/sergei_frolov/32/47922_2.png) [@Sergei\_Frolov](https://discuss.elastic.co/u/Sergei_Frolov)\
**Post date:** [July 22, 2020, 11:36am UTC](https://discuss.elastic.co/t/security/241172/8 "2020-07-22T11:36:24Z")

</div>

> [@Igor\_Motov](#):
>
> В противном случае, посмотрите [эту дискуссию](https://discuss.elastic.co/t/data/207533)

Игорь, делаю как тут описано:

` /usr/share/elasticsearch/bin/elasticsearch-certutil cert --ca /etc/elasticsearch/certs/ca/ca.crt --dns "ws-search-elk4a.blabla.ru"`

но у меня опять же просит пароль:

`Enter password for CA (/etc/elasticsearch/certs/ca/ca.crt) :`

Серты я генерил без пароля. Мне нужно добавить ноду в уже имеющийся кластер, со старым CA

вот похожая проблема на форуме, без ответа:

> [@Problem adding nodes to an elasticsearch cluster using SSL, TLS and HTTPS](https://discuss.elastic.co/t/problem-adding-nodes-to-an-elasticsearch-cluster-using-ssl-tls-and-https/223270):
>
> Hi. I have a cluster under development for testing, and now I have implemented SSL, TLS and HTTPS following this link: "[https://www.elastic.co/es/blog/configuring-ssl-tls-and-https-to](https://www.elastic.co/es/blog/configuring-ssl-tls-and-https-to) -secure-elasticsearch-kibana-beats-and-logstash ". Everything works correctly, but when you want to add a new node, it doesn't work. I understand that for the new node I must create other file.crt and file.key using the same ca.crt that was generated at startup. To do this I use the following command ./bin/elasti…

---

<div class="post-metadata">

**Author:** ![Igor\_Motov](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/igor_motov/32/45193_2.png) [@Igor\_Motov](https://discuss.elastic.co/u/Igor_Motov)\
**Post date:** [July 22, 2020, 4:09pm UTC](https://discuss.elastic.co/t/security/241172/9 "2020-07-22T16:09:09Z")

</div>

`--pem` генерирует ключи в формате PEM. `--ca` ожидает ключ в формате `PKCS#12`. Для использования в формате PEM, надо задать `--ca-crt` вместо `--ca`, но он потребует от вас тк же задать`--ca-key`, которого у вас может не быть, если вы не генерировали сертификат с параметром `--keep-ca-key`.

---

<div class="post-metadata">

**Author:** ![Sergei\_Frolov](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/sergei_frolov/32/47922_2.png) [@Sergei\_Frolov](https://discuss.elastic.co/u/Sergei_Frolov)\
**Post date:** [July 22, 2020, 4:24pm UTC](https://discuss.elastic.co/t/security/241172/10 "2020-07-22T16:24:13Z")

</div>

Игорь, спасибо за ответ!

Да, видимо моя проблема в том, что у меня нет `ca.key`.

Я генерил ключи так:

`elasticsearch-certutil cert ca --pem --in instances.yml --out certs.zip --days 9999`

и в архиве был только `ca.crt`.

Получается что теперь я на старый CA не смогу добавить новые ноды? Но как бы мне сделать добавление нод максимально "бесшовным" в моей ситуации? Выпустить новые серты для всех 5 нод, а потом добавить два `ca.crt` в `elasticsearch.yml` в

`xpack.security.http.ssl.certificate_authorities` и в `xpack.security.transport.ssl.certificate_authorities` - а потом перезапускать ноды по одной, и удалять старый `ca.crt`?

Мне бы сделать это без полного перезапуска кластера, по одной ноде.

---

<div class="post-metadata">

**Author:** ![Igor\_Motov](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/igor_motov/32/45193_2.png) [@Igor\_Motov](https://discuss.elastic.co/u/Igor_Motov)\
**Post date:** [July 22, 2020, 4:53pm UTC](https://discuss.elastic.co/t/security/241172/11 "2020-07-22T16:53:35Z")

</div>

> [@Sergei\_Frolov](#):
>
> Получается что теперь я на старый CA не смогу добавить новые ноды?

Для этого нужен private key, которого у вас нет.

> [@Sergei\_Frolov](#):
>
> Но как бы мне сделать добавление нод максимально "бесшовным" в моей ситуации? Выпустить новые серты для всех 5 нод,

Зачем для всех 5? Можно только для новых и постараться при этом сохранить private key, чтобы больше такая ситуация не повторилась.

> [@Sergei\_Frolov](#):
>
> а потом перезапускать ноды по одной, и удалять старый `ca.crt` ?

Зачем надо удалять старый сертификат? Можно просто дать всем и старый и новый. И в последующем использовать только новый для новых узлов, пока старые узлы не отомрут.

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)\
**Post date:** [August 19, 2020, 4:53pm UTC](https://discuss.elastic.co/t/security/241172/12 "2020-08-19T16:53:55Z")

</div>

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.
