<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://noname.com.ua/mediawiki/index.php?action=history&amp;feed=atom&amp;title=K8s_Q_A_Secrets</id>
	<title>K8s Q A Secrets - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://noname.com.ua/mediawiki/index.php?action=history&amp;feed=atom&amp;title=K8s_Q_A_Secrets"/>
	<link rel="alternate" type="text/html" href="https://noname.com.ua/mediawiki/index.php?title=K8s_Q_A_Secrets&amp;action=history"/>
	<updated>2026-04-04T06:16:21Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.36.1</generator>
	<entry>
		<id>https://noname.com.ua/mediawiki/index.php?title=K8s_Q_A_Secrets&amp;diff=12408&amp;oldid=prev</id>
		<title>Sirmax в 08:21, 9 января 2024</title>
		<link rel="alternate" type="text/html" href="https://noname.com.ua/mediawiki/index.php?title=K8s_Q_A_Secrets&amp;diff=12408&amp;oldid=prev"/>
		<updated>2024-01-09T08:21:33Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Версия 08:21, 9 января 2024&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;
  &lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 1:&lt;/td&gt;
  &lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 1:&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td colspan=&quot;2&quot; class=&quot;diff-empty&quot;&gt;&amp;#160;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;+&lt;/td&gt;
  &lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Категория:K8s]]&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td colspan=&quot;2&quot; class=&quot;diff-empty&quot;&gt;&amp;#160;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;+&lt;/td&gt;
  &lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Категория:K8s_Вопросы_И_Ответы]]&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td colspan=&quot;2&quot; class=&quot;diff-empty&quot;&gt;&amp;#160;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;+&lt;/td&gt;
  &lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Категория:Требуется форматирование текста]]&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td colspan=&quot;2&quot; class=&quot;diff-empty&quot;&gt;&amp;#160;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;+&lt;/td&gt;
  &lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&amp;#160;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Знакомство с Kubernetes. Часть 14: Секреты (Secrets)&lt;/div&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&amp;#160;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Знакомство с Kubernetes. Часть 14: Секреты (Secrets)&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&amp;#160;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&amp;#160;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Sirmax</name></author>
	</entry>
	<entry>
		<id>https://noname.com.ua/mediawiki/index.php?title=K8s_Q_A_Secrets&amp;diff=12407&amp;oldid=prev</id>
		<title>Sirmax: Новая страница: «Знакомство с Kubernetes. Часть 14: Секреты (Secrets)  Aug 27, 2018 06:06 · 624 words · 3 minute read KUBERNETES В кластере Kuber...»</title>
		<link rel="alternate" type="text/html" href="https://noname.com.ua/mediawiki/index.php?title=K8s_Q_A_Secrets&amp;diff=12407&amp;oldid=prev"/>
		<updated>2024-01-09T08:21:03Z</updated>

		<summary type="html">&lt;p&gt;Новая страница: «Знакомство с Kubernetes. Часть 14: Секреты (Secrets)  Aug 27, 2018 06:06 · 624 words · 3 minute read KUBERNETES В кластере Kuber...»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Знакомство с Kubernetes. Часть 14: Секреты (Secrets)&lt;br /&gt;
