記事ディレクトリ
1. シークレット暗号化構成の理論的知識
1. シークレットとは何ですか?
前回の記事では、プログラム構成ファイルやその他の情報など、暗号化されていない平文データを保存するために使用されるConfigMap リソース ConfigMap 構成管理センターについて詳しく説明しましたが、ConfigMap では暗号化を実装できません。トークンやパスワードなどの機密情報を保存する場合は、 、および秘密キーを使用するには、暗号化に秘密タイプを使用する必要があります。
2. Secret と configMap の違い
- ConfigMap: 文明化された非暗号化構成情報を保存するために使用されます。
- シークレット: パスワード、トークン、その他の情報などの暗号化されたデータを保存するために使用されます。
3. シークレットパラメータとタイプ
Secret には 3 つのオプションのパラメータがあります。
- generic: パスワード データの保存によく使用されるジェネリック タイプ。
- tls: 秘密キーと証明書を保存するために使用されます。
- docker-registry: Docker ウェアハウスの認証情報を保存するために使用されます。
シークレット3種類:
- サービス アカウント: 以前は serviceaccount によって参照されていました。serviceaccout が作成されると、Kubernetes はデフォルトで対応するシークレットを作成します。ポッドが serviceaccount を使用する場合、対応するシークレットはポッドの /run/secrets/kubernetes.io/serviceaccount ディレクトリに自動的にマウントされます。
- Opaque: Base64 エンコード形式のシークレット。パスワードや秘密キーなどを保存するために使用されます。元データはbase64 --decodeデコードで取得できるのでセキュリティが弱い
- kubernetes.io/dockerconfigjson: プライベート Docker レジストリの認証情報を保存するために使用されます。
2. 実践: 暗号化に Secret を使用する
1. 方法 1: 環境変数をインポートする
まず、ユーザー名とパスワードの値を暗号化します。
echo admin|base64
echo NTQ34tg*@19VF-AdmiN|base64
var-secret
という名前のシークレットを作成します
cat varSecretConfig.yaml
---
apiVersion: v1
kind: Secret
metadata:
name: var-secret
type: Opaque # 指定加密方式
data:
username: YWRtaW4K # 值是加密后的
password: TlRRMzR0ZypAMTlWRi1BZG1pTgo=
Busybox イメージを使用して Deployment リソースを作成し、Secret を導入します
cat vardeploy.yaml
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: vardemo
spec:
replicas: 1
selector:
matchLabels:
type: var
template:
metadata:
labels:
type: var
spec:
containers:
- name: vardemo
image: busybox:1.28.0
imagePullPolicy: IfNotPresent
command: ["/bin/sh", "-c", "sleep 36000"]
env:
- name: password
valueFrom:
secretKeyRef:
name: var-secret
key: password
- name: username
valueFrom:
secretKeyRef:
name: var-secret
key: username
YAML ファイルを実行します。
kubectl apply -f varSecretConfig.yaml
kubectl apply -f vardeploy.yaml
リソースの作成ステータスを表示します。
kubectl get pod -l type=var
kubectl get secret var-secret
kubectl describe secret var-secret
コンテナーに入って、変数が正常にインポートされたかどうかを確認します。
kubectl exec -it vardemo-5cf58dd664-vnv5q -- /bin/sh
echo $username
admin
echo $password
NTQ34tg*@19VF-AdmiN
2. 方法2:ボリュームマウント方式の導入
volume-secret
という名前のシークレットを作成します
cat volumeSecretConfig.yaml
---
apiVersion: v1
kind: Secret
metadata:
name: volume-secret
type: Opaque
data:
username: YWRtaW4K
password: TlRRMzR0ZypAMTlWRi1BZG1pTgo=
デプロイメントを作成し、シークレットを導入する
cat volumedeploy.yaml
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: volumedemo
spec:
replicas: 1
selector:
matchLabels:
type: volume
template:
metadata:
labels:
type: volume
spec:
volumes:
- name: volume-secret
secret:
secretName: volume-secret # 定义挂载卷
containers:
- name: volumedemo
image: busybox:1.28.0
imagePullPolicy: IfNotPresent
command: ["/bin/sh", "-c", "sleep 36000"]
volumeMounts:
- name: volume-secret
mountPath: /tmp
readOnly: true
YAML ファイルを実行します。
kubectl apply -f volumeSecretConfig.yaml
kubectl apply -f volumedeploy.yaml
表示するコンテナを入力してください:
kubectl exec -it volumedemo-6dc47cff57-qstv4 -- /bin/sh
cat /tmp/password
NTQ34tg*@19VF-AdmiN
cat /tmp/username
admin