OpenShift と NCP をセットアップする前に、次のことに注意してください。

  • ポッドのラベル数は 11 個以下に、名前空間のラベル数は 12 個以下にする必要があります。

  • OpenShift の内部用に追加したラベル、たとえば キーに openshift.io プリフィックスの付いているラベルなどは NCP で無視されます。そのため、関連する NSX リソースで作成される対応するタグは、ユーザーに表示されません。次は、OpenShift で使用されるラベル プリフィックスの一覧です。これらのプリフィックスで始まるラベル キーは使用しないでください。

        openshift.io
        pod-template
  • ノードは、Kubelet health-checks などのポッドにアクセスする必要があります。ホストの管理インターフェイスがポッド ネットワークにアクセスできることを確認してください。

  • NET_ADMIN と NET_RAW の Linux 機能は、ポッド ネットワークに侵入した攻撃者によって悪用される可能性があります。信頼されていないコンテナでは、これらの 2 つの機能を無効にする必要があります。デフォルトで、制限付きの anyuid SCC では、NET_ADMIN に権限は付与されません。NET_ADMIN を明示的に有効にする SCC や、ポッドを特権モードで実行する SCC には注意してください。信頼されていないコンテナでは、NET_RAW 機能を持たない anyuid SCC など、別の SCC を作成してください。この設定を行うには、SCC 定義で NET_RAW を「requiredDropCapabilities」リストに追加します。

  • テストの場合にのみ、ポッド/コンテナに root アクセスを許可します。次のコマンドを実行するには、現在ログインしている OpenShift プロジェクトのすべてのポッドで root 権限が必要になります。

        oc new-project test-project
        oc project test-project
        oc adm policy add-scc-to-user anyuid -z default
  • OpenShift レジストリを設定(追加)します。

        oc login -u system:admin -n default
        oc adm registry --service-account=registry --config=/etc/origin/master/admin.kubeconfig
  • OpenShift レジストリを削除します。

        oc login -u system:admin -n default
        oc delete svc/docker-registry dc/docker-registry
  • Docker のデフォルト ブリッジ コンテナから、ノードの dnsmasq プロセスへの DNS 要求を許可する IPtables ファイアウォール ルールはありません。これを手動で追加する必要があります。/etc/sysconfig/iptables を編集して、ファイルの最後にある COMMIT の前に次のルールを追加します。

        -A OS_FIREWALL_ALLOW -p tcp -m state --state NEW -m tcp --dport 53 -j ACCEPT
        -A OS_FIREWALL_ALLOW -p udp -m state --state NEW -m udp --dport 53 -j ACCEPT
        COMMIT
  • iptables、Docker、origin-node を再起動します(kube-proxy と kubelet を再起動します)。

        systemctl restart iptables
        systemctl restart docker
        systemctl restart origin-node
  • OpenShift の内部 Docker レジストリで、TLS 以外で OpenShift が機能するように許可する必要があります。通常、これは OpenShift Ansible インストーラによって自動的に追加されますが、機能していない可能性があります。/etc/sysconfig/docker を編集して、次を追加します。

        INSECURE_REGISTRY='--insecure-registry 172.30.0.0/16'
  • Docker を再起動します。

    systemctl restart docker
  • NCP がサポートする ネットワーク ポリシーは Kubernetes と同じであり、Kubernetes のバージョンによって異なります。

    • OpenShift 3.9: ネットワーク ポリシーのルール句に、namespaceSelectorpodSelector、および ipBlock のセレクタが最大で 1 つ含まれている場合があります。

  • Kubernetes API サーバは、ネットワーク ポリシー仕様の検証は実行しません。無効なネットワーク ポリシーを作成してしまう可能性もあります。NCP は、無効なネットワーク ポリシーを拒否します。ネットワーク ポリシーを更新して有効にしても、NCP はそのネットワーク ポリシーを処理しません。ネットワーク ポリシーを削除し、仕様が有効なネットワーク ポリシーを再作成する必要があります。

  • Kubernetes の一部のバージョンで subPath に関連する問題があります(https://github.com/kubernetes/kubernetes/issues/61076 を参照)。OpenShift バージョンにこの問題の修正が含まれていない場合は、CreateContainerConfigError: failed to prepare subPath for volumeMount(CreateContainerConfigError: volumeMount のサブパスの準備に失敗しました) というエラーが発生して、NCP ポッドの作成に失敗します。この問題を回避するには、NCP yaml から subPath の使用を削除します。特に、subPath: ncp.ini を含む行を削除して、volumes の設定を次の内容で置き換えます。

        volumes:
          - name: config-volume
            # ConfigMap nsx-ncp-config is expected to supply ncp.ini
            configMap:
              name: nsx-ncp-config
              items:
                - key: ncp.ini
                  path: ncp.ini

    この変更により、/etc/nsx-ujo ディクトリ全体が読み取り専用になります。その結果、NCP は etc/nsx-ujo の下に一時ファイルを作成して証明書とプライベート キーの両方を 1 つのファイルに移動できなくなるため、証明書およびプライベート キーを使用して NSX-T と接続できなくなります。

  • OpenShift 3.10 クラスタのアップグレードまたは実行時には、次の点に注意してください。

    • ノード グループは、OpenShift 3.10 クラスタに固有の構成を指定する必要があります。インベントリ ホスト ファイルでノード設定マップが指定されている必要があります。

    • インベントリ ホスト ファイルの [nodes] グループで定義されているすべてのホストは、ノード グループ名に割り当てる必要があります。

    • Ansible Playbook から OpenShift クラスタをアップグレードすると、ネットワークが切断される可能性があります。openshift-ansible リポジトリにパッチ (https://github.com/openshift/openshift-ansible/pull/8016/files#diff-2386e21861da3f95091dbb27d72ca366) を追加し、Open vSwitch パッケージの停止/アンインストールが解除されるようにします。

  • OpenShift 3.10 以降では、kube-proxy が openshift-node ノード サービスから DaemonSet に移動されています。デフォルトでは開始されなくなりました。kube-proxy は、以下の手順を実行して手動で開始する必要があります(openshift-ansible repo はクローン作成されていることが前提です)。

    • openshift-ansible ディレクトリに移動し、[defaults] で次の設定を実行します。

          library = roles/lib_utils/library/
    • 以下のエントリで、Playbook ディレクトリに create_proxy.yaml ファイルを作成します。

          - import_playbook: byo/openshift_facts.yml
          - hosts: masters
            run_once: True
            roles:
              - kube_proxy_and_dns
    • 以下のように Playbook を実行します。

          ansible-playbook -i hosts playbooks/create_proxy.yaml

      一部の処理の失敗を示すエラー メッセージが表示されます。このメッセージは無視してください。コマンド oc get po --all-namespaces を実行して結果を確認できます。