一緒に書く習慣をつけましょう!「ナゲッツデイリーニュープラン・4月アップデートチャレンジ」に参加して5日目です。クリックしてイベントの詳細をご覧ください。
I.はじめに
ConfigMap
機密データを渡す必要がありSecret
ます。
Secret
オブジェクトは、、、、などの機密情報を保存および管理できpasswords
ます。OAuth tokens
ssh keys
機密情報をSecret
オブジェクトPod
は、定義ファイルやコンテナイメージよりも安全で柔軟性があります。Secret
オブジェクトを使用すると、データの使用方法をより適切に制御し、偶発的な開示のリスクを減らすことができます。
ユーザーはSecret
オブジェクト、kubernetes
システムはいくつかのSecret
オブジェクト。
Secret
作成したら、次の3つの方法で作成できます。
Pod
作成時に、Pod
を指定することでService Account
自動的にSecret
- に取り付け
Secret
てPod
使用してください Docker
ミラーのダウンロード時に使用します。指定Pod
して参照してください。spc.ImagePullSecrets
データを保存するときConfigMap
とSecret
か?
- 機密性の低い構成情報を
ConfigMap
保存ます - 機密性の高い構成情報を
Secret
保存ます - 構成ファイルに機密情報と非機密情報の両方が含まれている場合でも、保存することを選択
Secret
し
Secret
ConfigMap
と比較すると、類似点と相違点の両方があります。リストは次のとおりです。 類似点:
- 存储数据都属于
key-value
键值对形式 - 属于某个特定的
namespace
- 可以导出到环境变量
- 可以通过目录/文件形式挂载(支持挂载所有
key
和部分key
)
不同点:
Secret
可以被ServerAccount
关联使用Secret
可以存储Register
的鉴权信息,用于ImagePullSecret
参数中,用于拉取私有仓库的镜像Secret
支持Base64
加密Secret
分为Opaque
、kubernetes.io/Service Account
、kubernetes.io/dockerconfigjson
三种类型,ConfigMap
不区分类型Secret
文件存储在tmpfs
文件系统中,Pod
删除后Secret
文件也会对应被删除
二、默认令牌Secret
Service Accounts
使用API
证书自动创建并且绑定Secret
。
kubernetes
系统可以自动创建用于访问API
证书的Secret
,并且可以自动绑定到Pod
中使用这种类型的Secret
。
可以根据需要禁用或覆盖重写这类 Secret
,但是通常情况下如果考虑到安全性,更加推荐使用系统默认创建的 Secret
。
-
查看系统默认创建的
Secret
:kubectl get secrets
-
查看
Secrets
详细信息:kubectl describe secrets
-
新建
yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx-manual
spec:
containers:
- image: registry.cn-hangzhou.aliyuncs.com/chenshi-kubernetes/nginx:1.9.1
name: nginx
ports:
- containerPort: 80
protocol: TCP
复制代码
- 执行创建
$ kubectl create -f nginx-manual.yaml
pod/nginx-manual created
复制代码
- 查看详细信息
$ kubectl describe pod nginx-manual
# 这里显示了 default-token-sz72t Secret 被挂载到了容器中的 /var/run/secrets/kubernetes.io/serviceaccount 目录下
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from default-token-sz72t (ro)
复制代码
- 查看容器该目录下的文件名是否符合
$ kubectl exec nginx-manual ls /var/run/secrets/kubernetes.io/serviceaccount
ca.crt
namespace
token
复制代码
**Tips: **
-
当
pod
被API Service
创建时,API Service
不会校验该pod
引用的Secret
是否存在 -
これ
pod
がディスパッチさkubelet
れると、次Secret
の値を取得しようとします -
Secret
存在しないか、一時的に接続できないAPI Secret
場合kubelet
は定期的に再試行して一定間隔で取得し、起動しなかった理由を説明するためにSecret
送信します。Event
pod
-
取得すると、含まれているものが
Secret
作成およびマウントされ、すべてがにのみ開始されます。Pod
kubelet
Secret
Volume
Volume
Pod
Container
3.作成Secret
Secret
3つの方法を作成します。
kubectl
yaml
構成ファイル- ジェネレーターの作成
secret
(1)kubectl
作成に使用secret
- アカウントとパスワードを定義する
echo -n 'admin' > /home/donald/username.txt
echo -n '1f2d1e2e67df' > /home/donald/password.txt
复制代码
- 作成
$ kubectl create secret generic db-user-pass --from-file=/home/donald/username.txt --from-file=/home/donald/password.txt
secret/db-user-pass created
复制代码
- 小切手
Secret
kubectl get secrets
复制代码
(2)yaml
構成ファイル
ファイルはjson
またはyaml
定義されSecret
ているフィールドには2つのタイプがあります。
data
:Base64
エンコード後のデータstringData
:プレーンテキストにすることができます
- アカウントとパスワードを定義する
echo -n 'admin' | base64
YWRtaW4=
$ echo -n '123' | base64
MTIz
复制代码
- 作成
secret.yaml
apiVersion: v1
kind: Secret
metadata:
name: mysecret
type: Opaque
data:
username: YWRtaW4=
password: MTIz
复制代码
- 作成を実行します
$ kubeclt create -f secre.yaml
secret/mysecret created
复制代码
(3)ジェネレーターの作成Secret
kubectl
v1.14バージョンはKustomize
管理ます
kustomization.yaml
ビルダーフィールドを作成するsecretGenerator
cat <<EOF >/home/donald/kustomization.yaml
secretGenerator:
- name: db-user-pass
files:
- username.txt
- password.txt
EOF
复制代码
またはkey-value
フォーム
cat <<EOF >/home/donald/kustomization.yaml
secretGenerator:
- name: db-user-pass
literals:
- username=admin
- password=secret
EOF
复制代码
- 作成を実行します
kubectl apply -k .
复制代码
- 小切手
kubectl get secrets
复制代码