kubernetes ConfigMapとシークレット:アプリケーションを設定

コンテナアプリケーションの7.1の設定

7.2。容器にコマンドラインパラメータを渡します

7.2.1。ドッカーは、コマンドとパラメータを定義します

1.理解ENTRYPOINTとCMD

  ENTRYPOINT定義は、コンテナの起動時にプログラムが呼び出され、実行することができます

  ENTRYPに渡されたCMD指定されたパラメータ

dockerfileは、以下の

daocloud.io/centos:latest FROM 

AAAは/ usr / local / AAA ADD 

CMD [ "-f"、 "は/ var / log / aa.log"] 
ENTRYPOINT [ "テール"]

テール-f /var/log/aa.log:ブートイメージは、コンテナを起動するには、次のコマンドを実行すると、

または<引数>ドッキングウィンドウの実行<イメージ>、引数CMDのコンテンツの上書きを指定します

7.2.2コマンドラインパラメータとkubernetesをカバー

 容器を規定し、CMDエントリポイントミラーはK8S、コマンドに精通のみと設定された値血管引数の定義をカバーすることができる場合

次のように対応するパラメータは次のとおりです。

ドッカー kubernetes 説明
エントリーポイント コマンド コンテナは、実行可能ファイルを実行します
CMD 引数 実行可能ファイルに渡されたパラメータ

 

 

 

 

関連YMLコードは次のとおりです。

種類:ポッド
仕様:
  コンテナ:
  -画像:いくつかの/画像
    コマンド:[ "/ binに/コマンド"] 
    引数:[ "args1"、 "args2"、 "args3"]

  

7.3。環境変数コンテナを設定します。

7.3.1。コンテナの定義で環境変数を指定します

コマンドやコンテナのパラメータの同じセットは、ポッドに変更された環境変数のリストを作成することはできません。

コンテナは、のコードファイルYMLポッド以下の環境変数で提供されます。

種類:ポッド
仕様:
  コンテナ:
  -イメージ:luksa /幸運:ENVの
    ENV:
    -名前:INTERVALの
      値: "30" 
    名前:値テスト-YH

  

7.3.2。環境変数の値が他の環境変数への参照

$(VAR)参照環境変数を使用して、

関連YMコードは次のとおりです。

ENV:
-名前:FIRST_VAR 
  値: "foo"という
-名前:SECOND_VAR 
  値: "$(FIRST_VAR)バーが" final変数はfoob​​arにある//

 

7.4。ConfigMap用いる構成のデカップリング

7.4.1.ConfigMapはじめに

kubernetesが別のリソースへの個別の設定はConfigMapオプションオブジェクトことができ、本質的には、変数の値が短いリテラルすることができ、それは完全なコンフィギュレーションファイルを指定でき、キー/値のペアのマッピングです。

アプリケーションが直接ConfigMapリードする必要はありません、でも、それが存在するかどうかを知る必要はありません。

容器に直接伝達するのではなく、コンテナへのファイルまたはボリュームの形で送信された環境変数をマッピングコンテンツは、$によって定義されたコマンドラインパラメータである(ENV_VAR)変数の構文

7.4.2。ConfigMapを作成します

中間ConfigMapを作成すると、-f使用kubectlレコード生成configmapを追加しません。

1.命令がConfigMapを作成するために使用されます

#kubectlレコード生成configmap configmap-yaohong --fromリテラル= FOO =バー--fromリテラル=スリープ間隔= 25

2.ファイルの内容からConfigMapエントリを作成します。

私-confの-YH --from-ファイル= configの-file.confをconfigmap作成#kubectl

コマンドを使用して、カスタムのエントリがファイルの内容に格納されています。同じリテラルを持ちます

私-confの-YH --from-ファイルをconfigmap作成#kubectl = customkey = configの-file.conf 

3. ConfigMapからフォルダを作成します。

私-confの-YH --from-ファイルをconfigmap作成#kubectl = /パス/に/ディレクトリ

4.異なるオプションをマージ

私-confの-YH configmap作成#kubectl 
  --from-ファイルを= /パス/に/ DIR / 
  --from-ファイル=バー= foob​​ar.conf 
  --from-リテラル=いくつかの事=

  

5. ConfigMapを入手

#kubectl -n <名前空間> GET configmap

  

7.4.3。ConfigMapは、環境変数などのコンテナエントリに渡されます

パラメータ値は、現在の変数に環境変数を参照します

apiVersion:v1の
種類:POD 
メタデータ:
  名前:フォーチュン-ENV-から-ConfigMap 
仕様:
  コンテナ:
  -画像:Luksa /フォーチュン:ENV 
    ENV:
    -名前:INTERVAL //設定された環境変数
      valueFromおよび:
        configMapkeyRef:
          名前:フォーチュンConfigMap      
          キー:スリープ間隔の値に対応する幸運-configmapのSLEE間隔から変数の//値

  

7.4.4。環境変数など、すべてのエントリの1回の転送ConfigMap

apiVersion:v1の
種類:POD 
メタデータ:
  名前:フォーチュン-ENV-から-ConfigMap 
仕様:
  コンテナ:
  -画像:Luksa /フォーチュン:ENV 
    envFrom:
    -接頭辞:CONFIG_ 
      confgMapRef:
        名前:私-confgファイル・リファレンス地図//私の-config設定ConfigMapの-mapと変数プラスCONFIG_の前で

  

ConfigMapボリュームを使用した7.4.5は、ファイルのエントリとして公開されます

apiVersion:v1の
種類:POD 
メタデータ:
  名前:ConfigMap YH-体積の
仕様:
  コンテナ:
  -画像:nginxの:アプリン
    名:Webサーバの
    volumeMounts:
    ... 
    -名前:configの
DEFAULTMODEを: "6600" //設定ファイルのパーミッションある-RW RW MOUNTPATH:/etc/nginx/con.confの
サブパスは://サブパスmy.confフィールドは、別のファイルまたはフォルダにボリュームをマウントするために使用することができ、ボリューム内の他のファイルをカバーしていません ... ボリューム: ... -名前:コンフィグ configMap: 名前:フォーチュン-config設定//は幸運-config設定configMapのボリュームを参照して、/etc/nginx/conf.dをマウント

  /etc/nginx/conf.dファイルを表示するには、次のコマンドを使用することができますは、次の幸運-config設定が含まれています

#kubectl execの設定ボリューム-YH -cウェブサーバのls /etc/nginx/conf.d

   

7.5。Secertは容器に移し、機密データを使用して

7.5.1。はじめにSecert

シークレットConfigMap構造などは、キー/値のマッピングです。

同じメソッドとConfigMapを使用して、次のことができます。

  1.シークレットコンテナへのエントリーは、環境変数として渡され、

  ボリュームのファイルにさらさ2.秘密のエントリ

 ConfigMap小文字を区別しないテキスト保存されたコンフィギュレーションデータは、使用データは、本質的に敏感なシークレットを保存します

7.5.2。デフォルトのトークンの秘密

1.秘密を確認

#1 kubectl取得秘密
NAMEタイプのデータAGE 
デフォルト・トークンx9cjb kubernetes.io/service-account-token 3 78D

2.秘密を説明

#1 kubectlは秘密デフォルト・トークンx9cjbの説明
デフォルト・トークンx9cjbの:名前
名前空間:デフォルト
ラベル:<なし> 
注釈:kubernetes.io/service-account.name:デフォルト
              kubernetes.io/service-account.uid:64a41a09-98ceを-11e9-9fa5-fa163e6fdb6bの

種類:kubernetes.io/service-account-token 

データ
==== 
トークン:eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5lduaW8vc2VydmljZTxCv6HdtP-ZW3ZC2IKKR5YBhaokFIl35mix79pU4Ia2pJ_fuPTBGNyrCHyNQYH4ex5DhND3_b2puQmn8RSErQ 
ca.crt:1298バイトの
名前空間:7つのバイト

 

7.5.3。秘密を作成します。

1.一般的な秘密を作成します。https-YHと呼ばれています

= https.key --from-ファイル= https.cert --from-ファイル= fooの秘密の一般的なHTTPS-YH --from-ファイルを作成#kubectl

 

2. secret.yamlファイルを作成し、コンテンツは、base64でエンコードされました

$エコー-N '管理者' | base64で
YWRtaW4 = 
$エコー-N '1f2d1e2e67df' | BASE64 
MWYyZDFlMmU2N2Rm

 

ファイルのYAMLの内容:

コードをコピー
apiVersion:v1の
種類:秘密の
メタデータ:
  名前:mysecretの
タイプ:不透明
データ:
  ユーザ名:YWRtaW4 = 
  パスワード:MWYyZDFlMmU2N2Rm
