3.7. seLinuxChangePolicy を使用して Pod のタイムアウトを減らす
SELinux (Security-Enhanced Linux) は、システム上のすべてのオブジェクト (ファイル、プロセス、ネットワークポートなど) にセキュリティーラベル (コンテキスト) を割り当てるセキュリティーメカニズムです。これらのラベルにより、プロセスが何にアクセスできるか決まります。Red Hat OpenShift Service on AWS において、SELinux はコンテナーのエスケープや、ホストシステムや他のコンテナーへのアクセスを防ぐ役割を果たします。
Pod が起動すると、コンテナーランタイムは、Pod の SELinux コンテキストに合わせて、ボリューム上のすべてのファイルに対して再帰的にラベルの再設定を行います。多くのファイルを含むボリュームの場合、これにより Pod の起動時間が大幅に長くなる可能性があります。
マウントオプションは、-o context マウントオプションを使用して正しい SELinux ラベルでボリュームを直接マウントしようとすることで、すべてのファイルの再帰的なラベル付けを回避するように指定します。これにより、Pod のタイムアウト問題を回避することができます。
RWOP と SELinux マウントオプション
ReadWriteOncePod (RWOP) 永続ボリュームは、デフォルトで SELinux マウント機能を使用します。
マウントオプション機能はドライバーに依存しており、AWS EBS および Red Hat OpenShift Data Foundation ではデフォルトで有効になっています。サードパーティーのドライバーは、ストレージベンダーにお問い合わせください。
RWO、RWX、SELinux マウントオプション
ReadWriteOnce (RWO) および ReadWriteMany (RWX) ボリュームは、デフォルトでラベルの再帰的な再設定を使用します。
今後の Red Hat OpenShift Service on AWS バージョンでは、RWO および RWX ボリュームは デフォルトでマウントオプション を使用します。
今後のマウントオプションのデフォルトへの移行を支援するために、Red Hat OpenShift Service on AWS 4.20 では、潜在的な競合を知らせるために Pod の作成時および Pod の実行時に SELinux 関連の競合を報告し、解決できるようにします。このレポートの詳細は、Kowledge Base の記事 を参照してください。
SELinux 関連の競合を解決できない場合は、選択した Pod または namespace のデフォルトとして、今後のマウントオプションへの移行を事前にオプトアウトできます。オプトアウトする場合は、SELinux マウントオプションのデフォルトをオプトアウトする を参照してください。
3.7.1. RWO、RWX、SELinux マウントオプション機能のテスト リンクのコピーリンクがクリップボードにコピーされました!
Red Hat OpenShift Service on AWS 4.20 では、RWO および RWX ボリュームのマウントオプション機能をテクノロジープレビュー機能として評価できます。
RWO/RWX SELinux マウントはテクノロジープレビュー機能です。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビュー機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行い、フィードバックを提供していただくことを目的としています。
Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。
マウントオプション機能を評価するには、以下を実行します。
フィーチャーゲートを有効にします。フィーチャーゲートを有効にする方法については、フィーチャーゲートを使用した機能の有効化 セクションを参照してください。
RWO および RWX ボリュームには、デフォルトの動作としてマウントオプションが追加されました。
アプリケーションを慎重にテストし、ストレージがどのように使用されているかを観察します。問題が発生する場合は、この ナレッジベースの記事 を参照して、マウントオプションをオプトアウトすることを検討してください。SELinux マウントオプションのデフォルトをオプトアウトする セクションを参照してください。
3.7.2. SELinux マウントオプションのデフォルトをオプトアウトする リンクのコピーリンクがクリップボードにコピーされました!
マウントオプションの今後の移行をデフォルトでオプトアウトする場合は、個々の Pod または namespace レベルで seLinuxChangePolicy パラメーターを Recursive に設定します。
3.7.2.1. namespace レベルでの seLinuxChangePolicy の変更 リンクのコピーリンクがクリップボードにコピーされました!
任意の seLinuxChangePolicy 設定を namespace レベルで適用すると、その後その namespace に作成されるすべての Pod に、その設定が継承されます。ただし、個々の Pod に継承された seLinuxChangePolicy 設定は、必要に応じてオーバーライドできます。Pod レベルで seLinuxChangePolicy を設定すると、その Pod に継承された namespace レベルの設定がオーバーライドされます。
前提条件
- 管理者特権で Red Hat OpenShift Service on AWS クラスターにログインした。
- Red Hat OpenShift Service on AWS にアクセスできる。
手順
namespace ごとに SELinuxChangePolicy を設定するには、以下を実行します。
任意の namespace を選択します。
- Administration > Namespaces をクリックします。
- Namespaces ページで、任意の namespace をクリックします。Namespace details ページが表示されます。
seLinuxChangePolicyラベルを namespace に追加します。- Namespace details ページで、Labels の横にある Edit をクリックします。
Edit labels ダイアログで、
storage.openshift.io/selinux-change-policy=Recursiveラベルを追加します。これは、Pod ボリューム上のすべてのファイルに対して、適切な SELinux コンテキストへの再帰的なラベルの再設定を行うように指定します。
- Save をクリックします。
検証
編集した namespace で Pod を起動し、spec.securityContext.seLinuxChangePolicy パラメーターが Recursive に設定されていることを確認します。
seLinuxChangePolicy 設定を示す pod YAML ファイルの例
- 1
- この値は namespace から継承されます。
3.7.2.2. Pod レベルでの seLinuxChangePolicy の変更 リンクのコピーリンクがクリップボードにコピーされました!
新規または既存のデプロイメントで seLinuxChangePolicy パラメーターを設定すると、管理する Pod にこのパラメーター値が適用されます。同様に、StatefulSet でもこれを行うことができます。既存の Pod を編集して seLinuxChangePolicy を設定することはできませんが、新しい Pod を作成するときにこのパラメーターを設定することはできます。
この手順では、既存のデプロイメントで seLinuxChangePolicy パラメーターを設定する方法について説明します。
前提条件
- Red Hat OpenShift Service on AWS にアクセスできる。
手順
既存のデプロイメントで seLinuxChangePolicy パラメーターを設定するには、以下を実行します。
- Workloads > Deployments をクリックします。
- Deployment ページで、任意のデプロイメントをクリックします。
- Deployment details ページで、YAML タブをクリックします。
次のサンプルファイルに従って、
spec.template.spec.securityContextの下にあるデプロイメントの YAML ファイルを編集します。seLinuxChangePolicyを設定するデプロイメント YAML ファイルの例... securityContext: seLinuxChangePolicy: Recursive ...
... securityContext: seLinuxChangePolicy: Recursive1 ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- すべての Pod ボリューム上のすべてのファイルに対して、適切な SELinux コンテキストへの再帰的なラベルの再設定を行うように指定します。
- Save をクリックします。