# Керування Secret за допомогою Kustomize

> Створення обʼєктів Secret за допомогою файлу kustomization.yaml.

---

LLMS index: [llms.txt](/llms.txt)

---

<!-- overview -->

`kubectl` підтримує використання [інструменту керування обʼєктами Kustomize](/docs/tasks/manage-kubernetes-objects/kustomization/) для керування Secret та ConfigMap. Ви можете створити *генератор ресурсів* за допомогою Kustomize, який створює Secret, який ви можете застосувати до сервера API за допомогою `kubectl`.

## Перш ніж ви розпочнете

<p>Вам треба мати кластер Kubernetes, а також інструмент командного рядка kubectl має бути налаштований для роботи з вашим кластером. Рекомендується виконувати ці настанови у кластері, що має щонайменше два вузли, які не виконують роль вузлів управління. Якщо у вас немає кластера, ви можете створити його, за допомогою <a href="https://minikube.sigs.k8s.io/docs/tutorials/multi_node/">minikube</a> або використовувати одну з цих пісочниць:</p>
<ul>
<li><a href="https://labs.iximiuz.com/playgrounds?category=kubernetes&filter=all">iximiuz Labs</a></li>
<li><a href="https://killercoda.com/playgrounds/scenario/kubernetes">Killercoda</a></li>
<li><a href="https://kodekloud.com/public-playgrounds">KodeKloud</a></li>
</ul>


<!-- steps -->

## Створення Secret {#create-a-secret}

Ви можете створити Secret, визначивши `secretGenerator` у файлі `kustomization.yaml`, який посилається на інші наявні файли, файли `.env` або літеральні значення. Наприклад, наведені нижче інструкції створюють файл конфігурації kustomization для імені користувача `admin` та пароля `1f2d1e2e67df`.


<div class="alert alert-info" role="note"><h4 class="alert-heading">Примітка:</h4>Поле <code>stringData</code> для Secret погано працює із застосуванням на стороні сервера.</div>


### Створення файлу kustomization {#create-the-kustomization-file}

<ul class="nav nav-tabs" id="tabs-secret-data" role="tablist"><li class="nav-item"><a data-bs-toggle="tab" class="nav-link active" href="#tabs-secret-data-0" role="tab" aria-controls="tabs-secret-data-0" aria-selected="true">Літерали</a></li>
	  
		<li class="nav-item"><a data-bs-toggle="tab" class="nav-link" href="#tabs-secret-data-1" role="tab" aria-controls="tabs-secret-data-1">Файли</a></li>
		<li class="nav-item"><a data-bs-toggle="tab" class="nav-link" href="#tabs-secret-data-2" role="tab" aria-controls="tabs-secret-data-2">.env файли</a></li></ul>

<div class="tab-content" id="tabs-secret-data-content"><div class="tab-body tab-pane fadeshow active"
        id="tabs-secret-data-0" role="tabpanel" aria-labelledby="tabs-secret-data-0-tab" tabindex="secret-data"><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">secretGenerator</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl">- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">database-creds</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">literals</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span>- <span class="l">username=admin</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span>- <span class="l">password=1f2d1e2e67df</span><span class="w">
</span></span></span></code></pre></div></div><div class="tab-body tab-pane fade"
        id="tabs-secret-data-1" role="tabpanel" aria-labelledby="tabs-secret-data-1-tab" tabindex="secret-data"><ol>
<li>
<p>Збережіть дані доступу у файлах. Назви файлів є ключами секрету:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="nb">echo</span> -n <span class="s1">&#39;admin&#39;</span> &gt; ./username.txt
</span></span><span class="line"><span class="cl"><span class="nb">echo</span> -n <span class="s1">&#39;1f2d1e2e67df&#39;</span> &gt; ./password.txt
</span></span></code></pre></div><p>Прапорець <code>-n</code> забезпечує відсутність символу нового рядка в кінці ваших
файлів.</p>
</li>
<li>
<p>Створіть файл <code>kustomization.yaml</code>:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">secretGenerator</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl">- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">database-creds</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">files</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span>- <span class="l">username.txt</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span>- <span class="l">password.txt</span><span class="w">
</span></span></span></code></pre></div></li>
</ol>
</div><div class="tab-body tab-pane fade"
        id="tabs-secret-data-2" role="tabpanel" aria-labelledby="tabs-secret-data-2-tab" tabindex="secret-data"><p>Ви також можете визначити <code>secretGenerator</code> у файлі <code>kustomization.yaml</code>, надаючи файли <code>.env</code>. Наприклад, наступний файл <code>kustomization.yaml</code> використовує дані з файлу <code>.env.secret</code>:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">secretGenerator</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl">- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">db-user-pass</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">envs</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span>- <span class="l">.env.secret</span><span class="w">
</span></span></span></code></pre></div></div></div>


У всіх випадках вам не потрібно кодувати значення base64. Імʼя YAML файлу **має** бути `kustomization.yaml` або `kustomization.yml`.

### Застосування файлу kustomization {#apply-the-kustomization-file}

Для створення Secret застосуйте теку, яка містить файл kustomization:

```shell
kubectl apply -k <directory-path>
```

Вивід буде подібний до:

```none
secret/database-creds-5hdh7hhgfk created
```

Коли Secret генерується, імʼя Secret створюється шляхом хешування даних Secret і додавання до нього значення хешу. Це забезпечує, що при зміні даних генерується новий Secret.

Щоб перевірити, що Secret був створений та розкодувати дані Secret,

```shell
kubectl get -k <directory-path> -o jsonpath='{.data}'
```

Вивід буде подібний до:

```none
{ "password": "MWYyZDFlMmU2N2Rm", "username": "YWRtaW4=" }
```

```shell
echo 'MWYyZDFlMmU2N2Rm' | base64 --decode
```

Вивід буде подібний до:

```none
1f2d1e2e67df
```

Для отримання додаткової інформації див. [Керування Secret за допомогою kubectl](/docs/tasks/configmap-secret/managing-secret-using-kubectl/#verify-the-secret) та [Декларативне керування обʼєктами Kubernetes за допомогою Kustomize](/docs/tasks/manage-kubernetes-objects/kustomization/).

## Редагування Secret {#edit-secret}

1. У вашому файлі `kustomization.yaml` змініть дані, наприклад, `password`.
1. Застосуйте теку, який містить файл kustomization:

    ```shell
    kubectl apply -k <directory-path>
    ```

    Вивід буде подібний до:

    ```none
    secret/db-user-pass-6f24b56cc8 created
    ```

Змінений Secret створюється як новий обʼєкт `Secret`, а не оновлюється наявний обʼєкт `Secret`. Можливо, вам знадобиться оновити посилання на Secret у ваших контейнерах.

## Прибирання {#clean-up}

Для видалення Secret використовуйте `kubectl`:

```shell
kubectl delete secret db-user-pass
```

## Що далі

- Дізнайтеся більше про [концепцію Secret](/docs/concepts/configuration/secret/)
- Дізнайтесь, як [керувати Secret за допомогою kubectl](/docs/tasks/configmap-secret/managing-secret-using-kubectl/)
- Дізнайтесь, як [керувати Secret за допомогою файлу конфігурації](/docs/tasks/configmap-secret/managing-secret-using-config-file/)
