Red Hatの福岡オフィスでソリューションアーキテクトをしている田中司恩です。 今回はOpenShift 4.2で追加される「Proxy環境下でのインストール(Cluster-wide Proxy)」について説明していきます。*1
説明に使用する環境構成は前回記事と同様ですので、合わせてこちらもご参照ください。
本記事の章立てはこのようになります。
- Proxy環境下でのインストール概要
- インストール方法
- インストール後の確認
対応する日本語ドキュメントは下記になります。
6.1.7.2. インストール時のクラスター全体のプロキシーの設定
Proxy環境下でのインストール概要
OpenShift 4.1では、インストールの時点から各ノードがインターネットへ接続できる必要がありました。 OpenShift 4.2からは新たにProxyのサポートが追加され、インストール時およびインストール後のクラスターから、Proxy経由でのインターネット通信が可能となりました。 主な用途はオンプレ環境にクラスタを配置するような場合で、インターネットへのアクセスにProxyの利用が必須な状況に対応が可能です。 Proxyの問題で躊躇していたような方も、これにより検証などが進めやすくなるのではないでしょうか。
また、Proxyも無く、完全に制限された環境にクラスタを配置するオプションについてもOpenShift 4.2からサポートされます。これについては機会があれば別途解説できればと思います。*2
インストール方法
では、Proxy環境下でのインストール方法について説明していきます。 前回の記事同様に、ベアメタルでのUPIインストールを例にします。 ※なお、現時点ではOpenShift 4.2はGAになっていないので、Developer Preview版を利用して説明します。*3
インストール構成
今回利用する環境は、前回記事の環境に少し変更を加えました。
- Proxyサーバーの追加
- 踏み台サーバーのNATをオフ*4
この環境では、社内ネットワーク
のルーターは、検証用ネットワーク
への戻りルートを知らないので、結果的に検証用ネットワーク
からはProxyサーバーを経由しないとインターネットへの接続が出来ない構成となっています。*5
また、社内Proxyサーバーは、以下のような要件となっています。
- Proxyはsquidで構成
- HTTPおよびHTTPSは
TCP:8080
で待ち受け。ただし、テスト時はHTTPまたはHTTPSどちらかのみに切り替えて実行。*6 - HTTPSはSSL Bumpで構成
- ユーザー認証有り(ID: user/PASS: user)
- OSに
検証用ネットワーク
への戻りルートを静的に追加
インストール設定ファイル
UPIインストール方法自体は前回記事と同様です。
異なるのは、Proxy設定をインストール設定ファイルinstall-config.yaml
に記載する点です。
設定する内容は下記の項目です。
proxy: httpProxy: http://<username>:<pswd>@<ip>:<port> httpsProxy: http://<username>:<pswd>@<ip>:<port> noProxy: example.com additionalTrustBundle: | -----BEGIN CERTIFICATE----- <MY_TRUSTED_CA_CERT> -----END CERTIFICATE-----
- 必須項目は
httpProxy
です。httpsProxy
を省略した場合は、httpProxy
のみが使用されます。 - URLスキーマは
http://
のみサポート - ユーザー認証がある場合は、IPアドレスの前に付与します。
noProxy
には直接アクセスしたい宛先をカンマ区切りで記載します。ドメイン名やIPアドレス、ネットワークCIDRなどが使用できます。additionalTrustBundle:
SSLサーバー証明書の内容をここに記載します。
各設定は利用するProxyサーバーに合わせて変更してください。 HTTP、HTTPSでの設定例は下記の通りです。
HTTP場合
apiVersion: v1 baseDomain: example.local proxy: httpProxy: http://user:user@192.168.1.22:8080 noProxy: example.local compute: ...
HTTPSの場合
apiVersion: v1 baseDomain: example.local proxy: httpProxy: http://user:user@192.168.1.22:8080 httpsProxy: http://user:user@192.168.1.22:8080 noProxy: example.local,172.16.0.0/24 additionalTrustBundle: | -----BEGIN CERTIFICATE----- <MY_TRUSTED_CA_CERT> -----END CERTIFICATE----- compute: ...
※注意点。
noProxy
にbaseDomain
を指定しておいた方が良いです。インストール後半で、クラスタからoauth-openshift、consoleへのルートへアクセスできず、authenticationとconsole operatorが起動しません。- HTTPSの場合、
noProxy
に各ノードのIPアドレスまたはネットワークアドレスを指定する必要が有ります。インストール後半で、クラスタからoauth-openshiftへのアクセスでエラーになり、authentication operatorが起動しません。- エラー内容
WellKnownEndpointDegraded: failed to GET well-known https://172.16.0.101:6443/.well-known/oauth-authorization-server: x509: certificate signed by unknown authority
- エラー内容
additionalTrustBundle
にSSLサーバー証明書をコピペした場合は、スペース(1つ以上)でインデントを行うこと。
インストールの実行
install-config.yaml
作成後の手順は通常と同じです。前回の記事を参考にしてください。
インストール開始後は、まずBootstrapノードがquay.io
に接続します。トレースを行う場合は、まずはBootstrapノードが通信できているかどうかを確認してみてください。
参考に検証環境でのProxyサーバー(squid)のログを載せておきます。
HTTP接続時のログ
1570812044.098 920 172.16.0.100 TCP_TUNNEL/200 5591 CONNECT quay.io:443 user HIER_DIRECT/54.204.46.170 - 1570812044.938 839 172.16.0.100 TCP_TUNNEL/200 6820 CONNECT quay.io:443 user HIER_DIRECT/54.204.46.170 - 1570812045.753 814 172.16.0.100 TCP_TUNNEL/200 7239 CONNECT quay.io:443 user HIER_DIRECT/54.204.46.170 - 1570812046.572 816 172.16.0.100 TCP_TUNNEL/200 7509 CONNECT quay.io:443 user HIER_DIRECT/54.204.46.170 - 1570812047.479 906 172.16.0.100 TCP_TUNNEL/200 7139 CONNECT d3uo42mtx6z2cr.cloudfront.net:443 user HIER_DIRECT/99.86.193.123 - 1570812048.261 779 172.16.0.100 TCP_TUNNEL/200 7480 CONNECT quay.io:443 user HIER_DIRECT/54.204.46.170 - 1570812048.270 786 172.16.0.100 TCP_TUNNEL/200 7480 CONNECT quay.io:443 user HIER_DIRECT/54.204.46.170 - 1570812048.297 814 172.16.0.100 TCP_TUNNEL/200 7480 CONNECT quay.io:443 user HIER_DIRECT/54.204.46.170 - 1570812048.329 846 172.16.0.100 TCP_TUNNEL/200 7480 CONNECT quay.io:443 user HIER_DIRECT/54.204.46.170 - 1570812048.337 854 172.16.0.100 TCP_TUNNEL/200 7509 CONNECT quay.io:443 user HIER_DIRECT/54.204.46.170 - 1570812048.477 994 172.16.0.100 TCP_TUNNEL/200 7509 CONNECT quay.io:443 user HIER_DIRECT/54.204.46.170 - 1570812049.042 744 172.16.0.100 TCP_TUNNEL/200 7206 CONNECT d3uo42mtx6z2cr.cloudfront.net:443 user HIER_DIRECT/99.86.193.123 - 1570812049.671 1409 172.16.0.100 TCP_TUNNEL/200 515090 CONNECT d3uo42mtx6z2cr.cloudfront.net:443 user HIER_DIRECT/99.86.193.123 - 1570812050.595 2324 172.16.0.100 TCP_TUNNEL/200 4256164 CONNECT d3uo42mtx6z2cr.cloudfront.net:443 user HIER_DIRECT/99.86.193.123 - ...
- HTTPでSSLをトンネリングしていることが、ログ上の
TCP_TUNNEL
で確認できます
HTTPS接続時のログ
1570907184.934 650 172.16.0.100 NONE/200 0 CONNECT quay.io:443 user HIER_DIRECT/23.23.158.172 - 1570907185.146 192 172.16.0.100 TCP_MISS/401 385 GET https://quay.io/v2/ user HIER_DIRECT/23.23.158.172 text/html 1570907185.738 591 172.16.0.100 NONE/200 0 CONNECT quay.io:443 user HIER_DIRECT/23.23.158.172 - 1570907185.996 254 172.16.0.100 TCP_MISS/200 1614 GET https://quay.io/v2/auth? user HIER_DIRECT/23.23.158.172 application/json 1570907186.622 625 172.16.0.100 NONE/200 0 CONNECT quay.io:443 user HIER_DIRECT/23.23.158.172 - 1570907186.867 241 172.16.0.100 TCP_MISS/200 2033 GET https://quay.io/v2/openshift-release-dev/ocp-release-nightly/manifests/sha256:75f065cf0590077ffba27ac61e104420660b8d2a344e09a11edd3cde50d14b01 user HIER_DIRECT/23.23.158.172 application/vnd.docker.distribution.manifest.v2+json 1570907187.457 588 172.16.0.100 NONE/200 0 CONNECT quay.io:443 user HIER_DIRECT/23.23.158.172 - 1570907187.709 245 172.16.0.100 TCP_MISS/302 2274 GET https://quay.io/v2/openshift-release-dev/ocp-release-nightly/blobs/sha256:5b7c299128e6dc655d47b57424e9cfde33585ed958ba5572ec1b184d5fb81866 user HIER_DIRECT/23.23.158.172 text/html 1570907187.829 119 172.16.0.100 NONE/200 0 CONNECT d3uo42mtx6z2cr.cloudfront.net:443 user HIER_DIRECT/13.224.151.231 - 1570907188.572 738 172.16.0.100 TCP_MISS/200 2125 GET https://d3uo42mtx6z2cr.cloudfront.net/sha256/5b/5b7c299128e6dc655d47b57424e9cfde33585ed958ba5572ec1b184d5fb81866? user HIER_DIRECT/13.224.151.231 binary/octet-stream 1570907189.148 572 172.16.0.100 NONE/200 0 CONNECT quay.io:443 user HIER_DIRECT/23.23.158.172 - 1570907189.153 577 172.16.0.100 NONE/200 0 CONNECT quay.io:443 user HIER_DIRECT/23.23.158.172 - 1570907189.159 584 172.16.0.100 NONE/200 0 CONNECT quay.io:443 user HIER_DIRECT/23.23.158.172 - ...
GET https://〜
のログが確認できるので、ProxyサーバーからSSLで通信していることが分かります
インストール後の確認
無事にクラスタが起動したら、下記の操作でインストール後の設定を確認してください。
HTTPの場合
# oc get proxy/cluster -o yaml apiVersion: config.openshift.io/v1 kind: Proxy metadata: creationTimestamp: "2019-10-11T16:44:26Z" generation: 1 name: cluster resourceVersion: "429" selfLink: /apis/config.openshift.io/v1/proxies/cluster uid: 634d22a2-ec46-11e9-a47f-000c29e26ff4 spec: httpProxy: http://user:user@192.168.1.22:8080 noProxy: example.local trustedCA: name: "" status: httpProxy: http://user:user@192.168.1.22:8080 noProxy: .cluster.local,.svc,10.0.0.0/16,10.128.0.0/14,127.0.0.1,172.30.0.0/16,api-int.test.example.local,api.test.example.local,etcd-0.test.example.local,etcd-1.test.example.local,etcd-2.test.example.local,example.local,localhost
status:
のnoProxy
に自動的にパラメーターが追加されているのが確認できます
HTTPSの場合
# oc get proxy/cluster -o yaml apiVersion: config.openshift.io/v1 kind: Proxy metadata: creationTimestamp: "2019-10-12T19:12:15Z" generation: 1 name: cluster resourceVersion: "430" selfLink: /apis/config.openshift.io/v1/proxies/cluster uid: 33d1a475-ed24-11e9-96e7-000c29e26ff4 spec: httpProxy: http://user:user@192.168.1.22:8080 httpsProxy: http://user:user@192.168.1.22:8080 noProxy: example.local,172.16.0.0/24 trustedCA: name: user-ca-bundle status: httpProxy: http://user:user@192.168.1.22:8080 httpsProxy: http://user:user@192.168.1.22:8080 noProxy: .cluster.local,.svc,10.0.0.0/16,10.128.0.0/14,127.0.0.1,172.16.0.0/24,172.30.0.0/16,api-int.test.example.local,api.test.example.local,etcd-0.test.example.local,etcd-1.test.example.local,etcd-2.test.example.local,example.local,localhost
status:
のnoProxy
に自動的にパラメーターが追加されているのが確認できますtrustedCA
がuser-ca-bundle
で登録されていることが確認できます。
user-ca-bundle
の詳細は下記のコマンドで確認できます。
# oc get cm/user-ca-bundle -n openshift-config -o yaml apiVersion: v1 data: ca-bundle.crt: | -----BEGIN CERTIFICATE----- <MY_TRUSTED_CA_CERT> -----END CERTIFICATE----- kind: ConfigMap metadata: creationTimestamp: "2019-10-12T15:29:28Z" name: user-ca-bundle namespace: openshift-config resourceVersion: "279" selfLink: /api/v1/namespaces/openshift-config/configmaps/user-ca-bundle uid: 1448c4a4-ed05-11e9-8305-000c29e26ff4
GUIで確認する場合
Cluster Settings > Global Configration > Proxy で、YAMLを開くと同じ内容が確認できます。 また、インストール後にクラスタからProxyの通信が問題なく行えるか確認したい場合に簡単に確認する方法があります。 Cluster Settings > Overview で、Channelを他の物に切り替える度に通信が発生します。 Proxyサーバー側で下記ような通信ログを確認すると通信の有無が確認できます。
1570981786.525 567 172.16.0.101 NONE/200 0 CONNECT api.openshift.com:443 user HIER_DIRECT/18.215.44.164 - 1570981786.724 194 172.16.0.101 TCP_MISS/200 532 GET https://api.openshift.com/api/upgrades_info/v1/graph? user HIER_DIRECT/18.215.44.164 application/json
まとめ
OpenShift 4.2における、Proxy環境下でのインストールについては以上です。 インストール設定ファイルを少し変更するだけで対応できるので、非常に簡単です。Proxy環境でのOpenShift 4の導入を検討されている方は、是非手順を参考にトライしてみてください。 それでは初秋を感じながら、4.2 GAのリリースを今しばらくお待ちください!
Let's get Big Ideas!
*1:Red Hat Japanには西日本支社 九州・中国営業所(通称:福岡オフィス)があります。最近一部屋増え、賑やかになってきました
*2:Disconnected “Air-gapped” Installについてはこちらも参考に。https://docs.google.com/document/d/1cCnER-IMDCfinO7DiSvATt8WE4-YBngKrSb2aeBToZA/edit#heading=h.d6trypcglece
*3:4.2.0-0.nightly-2019-10-07-203748を利用
*4:# firewall-cmd --zone=trusted --remove-masquerade --permanent
*5:ACKが帰ってこず、タイムアウトに時間がかかりますが、今回の検証環境ではProxy無しで直接通信するようなシチュエーションは無いので、良しとしています
*6:Proxy設定で指定できるURLスキーマがhttp://のみなので、今回の検証環境では排他実行としています。通常のProxy運用では、実運用に合わせてProxy側を設定してください。