3.10. 適切な最大転送単位 (MTU) サイズの確認
最大転送単位 (MTU) を確認することにより、SSL 証明書の問題としてマスカレードを生じさせる可能性のあるネットワークの誤設定を防ぐことができます。
パケットが HTTP で送信される MTU サイズよりも大きくなる場合、物理ネットワークルーターはデータを送信するためにパケットを複数のパケットに分割できます。ただし、パケットが HTTPS で送信される MTU サイズよりも大きいと、ルーターはそのパケットのドロップを強制的に実行します。
インストールでは、以下を含む複数コンポーネントへのセキュアな通信を提供する証明書を生成します。
- マスターホスト
- ノードホスト
- インフラストラクチャーノード
- レジストリー
- ルーター
これらの証明書は、マスターノードの場合は /etc/origin/master
ディレクトリーに、インフラおよびアプリケーションノード場合は /etc/origin/node
ディレクトリーに配置されています。
インストール後に、ネットワーク接続
のセクションで説明されているプロセスを使用して REGISTRY_OPENSHIFT_SERVER_ADDR への接続を確認できます。
前提条件
マスターホストから HTTPS アドレスを取得します。
$ oc -n default get dc docker-registry -o jsonpath='{.spec.template.spec.containers[].env[?(@.name=="REGISTRY_OPENSHIFT_SERVER_ADDR")].value}{"\n"}' docker-registry.default.svc:5000
上記により、
docker-registry.default.svc:5000
の出力が生成されます。/healthz
を上記で指定される値に追加し、これを使用してすべてのホスト (マスター、インフラストラクチャー、ノード) で確認します。$ curl -v https://docker-registry.default.svc:5000/healthz * About to connect() to docker-registry.default.svc port 5000 (#0) * Trying 172.30.11.171... * Connected to docker-registry.default.svc (172.30.11.171) port 5000 (#0) * Initializing NSS with certpath: sql:/etc/pki/nssdb * CAfile: /etc/pki/tls/certs/ca-bundle.crt CApath: none * SSL connection using TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 * Server certificate: * subject: CN=172.30.11.171 * start date: Oct 18 05:30:10 2017 GMT * expire date: Oct 18 05:30:11 2019 GMT * common name: 172.30.11.171 * issuer: CN=openshift-signer@1508303629 > GET /healthz HTTP/1.1 > User-Agent: curl/7.29.0 > Host: docker-registry.default.svc:5000 > Accept: */* > < HTTP/1.1 200 OK < Cache-Control: no-cache < Date: Tue, 24 Oct 2017 19:42:35 GMT < Content-Length: 0 < Content-Type: text/plain; charset=utf-8 < * Connection #0 to host docker-registry.default.svc left intact
上記の出力例は、SSL 接続が正常であることを確認するために使用されている MTU サイズを示しています。接続の試行が正常に実行されると接続が確立し、証明書パスと docker-registry に関するすべてのサーバー証明書情報を使った NSS の初期化が完了します。
MTU サイズが不適切に設定されているとタイムアウトが生じます。
$ curl -v https://docker-registry.default.svc:5000/healthz * About to connect() to docker-registry.default.svc port 5000 (#0) * Trying 172.30.11.171... * Connected to docker-registry.default.svc (172.30.11.171) port 5000 (#0) * Initializing NSS with certpath: sql:/etc/pki/nssdb
上記の例では、接続が確立されていますが、証明書パスが指定された NSS の初期化を完了できません。この問題は、ノード設定マップ に設定される不適切な MTU サイズに関連します。
この問題を解決するには、ノード設定マップ内の MTU サイズを OpenShift SDN イーサネットデバイスで使用されている MTU サイズよりも 50 バイト小さい値に調整します。
必要なイーサネットデバイスの MTU サイズを表示します (例:
eth0
)。$ ip link show eth0 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000 link/ether fa:16:3e:92:6a:86 brd ff:ff:ff:ff:ff:ff
上記は MTU が 1500 に設定されていることを示しています。
MTU サイズを変更するには、適切な ノード設定マップ を変更し、
ip
コマンドの出力よりも 50 バイト小さい値に設定します。たとえば、MTU サイズが 1500 の場合、ノード設定マップ内で MTU サイズを 1450 に調整します。
networkConfig: mtu: 1450
変更を保存し、ノードを再起動します。
注記OpenShift Container Platform SDN を設定するすべてのマスターおよび ノードで MTU サイズを変更する必要があります。また、tun0 インターフェイスの MTU サイズはクラスターを設定するすべてのノードで同一である必要があります。
ノードが再度オンラインになった後に、元の
curl
コマンドを再度実行して問題が存在しなくなっていることを確認します。$ curl -v https://docker-registry.default.svc:5000/healthz
タイムアウトが持続する場合、引き続き MTU サイズを 50 バイト単位で調整し、このプロセスを繰り返します。