コードをコピー

 

初出:

$のkubectlは-f ./secret.yaml作成
作成した秘密"mysecretを"

 

秘密の解析内容

コードをコピー
$ kubectl GET YAMLの-o秘密mysecret 
apiVersion:V1の
データ:
  ユーザー名:YWRtaW4 = 
  パスワード:MWYyZDFlMmU2N2Rm 
種類:秘密の
メタデータ:
  creationTimestamp:41:2016-01-22T18 56Z 
  名:mysecretの
  名前空間:デフォルト
  resourceVersion: "164619" 
  selfLink:/ API / V1 /ネーム/デフォルト/秘密/ mysecretの
  UID:cfee02d6-c137-11e5-8d73-42010af00002 
タイプ:不透明
コードをコピー

 

base64では、復号されました:

$エコー'MWYyZDFlMmU2N2Rm' | base64で--decodeの
1f2d1e2e67df

  

7.5.4。秘密のConfigMapとの比較

内容エントリの秘密は、プレーンテキスト表示に直接Base64でエンコードされたフォーマット、およびConfigMapになります。

1.シークレットバイナリデータを作成します。

  BASE64バイナリデータをテキスト形式に変換し、フォーマットYAMLまたはJSONに表示することができ

  しかし、サイズ制限に注意を払う1メガバイトの秘密です

2.stringDateフィールドの紹介

  秘密のエントリは、プレーンテキストフィールドによって提供されてもよいStringDate

種類:秘密
apiVersion:v1の
stringDate:
  FOO:平野のtxt 
日付:
  https.cert:HGIOPUPSDF63456BJ3BBJL34563456BLKJBK634563456BLBKJBLKJ63456BLK3456LK 
  http.key:OHOPGPIU42342345OIVBGOI3456345OVB6O3456BIPO435B6IPU345UI

  

ポッド内の秘密を使用して7.5.5

機密データのマウントとしてボリュームおよびコンテナ内の環境変数ポッドにさらされるが、また、システム内の他のリソースを使用することができます。たとえば、ファイルに必要な外部システムとの秘密の相互作用をインポートする証明書を使用することができます。

秘密のファイルの形で使用ポッド

  1. シークレットを作成し、あなたが同じ複数のポッドの秘密を参照することができます
  2. ポッドは、内の定義変更spec.volumes[]、名前にボリュームをプラスボリュームを、spec.volumes[].secret.secretNameレコードには、秘密の名前への参照です
  3. 秘密の使用を必要とする各コンテナに追加spec.containers[].volumeMounts[]指定し、spec.containers[].volumeMounts[].readOnly = truespec.containers[].volumeMounts[].mountPathシステムを指すパスには使用されていません。
  4. ミラーリングやコマンドシステムの行使を変更することは、前のステップで指定されたパスを見つけることができます。秘密のこの時点でdata各キーには、ファイル名のパス以下のフィールドに指定されています

ここポッドシークレット列子で参照されています。

コードをコピー
apiVersion:v1の
種類:ポッドの
メタデータ:
  名前:mypodの
仕様:
  コンテナ:
  -名前:mypodの
    画像:Redisのを
    volumeMounts:
    -名前:FOO 
      MOUNTPATH: "は/ etc / fooの" 
      読み取り専用:真
  ボリューム:
  -名前:fooの
    秘密:
      secretName:mysecret
コードをコピー

 

すべての内の各参照秘密のspec.volumes定義

ポッドシークレットで複数のコンテナは、コンテナの定義を参照する必要がある場合は、それぞれが独自のものを指定する必要がありvolumeMountsますが、ポッドは定義で宣言されたspec.volumesだけで罰金。

指定したパスにマッピングされた秘密鍵

あなたは秘密鍵を使用して、コンテナ内のパスにマッピングされている制御することができるspec.volumes[].secret.itemsマップされた変更の特定のパスを

コードをコピー
apiVersion:v1の
種類:ポッドの
メタデータ:
  名前:mypodの
仕様:
  コンテナ:
  -名前:mypodの
    画像:Redisのを
    volumeMounts:
    -名前:FOO 
      MOUNTPATH: "は/ etc / fooの" 
      読み取り専用:真
  ボリューム:
  -名前:fooの
    秘密:
      secretName:mysecret 
      アイテム:
      -キー:ユーザー名
        パス:私のグループ/私のユーザ名
