web-dev-qa-db-ja.com

Red Hat Network Subscriptionでのyumは、rhel Dockerイメージ内でどのように機能しますか?

Red Hat Enterprise Linux 7にはDockerコンテナーの実行に対する公式サポートが含まれており、Red Hatは一連の公式rhel Dockerイメージを提供しています。これらのイメージの興味深い機能は、コンテナー内で構成を実行する必要なく、ホストのRed Hat Networkサブスクリプションを介してパッケージをインストールできることです。

引用するには https://access.redhat.com/articles/881893#createimage

「現在のRed Hat Dockerリリースでは、Red HatからプルしたデフォルトのRHEL 7 Dockerイメージは、ホストシステムから利用可能なRHEL 7エンタイトルメントを利用できます。したがって、Dockerホストが適切にサブスクライブされてお​​り、リポジトリがコンテナーに必要なソフトウェアを取得する必要があり(かつDockerホストからインターネットにアクセスできる必要がある場合)、RHEL 7ソフトウェアリポジトリからパッケージをインストールできるはずです。」

私の懸念は、これが達成されるメカニズムがかなり不透明であることです。たとえば、rhel7.1イメージで新しいコンテナーを開始する場合、httpプロキシ環境変数を構成しなくてもyum install fooを実行することが可能です。このメカニズムを理解していないと、システム管理者は、ホストシステム、Dockerデーモン、および実行中のコンテナー間の未知の相互作用に翻弄される可能性があります。これは、ホストとコンテナの間の通常の分離が何らかの方法で損なわれていることも示唆しています(ただし、害はありません)。

要点を述べると、このサブスクリプションサポートはどのようにして実現され、サブスクリプションネットワーク経由でRed Hatが提供するDockerデーモンのカスタムビルドに依存していますか?

10
Leynos

Red Hatは、「シークレット」パッチと呼ばれるdockerへのパッチを実行します。これにより、実行時にエンタイトルメント情報がコンテナにマウントされます。

projectatomic/docker リポジトリで、パッチのより良い説明とアップストリームPRへのリンクを確認できます。

https://github.com/projectatomic/docker/tree/docker-1.13.1-rhel#add-rhel-super-secrets-patchpatch

運ばれたすべてのパッチ情報を表示するには、ブランチの1つを選択する必要があります(リンクは「docker-1.3.1-rhel」ブランチに移動します)。

4
rageear

Red Hat Satelliteで管理されている仮想マシンのライセンス方法を知っており、@ Leynosのコメントから離れると、仮想化ホスト(vSphere、KVMなど)と通信するサービスであるvirt-whoに類似したものがあると思います)、それをクエリしてVMの詳細を検索します。次に、VMがホストのデータセンターライセンスを使用できるようにするために、Satelliteで必要なAPI呼び出しを実行します。

Red Hat Dockerデーモンが同様の機能を提供し、コンテナーがサブスクライブされたDockerホストから実行されていることをコンテナーに認識させ、そのサブスクリプションを利用することを期待します。

また here から:

重要:このトピックで説明するように、dockerコマンドを使用してコンテナーを実行する場合、RHEL Atomic Hostシステムを登録してサブスクリプションをアタッチする必要はありません。ただし、コンテナー内でyum installコマンドを実行する場合は、コンテナーがRHEL Atomic Hostから有効なサブスクリプション情報を取得する必要があります。そうでない場合、コンテナーは失敗します。

そのため、コンテナーまたはデーモンのいずれかに、ホストにクエリを送信してサブスクリプション情報を見つけることができるものがあります(おそらくレポ情報も同様です)。

2
shearn89