三つの形式の秘密

秘密の

ConfigMapリソースオブジェクトがされKubernetesたオブジェクト間で非常に重要なのは、一般的には、ConfigMap単語の使用に関連するセキュリティ関連データの一部があれば、非セキュアの構成情報を格納するために使用されているConfigMapので、非常に間違っているConfigMap私たちが言う、メモリと呼ばれています:今回は別のリソースオブジェクトを使用する必要がありSecretSecretそのようなので、上のパスワード、OAuthのトークンとsshキー、およびなどの機密情報を格納するために使用、その情報を置くSecretではなく、Pod定義またはdockerミラーは、より多くのです安全で柔軟な。

Secret3つのタイプがあります。

  • 不透明:パスワード、鍵などを格納するために使用される秘密Base64エンコード形式が、データは、base64の-decode、すべて非常に弱い暗号化を復号して得られた生データであってもよいです。
  • kubernetes.io/dockerconfigjson:プライベートドッキングウィンドウレジストリの店認証情報を使用。
  • kubernetes.io/service-account-token:するserviceaccountデフォルトで作成さserviceaccoutがKubernetes対応する秘密を作成する際に参照。ポッドserviceaccount場合は、秘密のポッドに対応するディレクトリを自動的にマウントさ/run/secrets/kubernetes.io/serviceaccountで。

不透明な秘密

データの不透明なタイプのマップタイプで、必要な値がされたbase64フォーマットをエンコード、例えば、我々はadminという名前のユーザーを作成し、我々は、このユーザ名とパスワードはBase64エンコードを行う置くすべての最初のオブジェクトのパスワードadmin321の秘密、

$ echo -n "admin" | base64
YWRtaW4=
$ echo -n "admin321" | base64 YWRtaW4zMjE= 

その後、我々は書くために上記の符号化後のデータを使用することができますYAML(秘密demo.yaml):ファイルを

apiVersion: v1
kind: Secret
metadata: name: mysecret type: Opaque data: username: YWRtaW4= password: YWRtaW4zMjE= 

その後、我々は同じ使用することができますkubectl作成するコマンドを:

$ kubectl create -f secret-demo.yaml
secret "mysecret" created

使用するget secretビューにコマンドを:

$ kubectl get secret
NAME                  TYPE                                  DATA      AGE
default-token-n9w2d   kubernetes.io/service-account-token   3         33d
mysecret              Opaque                                2         40s

これはdefault-token-cty7pdefault-token-n9w2dあなたが作成したクラスタの秘密を作成するときのデフォルトである、serviceacount /デフォルトを引用しました。

使用describe詳細を表示するコマンドを:

$ kubectl describe secret mysecret
Name:         mysecret
Namespace:    default
Labels:       <none>
Annotations:  <none>

Type:  Opaque

Data
==== password: 8 bytes username: 5 bytes 

当社は、利用見ることができますdescribeビューにコマンドをData参照したい場合は、直接表示されませんData内部の詳細はまた、我々はしてエクスポートすることができ、YAML表示用のファイル:

$ kubectl get secret mysecret -o yaml
apiVersion: v1
data:
  password: YWRtaW4zMjE=
  username: YWRtaW4=
kind: Secret
metadata:
  creationTimestamp: 2018-06-19T15:27:06Z
  name: mysecret
  namespace: default
  resourceVersion: "3694084"
  selfLink: /api/v1/namespaces/default/secrets/mysecret
  uid: 39c139f5-73d5-11e8-a101-525400db4df7
type: Opaque

作成したSecretオブジェクトの後に、それを使用する2つの方法があります。

  • 環境変数の形で
  • ボリュームの形で実装します

環境変数

まず、我々は簡単な使用、モード環境変数、同じテストbusyboxテストにミラーリングを:(secret1-pod.yaml)

apiVersion: v1
kind: Pod
metadata: name: secret1-pod spec: containers: - name: secret1 image: busybox command: [ "/bin/sh", "-c", "env" ] env: - name: USERNAME valueFrom: secretKeyRef: name: mysecret key: username - name: PASSWORD valueFrom: secretKeyRef: name: mysecret key: password 

上に定義された主な環境変数secretKeyRefのキーワード、および私たちの最後のレッスンはconfigMapKeyRef1からではなく、類似し比較することであるSecret1から提示され、取得したオブジェクトConfigMap上で作成されますオブジェクトPod