コードをコピー

 

何が起こったのか?

  • ユーザ名は、ファイルにマッピングされている/etc/foo/my-group/my-username代わりに、/etc/foo/username
  • パスワードが変更されていません

シークレットファイルのアクセス権

あなたはデフォルトのアクセス権がある指定しない場合の権限は、Linuxシステムのファイルのパーミッションに似た秘密のファイルを、指定することができます0644Linuxのファイルと同等-rw-r--r--の権限

デフォルトのパーミッションビットを設定します

コードをコピー
apiVersion:v1の
種類:ポッドの
メタデータ:
  名前:mypod 
仕様:
  コンテナ:
  -名前:mypodの
    画像:Redisのを
    volumeMounts:
    -名前:FOO 
      MOUNTPATH: "は/ etc / foo"という
  ボリューム:
  -名前:fooの
    秘密:
      secretName:mysecret 
      DEFAULTMODE:256
コードをコピー

 

上記コンテナマウントする秘密のファイルを示す/etc/fooパスを、各派生キーファイル許可ビットは次のようになります0400

YAML形式のファイルならばJSONは、0400を表しているので、進、進数256とをサポートしていませんので、進を使用するのが自然です

同様に、あなたは指定することができ、そのキー個人の権利

コードをコピー
apiVersion:v1の
種類:ポッドの
メタデータ:
  名前:mypodの
仕様:
  コンテナ:
  -名前:mypodの
    画像:Redisのを
    volumeMounts:
    -名前:FOO 
      MOUNTPATH: "は/ etc / foo"という
  ボリューム:
  -名前:fooの
    秘密:
      secretName:mysecret 
      アイテム:
      -キー:ユーザー名
        パス:私のグループ/ MY-ユーザ名
        モード:511
コードをコピー

 

ボリュームから秘密値を読みます

注目すべきポイントは、秘密文書の形式で容器に装着され、その値は、base64デコード後にすでにある、直接使用して読み出すことができます。

コードをコピー
$のlsのは/ etc / fooの/ 
ユーザ名
、パスワード
$猫の/ etc / fooの/ユーザ名の
管理者
$猫の/ etc / fooの/パスワード
1f2d1e2e67df
コードをコピー

 

その秘密は、自動的に更新されたコンテンツを搭載しています

それはあなたが、その後も更新された値になりますコンテナの秘密をマウントし、秘密の内容を変更する場合は、ですが、この間隔は、時間kubeletの同期によって決定されます。最も長い期間はプラス同期キャッシュのライフサイクル(期間+ TTL)になります

例外:でサブパス容器に取り付けられた自動秘密のフォームを更新していないだろう

環境変数の形で秘密を使用してください

  1. シークレットを作成し、あなたが同じ複数のポッドの秘密を参照することができます
  2. ポッドの定義を変更し、使用して環境変数を定義しenv[].valueFrom.secretKeyRef、指定秘密鍵を、対応します
  3. 彼らは、環境変数を読むことができるように、ミラーリングまたはコマンドラインを変更
コードをコピー
apiVersion:v1の
種類:ポッドの
メタデータ:
  名前:秘密-ENV-ポッド
仕様:
  コンテナ:
  -名前:mycontainerの
    画像:Redisの
    ENV:
      -名前:SECRET_USERNAME 
        valueFromおよび:
          secretKeyRef:
            名前:mysecret 
            キー:ユーザー名
      -名前:SECRET_PASSWORD 
        valueFromおよび:
          secretKeyRef:
            名前:mysecret 
            キー:パスワード
  restartPolicy:決して
コードをコピー

 

コンテナ環境変数を読むことのbase64でデコードした後、すでに値です。

$エコー$ SECRET_USERNAMEの
管理
$エコー$ SECRET_PASSWORD 
1f2d1e2e67df

 

imagePullSecretsを使用してください

ポッドのkubeletによって作成されたミラーリポジトリにアクセスするとき、ミラーリングリポジトリへの特別な秘密のアクセスを作成し、文書で詳細に説明し、ミラーを引っ張っこちら 

自動インポートの設定imagePullSecrets

あなたは、マニュアルを作成し、その後でserviceAccountでそれを参照することができます。このimagePullSecretsポッドを介してすべてのミラーを引くために関連付けられたデフォルトのserviceAccountで作成されます、

 

おすすめ

転載: www.cnblogs.com/yaohong/p/11505670.html