&lt;br /&gt;
Aug 27, 2018 06:06 · 624 words · 3 minute read&lt;br /&gt;
KUBERNETES&lt;br /&gt;
В кластере Kubernetes объекты типа секрет (secret) предназначены для хранения конфиденциальной информации, такой как пароли, OAuth-токены или ssh-ключи. Давайте разберемся!&lt;br /&gt;
&lt;br /&gt;
Представление конфиденциальной информации в виде секрета является более безопасным и гибким, чем добавление такой информации в открытом виде при описании контейнера или сборке docker-образа.&lt;br /&gt;
&lt;br /&gt;
Объекты типа секрет могут быть созданы как пользователем, так и системой. Для использования секрета, под (pod) должен на него ссылаться - чаще всего как на файл, находящийся на примонтированном томе. Кроме того, kubelet может использовать секреты при скачивании docker-образов из реджистри.&lt;br /&gt;
&lt;br /&gt;
Kubernetes автоматически создает необходимые ему секреты, которые содержат учетные данные для доступа к API, и автоматически модифицирует созданные поды для использования этого секрета.&lt;br /&gt;
&lt;br /&gt;
Объекты типа секрет могут быть созданы с помощью команды kubectl create secret. Рассмотрим пример - допустим, для подключения к БД из пода необходимы логин и пароль, которые находятся в отдельных файлах:&lt;br /&gt;
&lt;br /&gt;
echo -n 'admin' &amp;gt; ./username.txt&lt;br /&gt;
echo -n 'B7wItYlHeRR1' &amp;gt; ./password.txt&lt;br /&gt;
C помощью данной команды можно преобразовать эти два файла в объект типа секрет:&lt;br /&gt;
&lt;br /&gt;
kubectl create secret generic db-user-pass --from-file=./username.txt --from-file=./password.txt&lt;br /&gt;
secret &amp;quot;db-user-pass&amp;quot; created&lt;br /&gt;
Убедиться, что секрет успешно создан можно так:&lt;br /&gt;
&lt;br /&gt;
kubectl get secrets&lt;br /&gt;
NAME                  TYPE                                  DATA      AGE&lt;br /&gt;
db-user-pass          Opaque                                2         51s&lt;br /&gt;
kubectl describe secrets/db-user-pass&lt;br /&gt;
Name:            db-user-pass&lt;br /&gt;
Namespace:       default&lt;br /&gt;
Labels:          &amp;lt;none&amp;gt;&lt;br /&gt;
Annotations:     &amp;lt;none&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Type:            Opaque&lt;br /&gt;
&lt;br /&gt;
Data&lt;br /&gt;
====&lt;br /&gt;
password.txt:    12 bytes&lt;br /&gt;
username.txt:    5 bytes&lt;br /&gt;
Стоит отметить, что ни get, ни describe не отобразят содержимое данного секрета на экране пользователя - это сделано из соображений безопасности.&lt;br /&gt;
&lt;br /&gt;
Еще один вариант создания секрета - сначала описать его в формате yaml (или json), и только после этого создать секрет. Для этого, каждое используемое значение должно быть закодировано в base64:&lt;br /&gt;
&lt;br /&gt;
echo -n 'admin' | base64&lt;br /&gt;
YWRtaW4=&lt;br /&gt;
echo -n 'B7wItYlHeRR1' | base64&lt;br /&gt;
Qjd3SXRZbEhlUlIx&lt;br /&gt;
Создаем yaml-файл со следующим содержимым:&lt;br /&gt;
&lt;br /&gt;
apiVersion: v1&lt;br /&gt;
kind: Secret&lt;br /&gt;
metadata:&lt;br /&gt;
  name: mysecret&lt;br /&gt;
type: Opaque&lt;br /&gt;
data:&lt;br /&gt;
  username: YWRtaW4=&lt;br /&gt;
  password: Qjd3SXRZbEhlUlIx&lt;br /&gt;
Здесь поле data это map, ключи которого могут содержать буквенно-цифровые последовательности и символы -, _ и ., а значения - необходимые данные, закодированные в base64.&lt;br /&gt;
&lt;br /&gt;
Теперь можно создать секрет с использованием команды kubectl create:&lt;br /&gt;
&lt;br /&gt;
kubectl create -f ./secret.yaml&lt;br /&gt;
secret &amp;quot;mysecret&amp;quot; created&lt;br /&gt;
Получим информацию о только что созданном секрете с помощью kubectl get secret (вывод сокращен):&lt;br /&gt;
&lt;br /&gt;
kubectl get secret mysecret -o yaml&lt;br /&gt;
apiVersion: v1&lt;br /&gt;
data:&lt;br /&gt;
  username: YWRtaW4=&lt;br /&gt;
  password: Qjd3SXRZbEhlUlIx&lt;br /&gt;
