# Gerenciando Secret usando Arquivo de Configuração

> Criando objetos Secret usando arquivos de configuração de recursos.

---

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

---

<!-- overview -->

## Antes de você começar

<p>Você precisa ter um cluster do Kubernetes e a ferramenta de linha de comando kubectl deve estar configurada para se comunicar com seu cluster. É recomendado executar esse tutorial em um cluster com pelo menos dois nós que não estejam atuando como hosts de camada de gerenciamento. Se você ainda não possui um cluster, pode criar um usando o <a href="/pt-br/docs/tasks/tools/#minikube">minikube</a> ou pode usar um dos seguintes ambientes:</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 -->

## Crie o arquivo de configuração

Você pode criar um Secret primeiramente em um arquivo, no formato JSON ou YAML, e depois
criar o objeto. O recurso [Secret](/docs/reference/generated/kubernetes-api/v1.36/#secret-v1-core)
contém dois mapas: `data` e `stringData`.
O campo `data` é usado para armazenar dados arbitrários, codificados usando base64. O
campo `stringData` é usado por conveniência, e permite que você use dados para um Secret
como *strings* não codificadas.
As chaves para `data` e `stringData` precisam ser compostas por caracteres alfanuméricos,
`_`, `-` ou `.`.

Por exemplo, para armazenar duas strings em um Secret usando o campo `data`, converta
as strings para base64 da seguinte forma:

```shell
echo -n 'admin' | base64
```
A saída deve ser similar a:

```
YWRtaW4=
```

```shell
echo -n '1f2d1e2e67df' | base64
```

A saída deve ser similar a:

```
MWYyZDFlMmU2N2Rm
```

Escreva o arquivo de configuração do Secret, que será parecido com:
```yaml
apiVersion: v1
kind: Secret
metadata:
  name: mysecret
type: Opaque
data:
  username: YWRtaW4=
  password: MWYyZDFlMmU2N2Rm
```

Perceba que o nome do objeto Secret precisa ser um 
[nome de subdomínio DNS](/pt-br/docs/concepts/overview/working-with-objects/names#dns-subdomain-names) válido.


<div class="alert alert-info" role="note"><h4 class="alert-heading">Nota</h4>Os valores serializados dos dados JSON e YAML de um Secret são codificados em strings
base64. Novas linhas não são válidas com essas strings e devem ser omitidas. Quando
usar o utilitário <code>base64</code> em Darwin/MacOS, os usuários devem evitar usar a opção <code>-b</code>
para separar linhas grandes. Por outro lado, usuários de Linux <em>devem</em> adicionar a opção
<code>-w 0</code> ao comando <code>base64</code> ou o <em>pipe</em> <code>base64 | tr -d '\n'</code> se a opção <code>w</code> não estiver disponível</div>


Para cenários específicos, você pode querer usar o campo `stringData` ao invés de `data`.
Esse campo permite que você use strings não-base64 diretamente dentro do Secret, 
e a string vai ser codificada para você quando o Secret for criado ou atualizado.

Um exemplo prático para isso pode ser quando você esteja fazendo *deploy* de uma aplicação
que usa um Secret para armazenar um arquivo de configuração, e você quer popular partes desse
arquivo de configuração durante o processo de implantação.

Por exemplo, se sua aplicação usa o seguinte arquivo de configuração:

```yaml
apiUrl: "https://my.api.com/api/v1"
username: "<user>"
password: "<password>"
```

Você pode armazenar isso em um Secret usando a seguinte definição:

```yaml
apiVersion: v1
kind: Secret
metadata:
  name: mysecret
type: Opaque
stringData:
  config.yaml: |
    apiUrl: "https://my.api.com/api/v1"
    username: <user>
    password: <password>
```

## Crie o objeto Secret

Agora, crie o Secret usando [`kubectl apply`](/docs/reference/generated/kubectl/kubectl-commands#apply):

```shell
kubectl apply -f ./secret.yaml
```

A saída deve ser similar a:

```
secret/mysecret created
```

## Verifique o Secret

O campo `stringData` é um campo de conveniência apenas de leitura. Ele nunca vai ser exibido
ao buscar um Secret. Por exemplo, se você executar o seguinte comando:

```shell
kubectl get secret mysecret -o yaml
```

A saída deve ser similar a:

```yaml
apiVersion: v1
kind: Secret
metadata:
  creationTimestamp: 2018-11-15T20:40:59Z
  name: mysecret
  namespace: default
  resourceVersion: "7225"
  uid: c280ad2e-e916-11e8-98f2-025000000001
type: Opaque
data:
  config.yaml: YXBpVXJsOiAiaHR0cHM6Ly9teS5hcGkuY29tL2FwaS92MSIKdXNlcm5hbWU6IHt7dXNlcm5hbWV9fQpwYXNzd29yZDoge3twYXNzd29yZH19
```

Os comandos `kubectl get` e `kubectl describe` omitem o conteúdo de um `Secret` por padrão.
Isso para proteger o `Secret` de ser exposto acidentalmente para uma pessoa não autorizada,
ou ser armazenado em um log de terminal.
Para verificar o conteúdo atual de um dado codificado, veja [decodificando secret](/docs/tasks/configmap-secret/managing-secret-using-kubectl/#decoding-secret).

Se um campo, como `username`, é especificado em `data` e `stringData`,
o valor de `stringData` é o usado. Por exemplo, dada a seguinte definição do Secret:

```yaml
apiVersion: v1
kind: Secret
metadata:
  name: mysecret
type: Opaque
data:
  username: YWRtaW4=
stringData:
  username: administrator
```

Resulta no seguinte Secret:

```yaml
apiVersion: v1
kind: Secret
metadata:
  creationTimestamp: 2018-11-15T20:46:46Z
  name: mysecret
  namespace: default
  resourceVersion: "7579"
  uid: 91460ecb-e917-11e8-98f2-025000000001
type: Opaque
data:
  username: YWRtaW5pc3RyYXRvcg==
```

Onde `YWRtaW5pc3RyYXRvcg==` é decodificado em `administrator`.

## Limpeza

Para apagar o Secret que você criou:

```shell
kubectl delete secret mysecret
```

## Próximos passos

- Leia mais sobre o [conceito do Secret](/docs/concepts/configuration/secret/)
- Leia sobre como [gerenciar Secret com o comando `kubectl`](/docs/tasks/configmap-secret/managing-secret-using-kubectl/)
- Leia sobre como [gerenciar Secret usando kustomize](/docs/tasks/configmap-secret/managing-secret-using-kustomize/)
