[Kubernetes]ポッドの秘密の作成

一緒に書く習慣をつけましょう!「ナゲッツデイリーニュープラン・4月アップデートチャレンジ」に参加して5日目です。クリックしてイベントの詳細をご覧ください

I.はじめに

ConfigMap機密データを渡す必要がありSecretます。

Secretオブジェクトは、、、、などの機密情報を保存および管理できpasswordsますOAuth tokens ssh keys機密情報をSecretオブジェクトPodは、定義ファイルやコンテナイメージよりも安全で柔軟性があります。Secretオブジェクトを使用すると、データの使用方法をより適切に制御し、偶発的な開示のリスクを減らすことができます。

ユーザーはSecretオブジェクト、kubernetesシステムはいくつかのSecretオブジェクト。

Secret作成したら、次の3つの方法で作成できます。

  • Pod作成時に、Podを指定することでService Account自動的にSecret
  • に取り付けSecretPod使用してください
  • Dockerミラーのダウンロード時に使用します。指定Podして参照してください。spc.ImagePullSecrets

データを保存するときConfigMapSecretか?

  • 機密性の低い構成情報をConfigMap保存ます
  • 機密性の高い構成情報をSecret保存ます
  • 構成ファイルに機密情報と非機密情報の両方が含まれている場合でも、保存することを選択Secret

SecretConfigMapと比較すると、類似点と相違点の両方があります。リストは次のとおりです。 類似点:

  • 存储数据都属于 key-value 键值对形式
  • 属于某个特定的 namespace
  • 可以导出到环境变量
  • 可以通过目录/文件形式挂载(支持挂载所有 key 和部分 key

不同点:

  • Secret 可以被 ServerAccount 关联使用
  • Secret 可以存储 Register 的鉴权信息,用于 ImagePullSecret 参数中,用于拉取私有仓库的镜像
  • Secret 支持 Base64 加密
  • Secret 分为 Opaquekubernetes.io/Service Accountkubernetes.io/dockerconfigjson 三种类型,ConfigMap 不区分类型
  • Secret 文件存储在 tmpfs 文件系统中,Pod 删除后 Secret 文件也会对应被删除

二、默认令牌Secret

Service Accounts使用API证书自动创建并且绑定Secret

kubernetes 系统可以自动创建用于访问 API 证书的 Secret,并且可以自动绑定到 Pod 中使用这种类型的 Secret

可以根据需要禁用或覆盖重写这类 Secret,但是通常情况下如果考虑到安全性,更加推荐使用系统默认创建的 Secret

  1. 查看系统默认创建的Secret: kubectl get secrets

  2. 查看Secrets详细信息:kubectl describe secrets

  3. 新建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
复制代码
  1. 执行创建
$ kubectl create -f nginx-manual.yaml
pod/nginx-manual created
复制代码
  1. 查看详细信息
$ 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)
复制代码
  1. 查看容器该目录下的文件名是否符合
$ kubectl exec nginx-manual ls /var/run/secrets/kubernetes.io/serviceaccount
ca.crt
namespace
token
复制代码

**Tips: **

  1. podAPI Service创建时,API Service不会校验该pod引用的Secret是否存在

  2. これpodがディスパッチさkubeletれると、次Secretの値を取得しようとします

  3. Secret存在しないか、一時的に接続できないAPI Secret場合kubelet定期的に再試行して一定間隔で取得し、起動しなかった理由を説明するためにSecret送信します。Eventpod

  4. 取得すると、含まれているものがSecret作成およびマウントされすべてにのみ開始されます。PodkubeletSecretVolumeVolumePodContainer



3.作成Secret

Secret3つの方法を作成します。

  • kubectl
  • yaml構成ファイル
  • ジェネレーターの作成secret

(1)kubectl作成に使用secret

  1. アカウントとパスワードを定義する
echo -n 'admin' > /home/donald/username.txt
echo -n '1f2d1e2e67df' > /home/donald/password.txt
复制代码
  1. 作成
$ kubectl create secret generic db-user-pass --from-file=/home/donald/username.txt --from-file=/home/donald/password.txt
secret/db-user-pass created
复制代码
  1. 小切手Secret
kubectl get secrets
复制代码

(2)yaml構成ファイル

ファイルはjsonまたはyaml

定義されSecretているフィールドには2つのタイプがあります。

  • dataBase64エンコード後のデータ
  • stringData:プレーンテキストにすることができます
  1. アカウントとパスワードを定義する
echo -n 'admin' | base64
YWRtaW4=
$ echo -n '123' | base64
MTIz
复制代码
  1. 作成secret.yaml
apiVersion: v1
kind: Secret
metadata:
  name: mysecret
type: Opaque
data:
  username: YWRtaW4=
  password: MTIz
复制代码
  1. 作成を実行します
$ kubeclt create -f secre.yaml
secret/mysecret created
复制代码

(3)ジェネレーターの作成Secret

kubectlv1.14バージョンはKustomize管理ます

  1. 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
复制代码
  1. 作成を実行します
kubectl apply -k . 
复制代码
  1. 小切手
kubectl get secrets
复制代码

おすすめ

転載: juejin.im/post/7082782601093578789