第26章 HTTP プロキシーの使用
26.1. 概要
実稼働環境では、インターネットへの直接アクセスを拒否し、代わりに HTTP または HTTPS プロキシーを使用することができます。これらのプロキシーを使用するように OpenShift Container Platform を設定することは、設定ファイルまたは JSON ファイルで標準的な環境変数を設定するのと同じくらい簡単に実行できます。この設定は、通常インストール (Advanced installation) 時に実行するか、またはインストール後に行うことができます。
プロキシー設定はクラスター内の各ホストで同じである必要があります。したがって、プロキシーの設定やその変更を行う場合は、各 OpenShift Container Platform ホスト上のファイルを更新して同じ値にする必要があります。その後はクラスター内の各ホストで OpenShift Container Platform サービスを再起動する必要があります。
NO_PROXY
、HTTP_PROXY
、および HTTPS_PROXY
環境変数は各ホストの /etc/sysconfig/atomic-openshift-master-api または /etc/sysconfig/atomic-openshift-master-controllers ファイルと /etc/sysconfig/atomic-openshift-node ファイルにあります。
26.2. NO_PROXY の設定
NO_PROXY
環境変数は、OpenShift Container Platform のすべてのコンポーネントと、OpenShift Container Platform によって管理されるすべての IP アドレスを一覧表示します。
CIDR を許可する OpenShift サービスでは、以下のように NO_PROXY
にホスト、IP アドレス、または IP 範囲 (CIDR 形式) のカンマ区切りの一覧を指定できます。
- マスターホストの場合
- ノードホスト名
- マスター IP またはホスト名
- etcd ホストの IP アドレス
- ノードホストの場合
- マスター IP またはホスト名
- Docker サービスの場合
- レジストリーのサービス IP とホスト名
-
レジストリーサービス URL
docker-registry.default.svc.cluster.local
- レジストリールートホスト名 (作成されている場合)
Docker を使用している場合は、Docker はホスト、ドメイン拡張子、または IP アドレスのカンマ区切りの一覧を受け入れますが、CIDR 形式の IP 範囲は受け入れません。CIDR 形式の IP 範囲を受け入れるのは OpenShift サービスのみです。`no_proxy' 変数には、プロキシーを使用すべきでないドメイン拡張子のカンマ区切りの一覧を含める必要があります。
たとえば、no_proxy
が .school.edu
に設定されている場合は、特定の学校からドキュメントを取得するためにプロキシーが使用されることはありません。
NO_PROXY
には、master-config.yaml ファイルにあるように、SDN ネットワークとサービス IP アドレスも含まれています。
/etc/origin/master/master-config.yaml
networkConfig: clusterNetworks: - cidr: 10.1.0.0/16 hostSubnetLength: 9 serviceNetworkCIDR: 172.30.0.0/16
OpenShift Container Platform では、ドメインサフィックスに付加するワイルドカードとして *
を使用できません。たとえば、以下は受け入れられます。
NO_PROXY=.example.com
しかし、以下の場合は受け入れられません。
NO_PROXY=*.example.com
NO_PROXY
で許可されるワイルドカードは *
1 文字だけです。このワイルドカードはすべてのホストに一致し、プロキシーを効果的に無効にします。
この一覧にある名前はそれぞれ、ホスト名をサフィックスとして含むドメインまたはホスト名自体のいずれかと一致します。
ノードを拡張するときは、ホスト名の一覧ではなくドメイン名を使用してください。
たとえば、example.com は example.com、example.com:80、および www.example.com と一致します。
26.3. ホストでのプロキシーの設定
OpenShift Container Platform 制御ファイルのプロキシー環境変数を編集します。クラスター内のすべてのファイルが正しいことを確認してください。
HTTP_PROXY=http://<user>:<password>@<ip_addr>:<port>/ HTTPS_PROXY=https://<user>:<password>@<ip_addr>:<port>/ NO_PROXY=master.hostname.example.com,10.1.0.0/16,172.30.0.0/16 1
- 1
- ホスト名と CIDR をサポートします。SDN ネットワークとサービスの IP 範囲
10.1.0.0/16,172.30.0.0/16
がデフォルトで含まれている必要があります。
必要に応じてマスターホストまたはノードホストを再起動します。
# systemctl restart atomic-openshift-master-api atomic-openshift-master-controllers # systemctl restart atomic-openshift-node
マルチマスターインストールの場合
# systemctl restart atomic-openshift-master-controllers # systemctl restart atomic-openshift-master-api
26.4. Ansible を使用したホストでのプロキシー設定
通常インストール (Advanced installation) の実行時に、インベントリーファイルで設定可能な openshift_no_proxy
、openshift_http_proxy
、および openshift_https_proxy
パラメーターを使用して NO_PROXY
、HTTP_PROXY
、および HTTPS_PROXY
環境変数を設定することができます。
Ansible を使用したプロキシー設定例
# Global Proxy Configuration # These options configure HTTP_PROXY, HTTPS_PROXY, and NOPROXY environment # variables for docker and master services. openshift_http_proxy=http://<user>:<password>@<ip_addr>:<port> openshift_https_proxy=https://<user>:<password>@<ip_addr>:<port> openshift_no_proxy='.hosts.example.com,some-host.com' # # Most environments do not require a proxy between OpenShift masters, nodes, and # etcd hosts. So automatically add those host names to the openshift_no_proxy list. # If all of your hosts share a common domain you may wish to disable this and # specify that domain above. # openshift_generate_no_proxy_hosts=True
Ansible パラメーターを使用してビルド用に設定できるその他のプロキシー設定があります。たとえば、以下の通りです。
openshift_builddefaults_git_http_proxy
パラメーターと openshift_builddefaults_git_https_proxy
パラメーターを使用すると、Git クローン作成のためにプロキシーを使用することができます。
openshift_builddefaults_http_proxy
パラメーターと openshift_builddefaults_https_proxy
パラメーターは、Docker ビルドストラテジーとカスタムビルドストラテジーのプロセスで環境変数を利用可能にできます。
26.5. Docker pull のプロキシー設定
OpenShift Container Platform のノードホストは Docker レジストリーに対してプッシュ操作とプル操作を実行する必要があります。ノードがアクセスするためにプロキシーを必要としないレジストリーの場合は、以下の項目を指定した NO_PROXY
パラメーターを含めてください。
- レジストリーのホスト名
- レジストリーサービスの IP アドレス
- サービス名
これにより、外部の HTTP プロキシーをオプションのままにして、そのレジストリーをブラックリストに入れることができます。
以下を実行して、レジストリーサービスの IP アドレス
docker_registy_ip
を取得します。$ oc describe svc/docker-registry -n default Name: docker-registry Namespace: default Labels: docker-registry=default Selector: docker-registry=default Type: ClusterIP IP: 172.30.163.183 1 Port: 5000-tcp 5000/TCP Endpoints: 10.1.0.40:5000 Session Affinity: ClientIP No events.
- 1
- レジストリーサービスの IP です。
/etc/sysconfig/docker ファイルを編集し、シェル形式の
NO_PROXY
変数を追加して、<docker_registry_ip>
を直前の手順で取得した IP アドレスに置き換えます。HTTP_PROXY=http://<user>:<password>@<ip_addr>:<port>/ HTTPS_PROXY=https://<user>:<password>@<ip_addr>:<port>/ NO_PROXY=master.hostname.example.com,<docker_registry_ip>,docker-registry.default.svc.cluster.local
Docker サービスを再起動します。
# systemctl restart docker
26.6. プロキシーの背後での Maven の使用
プロキシーで Maven を使用するには、HTTP_PROXY_NONPROXYHOSTS
変数を使用する必要があります。
Maven をプロキシーの背後に設定する手順などを含めた Red Hat JBoss Enterprise Application Platform 向けの OpenShift Container Platform 環境の設定に関する詳細については 、「Red Hat JBoss Enterprise Application Platform for OpenShift」を参照してください。
26.7. S2I ビルドでのプロキシーの設定
S2I ビルドはさまざまな場所から依存関係を取得します。.s2i/environment ファイルを使用して単純なシェル変数を指定することができます。それに応じて OpenShift Container Platform はビルドイメージの参照時に応答します。
以下は、サンプル値を指定したサポート対象のプロキシー環境変数です。
HTTP_PROXY=http://USERNAME:PASSWORD@10.0.1.1:8080/ HTTPS_PROXY=https://USERNAME:PASSWORD@10.0.0.1:8080/ NO_PROXY=master.hostname.example.com
26.8. デフォルトテンプレートでのプロキシーの設定
OpenShift Container Platform でデフォルトで利用可能なテンプレートサンプルには、HTTP プロキシーの設定が含まれていません。これらのテンプレートに基づく既存のアプリケーションについては、アプリケーションのビルド設定の source
セクションを変更して、以下のプロキシー設定を追加します。
... source: type: Git git: uri: https://github.com/openshift/ruby-hello-world httpProxy: http://proxy.example.com httpsProxy: https://proxy.example.com noProxy: somedomain.com, otherdomain.com ...
これは、Git クローン作成用にプロキシーを使用するプロセスと似ています。
26.9. Pod でのプロキシー環境変数の設定
デプロイメント設定の templates.spec.containers
スタンザで NO_PROXY
、HTTP_PROXY
、および HTTPS_PROXY
環境変数を設定して、プロキシー接続情報を渡すことができます。実行時の Pod のプロキシー設定についても同じことを実行できます。
... containers: - env: - name: "HTTP_PROXY" value: "http://<user>:<password>@<ip_addr>:<port>" ...
oc set env
コマンドを使用して、既存のデプロイメント設定を新規の環境変数で更新することもできます。
$ oc set env dc/frontend HTTP_PROXY=http://<user>:<password>@<ip_addr>:<port>
OpenShift Container Platform インスタンスで ConfigChange トリガーを設定している場合は、変更が自動的に行われます。そうでない場合は、変更が反映されるようにアプリケーションを手動で再デプロイしてください。
26.10. Git リポジトリーのアクセス
プロキシーの使用によってのみ Git リポジトリーにアクセスできる場合は、使用するプロキシーを BuildConfig
の source
セクションで定義できます。HTTP プロキシーと HTTPS プロキシーの両方を使用するように設定できます。どちらのフィールドもオプションです。NoProxy フィールドを使用して、プロキシーを実行しないドメインを指定することもできます。
これを機能させるために、ソース URI では HTTP プロトコルまたは HTTPS プロトコルを使用する必要があります。
source: git: uri: "https://github.com/openshift/ruby-hello-world" httpProxy: http://proxy.example.com httpsProxy: https://proxy.example.com noProxy: somedomain.com, otherdomain.com