秘密の
ConfigMap
リソースオブジェクトがされKubernetes
たオブジェクト間で非常に重要なのは、一般的には、ConfigMap
単語の使用に関連するセキュリティ関連データの一部があれば、非セキュアの構成情報を格納するために使用されているConfigMap
ので、非常に間違っているConfigMap
私たちが言う、メモリと呼ばれています:今回は別のリソースオブジェクトを使用する必要がありSecret
、Secret
そのようなので、上のパスワード、OAuthのトークンとsshキー、およびなどの機密情報を格納するために使用、その情報を置くSecret
ではなく、Pod
定義またはdocker
ミラーは、より多くのです安全で柔軟な。
Secret
3つのタイプがあります。
- 不透明:パスワード、鍵などを格納するために使用される秘密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
のキーワード、および私たちの最後のレッスンはconfigMapKeyRef
1からではなく、類似し比較することであるSecret
1から提示され、取得したオブジェクト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
、そして、その後にPod
YAMLファイルが指定されている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