$ kubectl create -f secret1-pod.yaml
pod "secret1-pod" created

その後、我々は見てPodログ出力:

$ kubectl logs secret1-pod
...
USERNAME=admin
PASSWORD=admin321
...

我々は2つの環境変数から出力USERNAMEとPASSWORDを見ることができます。

ボリュームのマウント

我々は、同様の使用Podを確認するためにケースをVolume作成し、マウントしPodたファイルを:(secret2-pod.yaml)

apiVersion: v1
kind: Pod
metadata: name: secret2-pod spec: containers: - name: secret2 image: busybox command: ["/bin/sh", "-c", "ls /etc/secrets"] volumeMounts: - name: secrets mountPath: /etc/secrets volumes: - name: secrets secret: secretName: mysecret 

作成されましたPod

$ kubectl create -f secret-pod2.yaml
pod "secret2-pod" created

その後、我々は、出力ログを見てみましょう。

$ kubectl logs secret2-pod
password
username

私たちは見ることができsecret、対応する2キーを2つにファイルをマウントします。あなたは上記の指定されたファイルをマウントしたい場合はもちろん、それはまた、メソッドのクラスで使用することができそうではありません:secretName以下の追加items指定されたキーやパス、我々はを参照することができ、レッスンConfigMapの次のテストする方法を。

kubernetes.io/dockerconfigjson

上記に加えてOpaque、このタイプの外に、我々はまた、ユーザー作成することができますので、docker registry認証をSecret直接使用して、kubectl create以下のように、作成するコマンドを:

$ kubectl create secret docker-registry myregistry --docker-server=DOCKER_SERVER --docker-username=DOCKER_USER --docker-password=DOCKER_PASSWORD --docker-email=DOCKER_EMAIL
secret "myregistry" created 

そして、表示Secretリスト:

$ kubectl get secret
NAME                  TYPE                                  DATA      AGE
default-token-n9w2d   kubernetes.io/service-account-token   3         33d
myregistry            kubernetes.io/dockerconfigjson        1         15s
mysecret              Opaque                                2         34m

上記の注意TYPE、タイプがmyregistry対応されていないkubernetes.io/dockerconfigjson、あなたが同じ使用することができますdescribe詳細を確認するためのコマンドを:

$ kubectl describe secret myregistry
Name:         myregistry
Namespace:    default
Labels:       <none>
Annotations:  <none>

Type:  kubernetes.io/dockerconfigjson

Data
==== .dockerconfigjson: 152 bytes 

同じことがあることが分かるData面積はあなたが見たい場合は、あなたが使用することができ、直接それを示さなかった-o yaml出力を表示するには:

$ kubectl get secret myregistry -o yaml
apiVersion: v1
data:
  .dockerconfigjson: eyJhdXRocyI6eyJET0NLRVJfU0VSVkVSIjp7InVzZXJuYW1lIjoiRE9DS0VSX1VTRVIiLCJwYXNzd29yZCI6IkRPQ0tFUl9QQVNTV09SRCIsImVtYWlsIjoiRE9DS0VSX0VNQUlMIiwiYXV0aCI6IlJFOURTMFZTWDFWVFJWSTZSRTlEUzBWU1gxQkJVMU5YVDFKRSJ9fX0=
kind: Secret
metadata:
  creationTimestamp: 2018-06-19T16:01:05Z
  name: myregistry
  namespace: default
  resourceVersion: "3696966"
  selfLink: /api/v1/namespaces/default/secrets/myregistry
  uid: f91db707-73d9-11e8-a101-525400db4df7
type: kubernetes.io/dockerconfigjson

超えることができdata.dockerconfigjsonようにするには、次のデータbase64、それが何であるかをデータ内部を見ると、デコーダを?

$ echo eyJhdXRocyI6eyJET0NLRVJfU0VSVkVSIjp7InVzZXJuYW1lIjoiRE9DS0VSX1VTRVIiLCJwYXNzd29yZCI6IkRPQ0tFUl9QQVNTV09SRCIsImVtYWlsIjoiRE9DS0VSX0VNQUlMIiwiYXV0aCI6IlJFOURTMFZTWDFWVFJWSTZSRTlEUzBWU1gxQkJVMU5YVDFKRSJ9fX0= | base64 -d
{"auths":{"DOCKER_SERVER":{"username":"DOCKER_USER","password":"DOCKER_PASSWORD","email":"DOCKER_EMAIL","auth":"RE9DS0VSX1VTRVI6RE9DS0VSX1BBU1NXT1JE"}}} 

