この記事の紹介
1. 機密設定の抽象化 Secret
シークレットは、パスワード、トークン、秘密鍵などの少量の機密情報を含むオブジェクトです。このような情報は、Pod 仕様またはイメージに配置できます。Secret を使用すると、アプリケーション コードに機密データを含める必要がなくなります。Secret は、それを使用する Pod とは別に作成できるため、Pod の作成、表示、編集のワークフローで Secret とそのデータが公開されるリスクが少なくなります。
1.シークレットを知る
Secret は使用数据加密
され、etcd に保存され、Volume をマウントすることで Pod コンテナーからアクセスされます。通常、格納されるデータは平文ではなく、エンコードまたは暗号化されます。たとえば、一般的なのbase64
はエンコード方法です。
平文:直接理解できるもの。
base64 エンコーディングを使用して、次のように文字列「majinjian」を出力します。
[root@master ~]# echo -n 'majinjian' | base64
bWFqaW5qaWFu
[root@master ~]#
2. シークレットの使用
(1) Secret 暗号化データの作成
最初に Secret 暗号化データ (.yaml ファイル) をvi secret.yaml
作成し、次のように入力します。
apiVersion: v1
kind: Secret
metadata:
name: mysecret
type: Opaque
data:
username: cm9vdA==
password: cXdlcnR5dWlvcDE5OTkuLg==
次のように:
作成が成功したら、yaml ファイルを実行します。
[root@master ~]# kubectl apply -f secret.yaml
この時点でシークレットを確認すると、mysecret が正常に作成されていることがわかります。
(2) Secret を変数として Pod コンテナにマウントする
vi secret-val.yaml
新しい yaml ファイル secret-val.yaml を作成します。
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: nginx
image: nginx
env:
- name: SECRET_USERNAME
valueFrom:
secretKeyRef:
name: mysecret
key: username
- name: SECRET_PASSWORD
valueFrom:
secretKeyRef:
name: mysecret
key: password
「valueFrom」は変数としてのマウントを意味し、マウント ポイントは前の手順で作成した mysecret です。
作成が成功したら、yaml ファイルを実行します。
[root@master ~]# kubectl apply -f secret-val.yaml
この時点で、ノード内のポッドを確認し、mypod が実行されるのを待ちます (実行中の状態のみ)。
最後に、コンテナーに入り、マウントした値が変数に含まれているかどうかを確認します。
[root@master ~]# kubectl exec -it mypod bash
echo $变量名
(e.g. echo $SECRET_USERNAME ) を使用して、保存された変数値を表示します。
次に、抽象 ConfigMap を構成します
ConfigMap は、非機密データをキーと値のペアに格納するために使用される API オブジェクトです。使用すると、Pod はそれを環境変数、コマンドライン パラメーター、またはストレージ ボリューム内の構成ファイルとして使用できます。ConfigMap は、環境構成情報をコンテナー イメージから分離します。これは、アプリケーション構成の変更に便利です。ただし、ConfigMap は機密性や暗号化を提供しません。
1. ConfigMap を理解する
ConfigMap は Secret に似ています。違いは、Secret は暗号化されたデータを格納するのに対し、ConfigMap は暗号化されたデータを格納すること不加密数据
であり、ストアド プロシージャは基本的に Secret と同じです。
2. ConfigMap の使用
ヒント: 操作の前に、以前に作成したシークレットとコンテナーを削除して、区別しやすくします。
[root@master ~]# kubectl delete secret --all
[root@master ~]# kubectl delete Pod --all
(1) 設定ファイルを作成する
ここvi redis.properties
で作成するプロパティ ファイルには、次のように入力します。
redis.host=127.0.0.1
redis.port=6379
redis.password=123456
(2) ConfigMap の作成
[root@master ~]# kubectl create configmap redis-config --from-file=redis.properties
configmap/redis-config created
[root@master ~]#
この時点で、configmap (cm はその省略形) を確認すると、正常に作成されています。
(3) ConfigMap を変数として Pod コンテナにマウントする
vi myconfig.yaml
構成ファイル myconfig.yaml ファイルを作成し、次のように入力します。
apiVersion: v1
kind: ConfigMap
metadata:
name: myconfig
namespace: default
data:
special.level: info
special.type: hello
作成が成功したら、ファイルを実行します。
[root@master ~]# kubectl apply -f myconfig.yaml
configmap/myconfig created
この時点で、もう一度 ConfigMap を確認すると、myconfig も正常に作成されています。
vi config-var.yaml
マウントファイル config-var.yaml ファイルを作成し、次の内容を入力します。
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: busybox
image: busybox
command: [ "/bin/sh", "-c", "echo $(LEVEL) $(TYPE)" ]
env:
- name: LEVEL
valueFrom:
configMapKeyRef:
name: myconfig
key: special.level
- name: TYPE
valueFrom:
configMapKeyRef:
name: myconfig
key: special.type
restartPolicy: Never
作成が成功したら、ファイルを実行します。
[root@master ~]# kubectl apply -f config-var.yaml
pod/mypod created
最も一般的な方法は、ログを介してコンテナーを表示することです。「info hello」を出力すると、マウントが完了します。
[root@master ~]# kubectl logs mypod
[root@master ~]# info hello