kind: Secret&lt;br /&gt;
metadata:&lt;br /&gt;
...&lt;br /&gt;
type: Opaque&lt;br /&gt;
Раскодировать значение из секрета можно, например, так:&lt;br /&gt;
&lt;br /&gt;
echo 'Qjd3SXRZbEhlUlIx' | base64 --decode&lt;br /&gt;
B7wItYlHeRR1&lt;br /&gt;
Секреты могут быть смонтированы как тома данных или определены в качестве переменных окружения для использования в подах. Пример:&lt;br /&gt;
&lt;br /&gt;
apiVersion: v1&lt;br /&gt;
kind: Pod&lt;br /&gt;
metadata:&lt;br /&gt;
  name: mypod&lt;br /&gt;
spec:&lt;br /&gt;
  containers:&lt;br /&gt;
  - name: mypod&lt;br /&gt;
    image: redis&lt;br /&gt;
    volumeMounts:&lt;br /&gt;
    - name: foo&lt;br /&gt;
      mountPath: &amp;quot;/etc/foo&amp;quot;&lt;br /&gt;
      readOnly: true&lt;br /&gt;
  volumes:&lt;br /&gt;
  - name: foo&lt;br /&gt;
    secret:&lt;br /&gt;
      secretName: mysecret&lt;br /&gt;
Если в поде существует несколько контейнеров, которые должны использовать данный секрет, то секцию volumeMounts: следует добавить в описание каждого из них. Есть возможность указания конкретного пути монтирования внутрь контейнера значения отдельного ключа из секрета:&lt;br /&gt;
&lt;br /&gt;
apiVersion: v1&lt;br /&gt;
kind: Pod&lt;br /&gt;
metadata:&lt;br /&gt;
  name: mypod&lt;br /&gt;
spec:&lt;br /&gt;
  containers:&lt;br /&gt;
  - name: mypod&lt;br /&gt;
    image: redis&lt;br /&gt;
    volumeMounts:&lt;br /&gt;
    - name: foo&lt;br /&gt;
      mountPath: &amp;quot;/etc/foo&amp;quot;&lt;br /&gt;
      readOnly: true&lt;br /&gt;
  volumes:&lt;br /&gt;
  - name: foo&lt;br /&gt;
    secret:&lt;br /&gt;
      secretName: mysecret&lt;br /&gt;
      items:&lt;br /&gt;
      - key: username&lt;br /&gt;
        path: my-group/my-username&lt;br /&gt;
В этом примере значение username будет доступно по пути /etc/foo/my-group/my-username вместо /etc/foo/username, а password доступен не будет.&lt;br /&gt;
&lt;br /&gt;
Примечание. Можно задавать права доступа к объектам типа секрет (и даже к отдельным ключам).&lt;br /&gt;
&lt;br /&gt;
Использование секретов как переменных окружения в описании подов выглядит так:&lt;br /&gt;
&lt;br /&gt;
apiVersion: v1&lt;br /&gt;
kind: Pod&lt;br /&gt;
metadata:&lt;br /&gt;
  name: secret-env-pod&lt;br /&gt;
spec:&lt;br /&gt;
  containers:&lt;br /&gt;
  - name: mycontainer&lt;br /&gt;
    image: redis&lt;br /&gt;
    env:&lt;br /&gt;
      - name: SECRET_USERNAME&lt;br /&gt;
        valueFrom:&lt;br /&gt;
          secretKeyRef:&lt;br /&gt;
            name: mysecret&lt;br /&gt;
            key: username&lt;br /&gt;
      - name: SECRET_PASSWORD&lt;br /&gt;
        valueFrom:&lt;br /&gt;
          secretKeyRef:&lt;br /&gt;
            name: mysecret&lt;br /&gt;
            key: password&lt;br /&gt;
  restartPolicy: Never&lt;br /&gt;
