6.6. NetworkPolicy を使用したマルチテナント分離の設定

他のプロジェクトの Pod およびサービスから分離できるようにプロジェクトを設定できます。

前提条件

  • mode: NetworkPolicy が設定された OpenShift SDN ネットワークプラグインを使用するクラスター。このモードは OpenShiftSDN のデフォルトです。
  • oc として知られる OpenShift コマンドラインインターフェース (CLI) をインストールします。
  • クラスターにログインする必要があります。

手順

  1. NetworkPolicy オブジェクト定義が含まれる以下のファイルを作成します。

    1. 以下を含む allow-from-openshift-ingress.yaml という名前のファイル。

      apiVersion: networking.k8s.io/v1
      kind: NetworkPolicy
      metadata:
        name: allow-from-openshift-ingress
      spec:
        ingress:
        - from:
          - namespaceSelector:
              matchLabels:
                network.openshift.io/policy-group: ingress
        podSelector: {}
        policyTypes:
        - Ingress
    2. 以下を含む allow-from-openshift-monitoring.yaml という名前のファイル。

      apiVersion: networking.k8s.io/v1
      kind: NetworkPolicy
      metadata:
        name: allow-from-openshift-monitoring
      spec:
        ingress:
        - from:
          - namespaceSelector:
              matchLabels:
                network.openshift.io/policy-group: monitoring
        podSelector: {}
        policyTypes:
        - Ingress
  2. 各ポリシーファイルについて、以下のコマンドを実行し、NetworkPolicy オブジェクトを作成します。

    $ oc apply -f <policy-name>.yaml \ 1
      -n <project> 2
    1
    <policy-name> を、ポリシーを含むファイルのファイル名に置き換えます。
    2
    <project> を NetworkPolicy オブジェクトを適用するプロジェクトの名前に置き換えます。
  3. default Ingress コントローラー設定に spec.endpointPublishingStrategy: HostNetwork の値が設定されている場合、ラベルを default OpenShift Container Platform namespace に適用し、Ingress コントローラーとプロジェクト間のネットワークトラフィックを許可する必要があります。

    1. default Ingress コントローラーが HostNetwork エンドポイント公開ストラテジーを使用するかどうかを判別します。

      $ oc get --namespace openshift-ingress-operator ingresscontrollers/default \
        --output jsonpath='{.status.endpointPublishingStrategy.type}'
    2. 直前のコマンドによりエンドポイント公開ストラテジーが HostNetworkとして報告される場合には、default namespace にラベルを設定します。

      $ oc label namespace default 'network.openshift.io/policy-group=ingress'
  4. オプション: 以下のコマンドを実行し、NetworkPolicy オブジェクトが現在のプロジェクトに存在することを確認します。

    $ oc get networkpolicy <policy-name> -o yaml

    以下の例では、allow-from-openshift-ingress NetworkPolicy オブジェクトが表示されています。

    $ oc get networkpolicy allow-from-openshift-ingress -o yaml
    
    apiVersion: networking.k8s.io/v1
    kind: NetworkPolicy
    metadata:
      name: allow-from-openshift-ingress
      namespace: project1
    spec:
      ingress:
      - from:
        - namespaceSelector:
            matchLabels:
              network.openshift.io/policy-group: ingress
      podSelector: {}
      policyTypes:
      - Ingress