まず、需要元
背景の質問
まず、需要の源で一緒に見て。私たちは、それがコンテナを起動するために、コンテナのミラーを使用することで、この経験を持っている必要があります。コンテナを起動するには、支援のためのニーズを対処すべき多くの問題があります。
- まず、例えば、いくつかの変数の設定。設定は変更を必要とするとき、我々は、内部に書かれたいくつかの変数の設定ミラーを置くことができないので、私たちは、ミラーを再コンパイルする必要があり、これは確かに受け入れられません。
- 第二は、機密情報の保管及び使用です。例えば、アプリケーションは、いくつかのパスワードを使用する、またはいくつかのトークンを使用する必要があります。
- 第三の容器は、私たちがクラスタ自体にアクセスしたいものです。例えば、私はKUBE-apiserverにアクセスしたい場合、認証自体は問題です。
- 第四は、ノード上で実行した後、そのリソース要件容器です。
- 第五は、カーネルを共有しているノード上のコンテナである、それはどのように行うには、安全制御ですか?
- 我々は試験容器の開始前に、前提条件について話最後の事。例えば、コンテナの開始前に、私は、DNSサービスを使用することは容易ではないであることを確認する必要がありますか?または確認Unicom社のネットワークではないでしょうか?そして、事実確認の前にいくつかのこと。
ポッド構成管理
内部Kubernetesでは、これらの設定は、それを管理しない方法ですか?下図のように:
- 変数を使用するように構成さConfigMap。
- 機密情報は秘密です。
- 認証は、ServiceAccount達成するためにこれらの独立したリソースです。
- リソースの割り当てはリソースです。
- セキュリティ制御がSecurityContextがあります。
- InitContainersでこれらのフィールドを追加したこれらのスペック構成管理は達成するために、事前に確認してください。
二、ConfigMap
ConfigMapはじめに
のは、最初の部分を確認してみましょう、ConfigMapです。のは、行うために使用し、それがもたらす利点の1つですConfigMapを見てみましょう。実際には、それは主に、このようないくつかの環境変数、またはいくつかのコマンドライン引数内の我々のアプリケーションの設定ファイルの一部、またはそれとして、いくつかの変数の構成情報を管理しています。
その利点は、それはまた、コンテナの移植性を保証するであろういくつかの変数の設定ミラーとコンテナのデカップリングを、聞かせてできることです。下の図の右側にあるファイルレイアウトのスクリーンショットを見てください。
これは、2つの部分から構成定義ConfigMap自体、次のとおりです。メタ情報はConfigMapで、我々は名前と名前空間情報の両方を懸念しています。次に、内部のデータは、あなたはそれが2つのプロファイルを管理する見ることができます。実際には、その構造は、この次のとおりです。名前からConfigMapは、単語地図が含まれて見て、地図は、実際のキーです:値は、キーの値は、ファイルの内容で、ファイル名です。
ConfigMapを作成します
導入を読んだ後、それが作成された方法で、より具体的な表情。1は、第二のデータであり、指定された名前である:我々は2つがあることを引数で、作成するkubectlこのコマンドを使用することをお勧めします。DATAは、指定されたファイルまたはディレクトリを指定することができ、同様に直接キーと値のペアを指定するなど、あなたは以下の例で見ることができます。
指定されたファイルは、ファイル名がマップのキーである場合は、ファイルの内容は、値の地図です。値:キー:マップキーに直接マッピングされた値の形式、そして、キーと値のペアが指定されたデータ、すなわちへの鍵である指定。
ConfigMapの使用
あなたが完成した後に作成し、それを使用する方法をすべきですか?
これは主に、上記図ConfigMapに使用ポッドに、示されています。
- 最初は、環境変数です。環境変数は、その後valueFromおよびにより、その後、ConfigMapKeyRefこのフィールドは、次の名前がConfigMap名を指定すると、キーがConfigMap.dataは、キーの内側にあります。この場合、スタートbusyboxのコンテナ船のENVの後に実行環境変数SPECIAL_LEVEL_KEYが表示されます。
- 第二は、コマンドラインパラメータです。コマンドラインパラメータは、実際の環境変数の最初の行で直接使用するには、このフィールドの中に入るCMD。
- 最後のものは、直接の容器への道にリンクされているボリュームの負荷の下のディレクトリです。上記の例では、容器内の/ etc / configディレクトリ内のコンテンツにリンクされた特殊設定ConfigMapは、これが使用する方法でもあるということです。
注意すべき点をConfigMap
今ConfigMapの使用が記載されている次の5つのポイントの合計に注意を払って、ポイントに概要ならびにその関心のいくつかの操作を行います。
- ConfigMapファイルサイズ。ConfigMapは、サイズ制限をファイルませんが、ETCD内側、データを書き込みますが、サイズが制限され、現在は1MB未満に制限されています。
- 第二の点が導入されたときにConfigMapポッドはConfigMap名前空間で同じである必要があり、フロントが実際に見ることができることに留意されたい、ConfigMap.metadata名前空間フィールドです。
- 第三は、ConfigMapに引用ポッドです。このConfigMapが存在しない場合は、その後、ポッドは成功し、実際には、これはまた、あなたがポッドを作成する前に、最初のConfigMap作成を参照しなければならないことを意味し作成することができません。
- 第四点は、envFromの方法を使用することです。ConfigMapは、いくつかの重要で、このような内部の番号のキー名として、有効でない場合は、環境変数に内部のインポートすべての情報ConfigMapは、この環境変数は、実際の容器に注入されていない場合、それは無視されます。しかし、ポッド自身が作成することができます。そして第三の点は、ファイルに基づいて、同様に、全体形状環境変数に導入し、ConfigMap存在しません。
- 最後のポイントは次のとおりです。ConfigMapを使用するために、ポッド、どのような?例えば、K8S ConfigMap使用して作成されたAPIにのみポッドを作成するには、コマンドラインkubectlポッドを使用してあり、あなたは確かにConfigMapを使用することができますが、作成された静的ポッドマニフェストkubeletすることにより、たとえば、他の方法で作成されたポッドは、それがありますあなたはConfigMapを使用することはできません。
三、秘密
シークレットはじめに
今、私たちは、秘密、秘密の話をリソースの機密情報保存されたパスワードようにトークンとの主要な標的です。機密情報は、ベース64エンコードを使用して保存されている、我々は秘密データ図の定義を見て。
主に名前、名前空間の二つのフィールドであるメタデータ、そして、;タイプに続いては、それはそれは秘密のタイプを指し、非常に重要な分野です。秘密のタイプより多くの種は、次の4つの一般的な種類が記載されています:
- 最初は、それが共通の秘密文書で、不透明です。
- 第二は、使用されるサービスアカウントの認証のための秘密のサービスのアカウントトークンです。
- 第三は、倉庫ミラーを引っ張ることによって、個人秘密でdockerconfigjson、です。
- bootstrap.tokenされる第四、シークレットは、チェックを持つクラスタのアクセスノードです。
データはまた、キーと値のストアの形態で、秘密データを格納され、続きます。
シークレットを作成します。
次はシークレットの作成を見てください。
上記のように、作成するには、2つの方法があります。
システムが作成されます。たとえば、デフォルトのユーザー(デフォルトServiceAccount)の各名前空間のK8Sシークレットを作成します。
ユーザーが手動で作成:コマンドを手動で作成するには、kubectlにこのコマンドラインツールをお勧めします、それはConfigMapは、1つの以上の型パラメータになります比較的です。データが同じである場合、ファイルやキーと値のペアを指定することも可能です。指定されていない場合はタイプが、その後、デフォルトは不透明タイプです。
二つの例上記の図。最初は、ミラーリングプル秘密のプライベート倉庫を作成し、ファイルを指定することである、指定されたファイルが/root/.docker/config.jsonです。指定されたタイプがdockerconfigjsonされている場合、我々は我々が指定されていない入力し、他のキーと値のペアを指定し、デフォルトは不透明です。キーと値のペアは、キーです:値の形式、コンテンツbase64で暗号化の値に。秘密は、このような状況を作成することです。
秘密の使用
シークレットを作成したら、それを使用する方法を見て。主に、コンテナのビジネスプロセスと、その後は、使用する秘密のカタログを読み取るために、コンテナ指定されたディレクトリを形成するために、ボリュームによって通常マウント、ポッドで使用されています。また、鏡の中のあなたが達成するために、民間の倉庫へのアクセスを必要とするだけでなく、参照の秘密で。
さんが道をマウントするためにユーザーが指定したディレクトリを見てみましょう:
- 第一実施形態:図に示すように、ユーザに直接容器mysecretの/ etc / fooのディレクトリをマウントし、指定を残しました。
- 第二の実施形態:図の右側に示されるように、自動的に生成するシステムは、serviceaccount秘密が自動的に下部容器/var/run/secrets/kubernetes.io/serviceaccountディレクトリに取り付けられ、それは二つのファイル、あるCAを生成します.CRT、それはトークンです。これらは、2つの証明書ファイルの認証情報を保存します。
プライベートイメージライブラリを使用します
鏡を見て、次の民間倉庫で使用される秘密。まず、個人情報は、(具体的には秘密のセクションを参照作成)画像リポジトリ秘密の内部に格納され、その後、ミラープライベートリポジトリを引くされ、その後、下の画像は、2つの方法で構成することができます。
- 第一実施形態:直接ポッド内部、左側に示されるように、imagePullSecretsフィールドによって構成される。
- 第二の方法は、自動的に注入されます。予めserviceaccountポッドにおけるユーザー設定imagePullSecretsがで使用される、PODシステムが自動的imagePullSecretsを注入します。
注意すべきポイントの秘密使用
最後に、次の3つのポイントを使用される秘密の注意点をいくつか見てみましょう:
最初は、秘密のファイルサイズの上限です。このConfigMapのように、それは1MBです。
第二には、秘密は、ベース64符号化を使用しているが、それは平文との大きな違いはありません。機密情報の秘密ストアの一部の使用があるのであれば、それは非常に慎重に検討する必要があります。それはあなたとこの秘密のだろう、このクラスタを訪問しようとしている人であることは、クラスタにアクセスすることができれば、あなたは秘密を得ることができますので、まだ、慎重に考慮しなければなりません。
機密情報が厳しいの秘密である場合には、この暗号化が強く望まれている推奨されるとKubernetesは、機密情報の著作権管理と暗号化に対応するために、ボールトのオープンソースソリューションを行うことができます。第三のベストプラクティスは、秘密を読み取ることで、リスト/時計動作の場合は、名前空間の下にあるすべての秘密がダウンして、すべて、これは実際にはより多くの情報にさらされて引っ張ってくる、リスト/ウォッチをお勧めしません。あなただけの秘密自身のニーズを得るので、推奨メソッドをGET。
四、ServiceAccount
はじめにServiceAccount
次に、我々はServiceAccountについて話しています。最初は、ポッド内部クラスタ内認証の問題を解決するために使用されるServiceAccount、認証情報が内部秘密に存在します。
上のスクリーンショットの左側を見て、あなたが赤いボックスの一番下を見ることができ、これはK8Sが自動的ServiceAccountを追加でシークレットとされServiceAccount指定Secretフィールドがあります。そして、テーマ上図の右側を見て、それに対応するデータの秘密のデータは、2があり、一つは、それはトークンで、ca.crtです。サービスの終了を確認するためのca.crtは、認証のためのポッドトークンは、それらがBASE64でエンコードされています。そして、あなたはメタ情報であるメタデータを参照することができ、実際には、リンクServiceAccount情報(ServiceAccountこれによって使用されている秘密)があります。最後に、我々は、これがこの種のサービス・アカウント・トークンで、タイプに注意してください。
例:アプリケーションのアクセスK8Sクラスタ内のポッドは、それが属します
それに対応するServiceAccountと秘密を紹介した後、我々は見て、ポッドはそれをServiceAccountを使用するか、または秘密を使用する方法であるあなたのK8Sクラスタにアクセスする方法です。
ポッドが作成されたときに、実際に、それは最初K8S機能に実装されている固定マウントディレクトリコンテナーへのすべての秘密のだろう。これは、このca.crtを入れて、固定マウントディレクトリにこれら2つのファイルをトークン。
ポッドは、それがこのファイルにそれを使用する方法であるとき、クラスタにアクセスするには?私たちは、スクリーンショット、以下のコードを見て:
私たちはポッドアクセスK8Sクラスタ内の行くを実現する場合、一般的には、サービスのクライアントにアクセスするには、この情報の一部を生成するInClusterConfigの道に直接転送されます。その後、二つの情報があり、この最後のコンフィグレーションを見ることができます:
- tlsClientConfig、これは主に検証サーバca.crt使用されているのです。
- 二つ目は、これはポッド認証で、ベアラトークンです。ポッドのサーバー側で使用認証トークンになります。
再び左側にあります。身元認証情報の完了後のポッドは2つの部分があります:一つは、それがユーザグループです。アイデンティティ認証は、二つの情報ということです。その後、ポッド権限管理を行うためにRBAC機能を使用することができます。
RBACが設定されていない場合、ポッドのデフォルトのアクセス権は、リソースのGETを持っているK8Sがクラスタに属しているから、あなたがデータを得ることができるということです。それはより多くの権限を必要とする場合、あなたは自分のRBACを設定する必要があります。私たちは、後のレッスンで詳しく、私たちが見ることができます知識を、RBACは関連します。
五、リソース
とコンテナのリソース管理
リソース構成管理コンテナ:ここではいくつかのリソース、すなわちです。
CPU、メモリ、および一時記憶:現在、内部サポートの3つのタイプがあります。あなたはこれら三つについて考えるとき、このようなGPU、または他のリソースとして、あなたはまた、独自に定義することができ、自分のリソースの一部が、ありますが、十分ではありませんが、あなたは整数でなければなりません指定された数を設定するとき。現在のリソースの割り当てと制限要求が一つの必要量が資源の限界であり、二つのタイプに分けられます。CPU、メモリ、ストレージが内部コンテナの下の文のリソースフィールドに一時的に行われています。
例えば、リソース要件ワードプレスコンテナ、1つの要求、声明を行うために必要なリソースとリソースのための重要な1つの制限、。
サービスのポッド品質(QoS)の設定
CPUメモリはコンテナリソースの需要に応じて、我々はサービスポッドの品質の分類を行い、バースト可能とにBestEffort、保証されています。
- 保証:これが保証され、各コンテナ内のポッドは、メモリとCPUの要求や制限の文を持っている必要があり、その要求と制限が同じでなければなりません。
- 破断可能な少なくともCPUとメモリ要求を有する容器の破断可能な存在。
- BestEffort:限り保証されており、バースト可能なように、それはにBestEffortです。
まあ、これはサービスの品質の種類もありますか?ポッドアウト追放:(にBestEffort、バースト可能なような)サービスのいくつかの低優先度、以下の厳しい品質を置くkubeletそのようなノードの割当てリソース上のメモリ不足など、このノードポッドコンテナ、上で動作しているときのリソースの割り当て後、良いです。彼らは、最初の除去にBestEffortに基づいて、その後、ポッドを追放するバースト可能な順序を削除します。
六、SecurityContextが
はじめにSecurityContextが
SecurityContextが挙動は主にコンテナを制限するために使用され、それは、セキュリティ、およびその他のコンテナを確保することができます。この機能は、ユーザーによるKubernetesまたはコンテナのランタイム機能ピースそのものではなく、Kubernetesと実行時設定ではなく、最終的にはカーネルの下に達し、その後、カーネルのメカニズムを介したSecurityContextを有効にするように。ここで紹介するので、コンテンツ、それはよりシンプルまたはもう少し抽象的になります。
3つのレベルに分かれたSecurityContext:
- 最初のレベルは、容器は、容器のみ有効になります。
- 第2のレベルは力にすべてのコンテナ内のポッドのために、ポッドです。
- 第三は、クラスタ・レベルで、PSP、すべてのポッドクラスター効果があります。
権限とアクセス制御設定は、今(フォローアップの数は変更になる場合があります)7の合計を示しています。
- 第一には、ユーザIDとグループIDへのアクセスを介してファイルを制御することです。
- 第二は、ポリシーの設定を介してファイルやプロセスへのユーザーアクセス制御を制御するもので、SELinuxのです。
- 第三の容器の特権です。
- 第四は、また、特定のプロセスに設定するには、特権的能力である、能力です。
- 第五は、AppArmorのですが、それはまた、読書やポートの一部を書き込みなど、いくつかの構成ファイルを介して、実行可能ファイルのアクセス制御権を制御します。
- 第六は、システムコールのうちの一つの制御です。
- 第七は、子プロセスが父の許可よりも制限を取得することができます。
実際には、昨年秋には、その権限の一部を制御するコアです。
図は、コンテンツのためのより多くの需要を持っている場合、あなたはより詳細な情報を検索するには、この情報を学ぶことができたSecurityContextレベルおよびコンテナレベル、ポッドの構成の一例です。
七、InitContainer
InitContainerはじめに
その後InitContainerを見て、最初の区別InitContainerと通常のコンテナ、以下の3点を紹介:
- InitContainerは、最初に通常のコンテナの前に開始され、正常に実行された後に、すべてのInitContainerまで、通常のコンテナが有効になります。
- InitContainerは、通常のコンテナが同時に開始されている間、第二の実装を成功した後に再度行う実行を開始するために定義されている間、
- 通常のコンテナが実行されている可能性がありながらInitContainerは、終了の成功裡の妥結後に実行しました。これは、長年のであってもよいし、それが失敗し再起動しますが、これはInitContainer場所通常のコンテナと異なっています。
上記の3つのポイントによると、私たちはInitContainerの使用を見てください。実際には、それは主に通常のコンテナサービスで、例えば、それは普通のコンテナを開始する前に初期化し、またはそれはいくつかの設定ファイルを準備するために行うことができますが、設定ファイルがいくつか変更することがあります。別の例は、ユニコムのネットワークかどうかなどの検証のいくつかの前提条件を実行することです。
上記のスクリーンショットは、それがKUBE-フランネル通常コンテナが開始する前に、このためInitContainerネットワークプロファイルの一部を製造するために主に、フランネル成分の構成InitContainerあります。
本論文では、要約したもの
- ConfigMapとシークレット:秘密はConfigMapと作成と使用のシナリオの方法を紹介した後、共通点のConfigMapの注意を使用して、秘密と仕上げを分類しました。最後に、使用してミラーリング構成民間倉庫。
- ポッド認証:最初のリードポッド権管理(すなわち、RBAC構成管理)一方、導入及び秘密ServiceAccount関係、次いでポッド認証処理とは、ソースの観点から実装の詳細を分析します。
- コンテナリソースとセキュリティは:第1の共通のコンテナリソースタイプ(CPU /メモリ)の設定を導入し、その後、ポッドの分類内容に対するサービスの品質。一方SecurityContextが効果的な階層的な権限と設定項目の簡単な説明。
- InitContainer:最初InitContainer、通常容器とのInitContainer差の使用を導入しました。次に、本実施形態の実際の使用に基づいてInitContainer使用を説明してきました。
アリババクラウドネイティブマイクロチャネルパブリック番号(ID:Alicloudnative)マイクロサービス、サーバレス、コンテナ、サービスメッシュ及び他の技術分野に焦点を当て、クラウドネイティブで人気の技術動向を中心に、クラウドネイティブの大規模な着陸の練習、ほとんどがクラウドネイティブ開発を理解してください公共の番号。