私たちは、民間倉庫プルする必要がある場合はdocker、ミラーを、あなたはトップに使用する必要がありmyregistry、これをSecret

apiVersion: v1
kind: Pod
metadata: name: foo spec: containers: - name: foo image: 192.168.1.100:5000/test:v1 imagePullSecrets: - name: myregistrykey 

私たちは、民間の倉庫ミラーをプルする必要がある192.168.1.100:5000/test:v1、我々はそのため上記の民間倉庫を作成する必要がありSecret、そして、その後にPodYAMLファイルが指定されているimagePullSecrets、我々は民間の倉庫に構築過程で、後に詳細にあなたに話をします。

kubernetes.io/service-account-token

もう一つのSecretタイプは、されkubernetes.io/service-account-tokenに使用serviceaccount参照。serviceaccoutは、デフォルトで作成されたときKubernetes対応する秘密鍵を作成します。ポッドserviceaccount場合は、秘密のポッドに対応すると、自動的にマウント/run/secrets/kubernetes.io/serviceaccountディレクトリを。

ここでは、使用nginxされていない理由について考え、検証するためにミラーをbusybox検証するためのミラー?もちろん、可能な限り、私たちはしていないことができcommandたトークンが必要とされているので、そこに、検証するPodまで実行した後に直接マウントされますcommand確かにトークンファイルではありません参照するためのコマンド。

$ kubectl run secret-pod3 --image nginx:1.7.9
deployment.apps "secret-pod3" created
$ kubectl get pods
NAME                           READY     STATUS    RESTARTS   AGE
...
secret-pod3-78c8c76db8-7zmqm   1/1       Running   0          13s
...
$ kubectl exec secret-pod3-78c8c76db8-7zmqm ls /run/secrets/kubernetes.io/serviceaccount ca.crt namespace token $ kubectl exec secret-pod3-78c8c76db8-7zmqm cat /run/secrets/kubernetes.io/serviceaccount/token eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJkZWZhdWx0Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZWNyZXQubmFtZSI6ImRlZmF1bHQtdG9rZW4tbjl3MmQiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZGVmYXVsdCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6IjMzY2FkOWQxLTU5MmYtMTFlOC1hMTAxLTUyNTQwMGRiNGRmNyIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDpkZWZhdWx0OmRlZmF1bHQifQ.0FpzPD8WO_fwnMjwpGIOphdVu4K9wUINwpXpBOJAQ-Tawd0RTbAUHcgYy3sEHSk9uvgnl1FJRQpbQN3yVR_DWSIlAtbmd4dIPxK4O7ZVdd4UnmC467cNXEBqL1sDWLfS5f03d7D1dw1ljFJ_pJw2P65Fjd13reKJvvTQnpu5U0SDcfxj675-Z3z-iOO3XSalZmkFIw2MfYMzf_WpxW0yMFCVkUZ8tBSTegA9-NJZededceA_VCOdKcUjDPrDo-CNti3wZqax5WPw95Ou8RJDMAIS5EcVym7M2_zjGiqHEL3VTvcwXbdFKxsNX-1VW6nr_KKuMGKOyx-5vgxebl71QQ 

ConfigMapと秘密のコントラスト

最後に、我々は次の比較SecretおよびConfigMapこれら2つのリソースオブジェクト間の類似点と相違点を:

同じポイント:

  • キー/値の形式
  • 特定の名前空間に属しています
  • あなたは、環境変数にエクスポートすることができます
  • ディレクトリ/ファイル形式でマウントすることができます
  • 情報量を設定することで、ホットアップデートをマウントすることができます

違い:

  • シークレットServerAccountを関連させることができます
  • 秘密の認証情報が格納されていてもよいドッキングウィンドウレジスタがプルミラー民間倉庫のためImagePullSecretパラメータで使用されています
  • シークレットBase64で暗号化サポート
  • Kubernetes.io/service-account-token,kubernetes.io/dockerconfigjson,Opaque秘密は3種類に分けられますが、種類を区別しませんConfigmap

おすすめ

転載: www.cnblogs.com/fuyuteng/p/10948245.html