После запуска пода в контейнере с именем mycontainer проверим переменные окружения:&lt;br /&gt;
&lt;br /&gt;
echo $SECRET_USERNAME&lt;br /&gt;
admin&lt;br /&gt;
echo $SECRET_PASSWORD&lt;br /&gt;
B7wItYlHeRR1&lt;br /&gt;
Еще один частный случай использования секретов - параметр imagePullSecrets, который содержит пароль для доступа к docker-реджистри. Подробнее о нем можно почитать здесь или здесь.&lt;br /&gt;
&lt;br /&gt;
== imagePullSecrets==&lt;br /&gt;
https://kubernetes.io/docs/concepts/containers/images/#specifying-imagepullsecrets-on-a-pod&lt;br /&gt;
Specifying imagePullSecrets on a Pod&lt;br /&gt;
&lt;br /&gt;
Note: This is the recommended approach to run containers based on images in private registries.&lt;br /&gt;
Kubernetes supports specifying container image registry keys on a Pod. imagePullSecrets must all be in the same namespace as the Pod. The referenced Secrets must be of type kubernetes.io/dockercfg or kubernetes.io/dockerconfigjson.&lt;br /&gt;
&lt;br /&gt;
Creating a Secret with a Docker config&lt;br /&gt;
&lt;br /&gt;
You need to know the username, registry password and client email address for authenticating to the registry, as well as its hostname. Run the following command, substituting the appropriate uppercase values:&lt;br /&gt;
&lt;br /&gt;
kubectl create secret docker-registry &amp;lt;name&amp;gt; \&lt;br /&gt;
  --docker-server=DOCKER_REGISTRY_SERVER \&lt;br /&gt;
  --docker-username=DOCKER_USER \&lt;br /&gt;
  --docker-password=DOCKER_PASSWORD \&lt;br /&gt;
  --docker-email=DOCKER_EMAIL&lt;br /&gt;
If you already have a Docker credentials file then, rather than using the above command, you can import the credentials file as a Kubernetes Secrets.&lt;br /&gt;
Create a Secret based on existing Docker credentials explains how to set this up.&lt;br /&gt;
&lt;br /&gt;
This is particularly useful if you are using multiple private container registries, as kubectl create secret docker-registry creates a Secret that only works with a single private registry.&lt;br /&gt;
&lt;br /&gt;
Note: Pods can only reference image pull secrets in their own namespace, so this process needs to be done one time per namespace.&lt;br /&gt;
Referring to an imagePullSecrets on a Pod&lt;br /&gt;
&lt;br /&gt;
Now, you can create pods which reference that secret by adding an imagePullSecrets section to a Pod definition. Each item in the imagePullSecrets array can only reference a Secret in the same namespace.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
cat &amp;lt;&amp;lt;EOF &amp;gt; pod.yaml&lt;br /&gt;
apiVersion: v1&lt;br /&gt;
kind: Pod&lt;br /&gt;
metadata:&lt;br /&gt;
  name: foo&lt;br /&gt;
  namespace: awesomeapps&lt;br /&gt;
spec:&lt;br /&gt;
  containers:&lt;br /&gt;
    - name: foo&lt;br /&gt;
      image: janedoe/awesomeapp:v1&lt;br /&gt;
  imagePullSecrets:&lt;br /&gt;
    - name: myregistrykey&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
cat &amp;lt;&amp;lt;EOF &amp;gt;&amp;gt; ./kustomization.yaml&lt;br /&gt;
resources:&lt;br /&gt;
- pod.yaml&lt;br /&gt;
EOF&lt;br /&gt;
This needs to be done for each pod that is using a private registry.&lt;br /&gt;
&lt;br /&gt;
However, setting of this field can be automated by setting the imagePullSecrets in a ServiceAccount resource.&lt;br /&gt;
&lt;br /&gt;
Check Add ImagePullSecrets to a Service Account for detailed instructions.&lt;br /&gt;
&lt;br /&gt;
You can use this in conjunction with a per-node .docker/config.json. The credentials will be merged.&lt;/div&gt;</summary>
		<author><name>Sirmax</name></author>
	</entry>
</feed>