====== Ресурсы (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
:!: