Kubernetes-保護クラスタノードとネットワークセキュリティ内で

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。ホスト・ノード

   PIDは、プロセスID、PPIDは親であるプロセスID

   複数のプロセス間の相互通信の処理である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:ポッドの//データベースそして唯一のアプリがあります。ポッドのウェブサーバは、通信
          アプリを:ウェブサーバ

  

 

おすすめ

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