13.1。Linuxの名前空間にポッドでホスト・ノードを使用します
13.1.1。ネットワークの名前空間ポッドでホストノードを使用します
真:Spec.hostNetworkはのYAMLファイルポッドに設定されています
あなたはポートを設定した場合、ホストのネットワークを使用してこの時間ポッドは、ホストのポートを使用します。
apiVersion:V1 種類:POD メタデータ: 名前:POD-ホストyaohongの スペック: hostNetwork://真のネットワーク名前空間にホストノードを使用して コンテナ: -画像:Luksa / kubia コマンド:[ "/ binに/ SLEEP"、 "9999" ]
13.1.2。ホストネットワークノードの名前空間を使用することなく、ホストノード上のポートをバインド
YAMLファイルでポッドはspec.containers.portsを設定するには、フィールドに設定されています
ポートは、フィールドで使用することができます
ポッドを介してIPポートアクセスを設定しcontainerPorts
どこノードを介してcontainer.hostPort設定ポートへのアクセス
apiVersion:V1 種類:POD メタデータ: 名前:kubia-のHostPort-yaohong 仕様: コンテナ: -画像:Luksa / kubia -名前:kubia ポート: - containerport:8080 //ポートポッドのIPを介して容器にアクセスする ホスト側:9000 //容器は、9000ポートアクセスノードとすることができる プロトコル:TCP
PID IPCを使用して13.1.3。ホスト・ノード
複数のプロセス間の相互通信の処理であるIPC(プロセス間通信)と呼ばれるLinuxの、で複数のプロセス間の通信機構。
apiVersion:v1の 種類:ポッド メタデータ: 名前:ポッドと-ホスト-PID-と-IPC-yaohongの スペック: hostPID:// trueにあなたは、このポッドホストノードPID名前空間を使用したい hostIPCを:真//あなたがポッドを使用したいですIPCホストノードの名前空間 コンテナ: -名前:メイン 画像:アルパイン コマンド:[ "/ binに/ SLEEP"、 "99999"]
13.2。セキュリティコンテキストの構成ノード
13.2.1。指定されたユーザのコンテナを実行します
ユーザーはポッドランニングを表示します
$ kubectl -n KUBE系のEXEC coredns-7b8dbb87dd-6ll7z IDの UID = 0(ルート)GID = 0(ルート)基= 0(ルート)、1(ビン)、2(デーモン)、3(SYS)、4( ADM)、6(ディスク)、10(車輪)、11(フロッピー(登録商標))、20(ダイヤルアウト)、26(テープ)、27(ビデオ)
ユーザーコンテナを実行してから、指定されていない場合DockerFileは、ルートと比較して、指定されました
ユーザーが指定したポッドを実行すると、以下の
apiVersion:V1の 種類:POD メタデータ: 名前:POD-AS-ユーザー 仕様: コンテナ: -名前:メイン 画像:アルパイン コマンド:[ "/ binに/ SLEEP"、 "99999"] SecurityContextが: runAsUser:405 //次のように指定する必要がありますユーザーID、いないユーザー名
13.2.2。ルートとしてコンテナを防止するため、
runAsNonRootセット
apiVersion:V1 種類:POD メタデータ: 名:AS-ユーザー-POD 仕様: コンテナ: -名前:メイン 画像:アルパイン コマンド:[ "/ binに/ SLEEP"、 "99999"] SecurityContextが: runAsNonRoot:唯一の真に//このコンテナ非rootユーザーの実行を許可
13.2.3。特権モードポッド
完全なアクセス許可ホストカーネルを得るために、ポッドは、特権モードで実行する必要があります。私たちは、真の特権パラメータを追加する必要があります。
apiVersion:V1 種類:POD メタデータ: 名:AS-POD-特権 仕様: コンテナ: -名前:メイン 画像:アルパイン コマンド:[ "/ binに/ SLEEP"、 "99999"] SecurityContextが: 特権:trueに//このコンテナ特権モードで実行します
13.2.4。別の容器には、カーネル関数を追加します
apiVersion:V1 種類:POD メタデータ: 名:AS-機能-POD 仕様: コンテナ: -名前:メイン 画像:アルパイン コマンド:[ "/ binに/ SLEEP"、 "99999"] SecurityContextが: 機能:このパラメータ//ポッドはのコア機能を追加したり、無効に 追加する: - SYS_TIMEは//システムパラメータに変更を加えます
13.2.5。コンテナ内のカーネル関数の使用を禁止します
apiVersion:V1 種類:POD メタデータ: 名:AS-機能-POD 仕様: コンテナ: -名前:メイン 画像:アルパイン コマンド:[ "/ binに/ SLEEP"、 "99999"] SecurityContextが: 機能:このパラメータ//ポッドは、カーネル関数の追加または無効に ドロップ: - //禁止CHOWNコンテナは、ファイルの所有者を変更します
13.2.6。コンテナルートファイルシステムへの書き込みを停止
securityContext.readyOnlyFilesystem真のルート・ファイル・システム・コンテナを達成するために書き込みを防止するために設定。
apiVersion:v1の 種類:POD メタデータ: 名前:POD-と、ファイルシステムReadonly- 仕様: コンテナ: -名前:メイン 画像:アルパイン コマンド:[ "/ binに/ SLEEP"、 "99999"] SecurityContextが: readyOnlyFilesystem://これをtrueにルートファイルシステムは、コンテナを書くことはできません volumeMountsを: -名前:私のボリューム MOUNTPATHを:/ボリュームvolume //書き込みが許可されている、ディレクトリがストレージ・ボリュームをマウントされているため、 読み取り専用:偽
13.3安全関連機能ポッドの使用を制限します
13.3.1.PodSecurityPolicyリソースはじめに
PodSecurityPolicyは、ユーザがポッド内の安全関連機能の多様を使用できるかどうかを定義するリソースのクラスタレベル(NO名前空間)です。
13.3.2はrunAsUser、fsGroups戦略とsupplementalGroup学びます
runAsUserは次のとおりです。 runle:MustRunAsの 範囲: -分://、範囲内に=分2、最大の追加のユーザー2のためのIDを指定する 最大:2 fsGroup: ルール:MustRunAsの 範囲: -分:2 最大:10 //複数追加します2-10または20-30のID限界間隔 -分:20である 最大:30 supplementalGroups: ルール:MustRunAsの 範囲: -最小:2 、最大10 -分:20である 最大:30
13.3.3。設定は、デフォルトを追加し、可能にカーネル関数の使用を禁止します
3つのフィールドは、コンテナの使用に影響を与えます
allowedCapabilities:コンテナはカーネル関数に追加することができます指定
defaultAddCapabilities:すべてのコア機能のための追加のコンテナ
requiredDropCapabilities:カーネル関数コンテナを禁止
apiVersion:V1 種類:PodSecurityPolicyの 仕様: allowedCapabilities: -コンテナはSYS_TIME SYS_TIME //機能を追加できるようにする defaultAddCapabilitiesを: -自動的に各コンテナ用CHOWN CHOWN //機能を追加 requiredDropCapabilities: - SYS_ADMINを無効にする// SYS_ADMINクレームSYS_MODULEコンテナと機能を
13.4。ネットワークの分離ポッド
13.4.1。ネットワークの名前空間上の孤立を使用します
podSelector名前空間を分離するために、ポッドの下で実行
apiVersion:networking.k8s.io/v1 種類:NetworkPolicy メタデータ: 名前:Postgresの-netpolicy スペック: podSelector://この戦略は、ポッドの安全性を確保し、アクセスアプリ=データベースタグあり matchLabels: アプリケーション:データベースの 侵入を: -から: - podSelector://のみポッドからのアクセスを可能にするには、アプリ= Webサーバのラベルあり matchLabelsを: アプリケーション:ウェブサーバ のポートを: -ポート:5432 //このポートへのアクセスを許可します
異なる名前空間kubernetes間13.4.2。ネットワークの分離
namespaceSelector異なる名前空間の間のネットワーク分離すること
apiVersion:networking.k8s.io/v1 種類:NetworkPolicy メタデータ: 名前:Postgresの-netpolicy スペック: podSelector://この戦略は、ポッドの安全性を確保し、アクセスアプリ=データベースタグあり matchLabels: アプリケーション:データベースの 侵入を: -から: - namespaceSelector://だけでテナントを許可:相互アクセスで実行されているポッドの名前空間配乗タグ :matchLabels テナント:配乗 ポート: -ポート:5432 //このポートへのアクセスを許可します
13.4.3 CIDRネットワーク分離を使用して
イングレス: -から: - IPBlock: CIDR://指定192.168.1.0/24すると、IPセグメントへのアクセスを許可
13.4.4。外部交通規制ポッド
出力制限を使用します
スペック: podSelector://この戦略は、ポッドの安全性、アクセスアプリ=データベースタグ持って保証します :matchLabelsを アプリケーション:データベース :出口//ネットワークトラフィックのポッドを制限 : -へ - podSelector: matchLables:ポッドの//データベースそして唯一のアプリがあります。ポッドのウェブサーバは、通信 アプリを:ウェブサーバ