Hatの福岡オフィスでソリューションアーキテクトをしている田中司恩です。4.2で追加された「ネットワークが制限された環境でのインストール」について説明します。説明に使用する環境構成は以前に書いた記事と同様ですので、合わせてこちらもご参照ください。rheb.hatenablog.com本記事の章立てはこのようになります。(2019/12/7追記。networkと表記されています。他の呼び方として、DisconnectedやAir-gappedなどと呼ばれることもあります。今回取り扱う内容においては、いずれもOpenShiftクラスターがインターネットへの通信ができない環境を指す、とご理解の上読み進めてください。4はインストールの要件としてインターネットへの接続が必須となっています。オンプレミスの環境では強固に制限されたネットワーク環境があることが多く、またそこへOpenShiftクラスターを展開したいという要望もあると思います。今回ご紹介する方法により、OpneShiftクラスターをネットワークが制限された環境への導入が可能となります。HubからのOperatorインストールインターネットのソースやイメージを利用したデプロイetc...検証環境解説インストール手順の説明の前に、今回の説明に使用する検証環境の説明を行います。UPIインストール記事からお馴染みの図となりますが、今回はネットワークの制限をより明確にしています。ミラーされたイメージをホストするためのレジストリーホストを追加しています。[図2]検証環境ネットワーク構成図ネットワークの通信可否は下記のようになっており、検証用ネットワークからは社内ネットワーク側には通信ができません。検証用ネットワーク:インターネット通信不可また、今回の構成においてOpenShiftクラスターへのアクセスは社内ネットワークからとし、片方向からのみのアクセスを許可する構成となっています。踏み台サーバーのfirewalldは下記のように変更します。今回もベアメタルへのUPIインストールをベースに説明していきます。該当するドキュメントは下記です。ネットワークが制限された環境でのクラスターのベアメタルへのインストール※注意)公式ドキュメント上のbationホストは、本文中ではレジストリーホストを指します。記事も参考にし、ドキュメントに足りない情報を付け加えています。blog.openshift.com作業項目が多いので、まずは下記の作業サマリをご確認ください。Managerの登録UPIインストール作業自体は4.1/4.2と同様ですが、前後に独自の作業が追加となっています。次の項目からが実際の作業となります。基本的にはドキュメント通りの作業となります。必要最低限の前提条件は下記です。ミラーレジストリーの作成ここでの作業の目的は、podmanコマンドを使ってmirror-registryコンテナを起動することです。コンテナ起動時に必要な証明書の作成も行います。前提条件は下記の通りです。サーバーがネットワーク上にあるレジストリーホストはインターネットにアクセスできる。レジストリーのフォルダーを作成します。filesこれらのフォルダーはレジストリーコンテナー内にマウントされます。domain.crt下記は証明書作成時の情報入力のサンプルです。形式を使用するレジストリー用のユーザー名およびパスワードを生成します。下記は、/opt/registry/auth/htpasswdにユーザー名:user、パスワード:userのユーザー作成例です。レジストリーに必要なポートを開きますドキュメントの通りにinternalとpublicゾーンに設定を行うため、NICのゾーン変更も合わせて行います。デフォルト状態からの設定変更についてのみ記載しています。不要なサービスなどは個々の環境に合わせて調整してください。信頼された証明書の一覧に自己署名証明書を追加しますシステム全体で使用されるトラストストアに作成した自己署名証明書を追加し、この後の作業で証明書が信頼された物として実行できるようにします。コンテナーを作成します。ここで指定するパラメーターに間違いや、環境不備などがあるとコンテナが正常に起動しません。podmanコマンドを使用したコンテナの簡単な実行/リカバリー方法について記事末尾にまとめましたので、詳細はそちらを参照ください。指定し、コンテナをバックグラウンド起動するコマンド例です。この時点でdocker.ioからイメージをダウンロードするので、インターネットへアクセスができる必要があります。レジストリーが使用できることを確認します下記のコマンドを実行します。合わせてfirewallの設定を確認する場合は、別のホストから実行してください。https://registry.test.example.local:5000/v2/_catalog下記のように空のリポジトリの情報が表示されれば、正常にレジストリーコンテナが起動しています。ミラーレジストリーのプルシークレットの作成ここでは、起動したレジストリーコンテナに登録したユーザー名/パスワードで接続を行い、プルシークレットを入手します。1.4で作成した物を使用します。Succeeded!入手したプルシークレットの中身を確認します。}なお、authに指定されているパラメーターは、ユーザー名:パスワードをbase64でエンコードした値になっています。追加作業ドキュメントには記載されていませんが、追加で必要な作業を実施します。ここから以降は、マージしたプルシークレットpull-secret-2.txtを使用しますこれ以降の手順では、ドキュメント上では一般ユーザーでの実行となっており、同様に行うためにプルシークレットを一般ユーザーディレクトリにコピーします。ここではドキュメント通り。#マージしたプルシークレットを絶対パスで指定。セクションを記録します。この情報は、この後のUPIインストールの設定ファイルの作成時に使用します。インストールプログラムの作成この手順は、ミラーしたイメージからopenshift-installコマンドを入手する手順となります。registry.test.example.local:5000/ocp4/openshift4@sha256:cebce35c054f1fb066a4dc0a518064945087ac1f3637fe23d2ee2b0c433d6ba8ocコマンド入手時にopenshift-installも入手されている場合はこの手順は不要です。いう手順がありますが、実際にはこの手順はクラスターのインストール実行後に行う作業となります。Operatorの設定を参照ください。UPIインストールと同様です。本記事では追加となる作業についてのみ記載します。該当するドキュメントは下記の章になります。インストール設定ファイルの手動作成ここでは、インストール設定ファイルinstall-config.yamlを作成しますが、その中にミラーレジストリーの情報を追加します。CERTIFICATE-----pullSecret:にはミラーレジストリーから入手したプルシークレットの内容を記載します。下記のjqコマンドを使うとプルシークレットの内容を一行で表示できます。~/pullsecret_config.json{"auths":{"registry.test.example.local:5000":{"auth":"dXNlcjp1c2Vy"}}}additionalTrustBundle:には作成した自己署名証明書の内容を記載します。証明書の内容は下記のコマンドで確認できます。CERTIFICATE-----※注意:install-config.yamlに証明書の内容を記載する際は、各行頭にスペースを追加してインデントしてくださいインストールの実行install-config.yaml作成後の手順は通常と同じです。UPIインストールの手順を参考にしてください。インストール後の作業エラー表示への対処インストール後、ダッシュボードおよびMonitoring/Alertingに、TelemeterClientDownのアラートが表示されます。クラスターからインターネットへの接続が制限されているためにこのエラーが発生しています。今回の構成において、クラスターのグローバルクラスタープルシークレットはミラーレジストリーから入手した内容になっていますので、事実上Telemetry機能は無効です。Portalこの状態でもアラートは表示され続けるため、アラートをサイレンスに設定します。Alertを選択します。Alertの詳細入力画面になったら、StartとEndの期間を指定し、必要に応じてCreator/Commentを記入してCreateを選択します。Alert詳細入力画面その後、TelemeterClientDownのStateがSilencedに変化し、ダッシュボードのアラート表示も消えます。Operatorの設定インストール前に行ったリポジトリのミラーリングでは、インストールに必要なイメージのミラーリングが行われました。registry.redhat.ioにあり、ミラーリングの作業ではこれらは対象外となります。そのため、ネットワーク制限環境下のクラスターではこれらのイメージへの参照ができず、各イメージは参照エラーとなります。OperatorもDegratedになります。対処法は二つあります。Operatorで管理除外するイメージを個別指定する*112019/12/1追記。Operatorの設定について別記事を書きました。管理除外する方法など詳細はこちら。rheb.hatenablog.com本記事では全てのイメージの管理の無効化について説明します。下記のコマンドを実行します。Streamsに表示されるイメージ数が一気に減ります。変更後に残っているものは、インストールペイロードの一部で、ミラーリング時にquay.ioからミラーされたものです。clusterと表示され、Telemetryデータの受信が行われていないことが確認できます。[図11]クラスターの登録後、Monitoring画面アップグレードネットワーク制限環境下のクラスターではOTAが使えません。クラスターのアップグレードを行う場合は、ミラーレジストリーにアップグレードイメージをダウンロードし、そのイメージを指定して実行する必要があります。イメージリポジトリーのミラーリング」と同様です。ダウンロードバージョンの確認を行い、環境変数を設定します。OCP_RELEASE=にアップグレード先のバージョンを指定し、リポジトリのミラーリング実行を実行します。コマンドでのアップグレード手動でアップグレードを行う場合は下記のocコマンドを使用します。下記はv4.2.7を指定したアップグレードの例です。--forceコマンド実行後に下記のように表示されたらアップグレードが開始しています。registry.test.example.local:5000/ocp4/openshift4:4.2.7以降は、通常のOTAと同様にWebコンソールでアップグレードの進捗を確認します[図12]アップグレード中の進捗アップグレード完了後、指定したバージョンになっているか確認します。Imageにはコマンドで指定したレジストリーミラーのイメージが指定されています。[図13]アップグレード完了後Operatorの利用ネットワーク制限環境下でのOperatorの利用については、下記のドキュメントに記載があります。Portal本記事では内容の詳細には触れませんが、ざっと下記のような流れになります。quay.ioからOperatorのパッケージをプルし、新しくカタログイメージにして、クラスタがアクセスできるローカルレジストリー(OCP内部も可)にプッシュする。mirrorでソースイメージをローカルレジストリーにプッシュする。別記事のイメージストリームのミラーと近い内容になっていますので、こちらも合わせて参考にしてみてください。まとめネットワーク制限環境下でのインストール方法について解説しました。ここまでに記載した通り、非常に多くの手順がありその上で制限も多くあります。可能であればこの方法を行う前に、Proxy経由などでクラスターをインターネットに接続する方法をご検討ください。実行したのに、コンテナーが正常に起動しないなどの時に必要なコマンドの解説です。実行するか、下記のドキュメントを参考にして下さい。imagesローカルコンテナーのイメージが削除されたことにより、リカバリーが完了です。mirror-registry*1:本記事ではレジストリーホストの役割を明確にするために、踏み台サーバーとは別に構成しています。*2:インストールはサーバーGUIを使用。UPIインストール記事中の踏み台サーバーの構築を参照*3:既存の認証局などがあればそちらを使っても構いません*4:システム全体のトラストストアについては、次の記事を参照ください。https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/7/html/security_guide/sec-shared-system-certificates*5:2019/12/5時点で、英語/日本語の公式ドキュメントがバックグラウンド起動に修正されています。リポジトリのミラーリング実行時に、2つのプルシークレット情報が無いとミラーリングに失敗するため。英語のblog記事には手順記載あり。フィードバックは登録されているので、ドキュメント修正待ち。*7:現在はコマンドで入手する方法が無いためブラウザで実行してください*8:2.1追加作業を参照*9:ドキュメントにはオプションにプルシークレットの指定が無いので追加。これもドキュメントの修正待ち。Imageに表示されるイメージ名がquay.ioなのかローカルレジストリーなのか、程度*11:これについてだけでも結構なボリュームの内容があるので、別記事にする予定です。ソリューションアーキテクトの小島です。Hatでコンサルタントをしている織です。各記事は著者の見解によるものでありその所属組織を代表する公式なものではありません。その内容については非公式見解を含みます。スターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。