コンテナアプリケーションの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変数はfoobarにある//
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-ファイル=バー= foobar.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
機密データのマウントとしてボリュームおよびコンテナ内の環境変数ポッドにさらされるが、また、システム内の他のリソースを使用することができます。たとえば、ファイルに必要な外部システムとの秘密の相互作用をインポートする証明書を使用することができます。
秘密のファイルの形で使用ポッド
- シークレットを作成し、あなたが同じ複数のポッドの秘密を参照することができます
- ポッドは、内の定義変更
spec.volumes[]
、名前にボリュームをプラスボリュームを、spec.volumes[].secret.secretName
レコードには、秘密の名前への参照です - 秘密の使用を必要とする各コンテナに追加
spec.containers[].volumeMounts[]
指定し、spec.containers[].volumeMounts[].readOnly = true
、spec.containers[].volumeMounts[].mountPath
システムを指すパスには使用されていません。 - ミラーリングやコマンドシステムの行使を変更することは、前のステップで指定されたパスを見つけることができます。秘密のこの時点で
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システムのファイルのパーミッションに似た秘密のファイルを、指定することができます0644
Linuxのファイルと同等-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)になります
例外:でサブパス容器に取り付けられた自動秘密のフォームを更新していないだろう
環境変数の形で秘密を使用してください
- シークレットを作成し、あなたが同じ複数のポッドの秘密を参照することができます
- ポッドの定義を変更し、使用して環境変数を定義し
env[].valueFrom.secretKeyRef
、指定秘密鍵を、対応します - 彼らは、環境変数を読むことができるように、ミラーリングまたはコマンドラインを変更
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で作成されます、