====== Ресурсы (ConfigMaps/Secrets) ======
===== Secrets =====
Объекты секретов могут создаваться как пользователем так и системой, например кубер автоматически создает нужные ему секреты для доступа к API и модифицирует поды для использования этих секретов\\
Объект секретов можно создать командой **kubectl create secret** либо вручную заполнить yaml манифест данными в base64\\
* **Opaque** - позволяет хранить любые данные в формате "ключ-значение", универсальный тип
* **kubernetes.io/service-account-token** - хранит JWT токен для сервисного акка, создается при создании акка
* **kubernetes.io/dockercfg/dockerconfigjson** - конфиг для докера
* **kubernetes.io/basic-auth** - пара "логин-пароль" в base64
* **kubernetes.io/ssh-auth** - приватный ключ для ssh. В поле Data манифеста мы должны указать ssh-privatekey
* **kubernetes.io/tls** - сертификат и приватный ключ от него, в поле "data" мы должны указать ключи "tls.key" и "tls.crt"
:!: Создание секретов
Создать секрет из файлов командой кубера:\\
kubectl create secret generic my-secret --from-file=first.txt --from-file=second.txt
kubectl get secrets
kubectl describe secrets/my-secret
Создание через yaml манифест. Данные предварительно закодированы в base64\\
apiVersion: v1
kind: Secret
metadata:
name: my-secret
type: Opaque
data:
username: wefwef=
password: ssv=
Далее создаем файлом
kubectl create -f my-file.yaml
kubectl get secret my-secret -o yaml
Секреты можно примонтировать к поду как тома с данными либо как переменные окружения\\
:!: Использование
(...)
spec:
containers:
- name: mypod
image: redis
volumeMounts:
- name: foo
mountPath: "/etc/foo"
readOnly: true
volumes:
- name: foo
secret:
secretName: mysecret
Можно примонтировать значение отдельного ключа из секрета\\
(...)
spec:
containers:
- name: mypod
image: redis
volumeMounts:
- name: foo
mountPath: "/etc/foo"
readOnly: true
volumes:
- name: foo
secret:
secretName: mysecret
items:
- key: username
path: my-group/my-username
В данном случае, значение **username** будет доступно по пути "/etc/foo/my-group/my-username" вместо "/etc/foo/username"\\
Задавать права доступа можно к объектам и даже ключам\\
Подключение в виде переменных окружения выглядит так:\\
(...)
spec:
containers:
- name: mycontainer
image: redis
env:
- name: SECRET_USERNAME
valueFrom:
secretKeyRef:
name: mysecret
key: username
- name: SECRET_PASSWORD
valueFrom:
secretKeyRef:
name: mysecret
key: password
restartPolicy: Never
:!: