Red Hat Training

A Red Hat training course is available for OpenShift Container Platform

第26章 HTTP プロキシーの使用

26.1. 概要

実稼働環境では、インターネットへの直接アクセスを拒否し、代わりに HTTP または HTTPS プロキシーを使用することができます。これらのプロキシーを使用するように OpenShift Container Platform を設定することは、設定ファイルまたは JSON ファイルで標準的な環境変数を設定するのと同じくらい簡単に実行できます。この設定は、通常インストール (Advanced installation) 時に実行するか、またはインストール後に行うことができます。

プロキシー設定はクラスター内の各ホストで同じである必要があります。したがって、プロキシーの設定やその変更を行う場合は、各 OpenShift Container Platform ホスト上のファイルを更新して同じ値にする必要があります。その後はクラスター内の各ホストで OpenShift Container Platform サービスを再起動する必要があります。

NO_PROXYHTTP_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.comexample.comexample.com:80、および www.example.com と一致します。

26.3. ホストでのプロキシーの設定

  1. 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 がデフォルトで含まれている必要があります。
  2. 必要に応じてマスターホストまたはノードホストを再起動します。

    # 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_proxyopenshift_http_proxy、および openshift_https_proxy パラメーターを使用して NO_PROXYHTTP_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 プロキシーをオプションのままにして、そのレジストリーをブラックリストに入れることができます。

  1. 以下を実行して、レジストリーサービスの 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 です。
  2. /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
  3. 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_PROXYHTTP_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 リポジトリーにアクセスできる場合は、使用するプロキシーを BuildConfigsource セクションで定義できます。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