type
status
date
slug
summary
tags
category
icon
password
书籍
ソリューション
OpenShift ネットワーキングの概念の探求
このラボでは、OpenShiftのルートを使用してアプリケーションへのアクセスに関連する問題をトラブルシューティングし、修正します。
リソース
アプリケーションのURL: http://hello.apps.lab.example.com:8080
成果物
ルートを使用してアプリケーションにアクセスする際のエラーをトラブルシューティングし、修正できるようになります。
開始前の準備
「OpenShift Container Platformのインストール」章のすべてのラボを完了し、マスターと2つのノードがあるOpenShift Container Platformクラスターを実行していることを確認してください。もしそうでない場合は、マスター、node1、node2ホストをリセットし、ワークステーションホストで以下のコマンドを実行して、環境が正しく設定されていることを確認します:
マスター、node1、node2ホストが起動していることを確認し、このガイド付き演習で必要なファイルをダウンロードするには、ワークステーションホストのターミナルを開いて以下のコマンドを実行します:
- ラボセットアップスクリプトは、新しいプロジェクト「network-review」を作成し、developerユーザーアカウントを使用して「hello-openshift」アプリケーションをデプロイします。OpenShiftにdeveloperユーザーとしてログインし、プロジェクトをリストします。network-reviewプロジェクトがユーザーのデフォルトプロジェクトであることを確認してください。
- このプロジェクトのリソースを調査します。
2.1. このプロジェクト内のポッドを調べ、ポッドのIPアドレスをメモします。
2.2. このプロジェクト内のサービスを調べ、クラスターIPアドレスをメモします。
2.3. このプロジェクト内のルートを調べ、ルートURLをメモします。
- curlコマンドを使用して、ルートURLにアクセスします。デフォルトのルーターホームページは表示されますが、実際のアプリケーションの出力は表示されません。
- ルートの呼び出しが失敗した理由を調査し、トラブルシューティングします。
4.1. curlコマンドを使用して、ポッドIPアドレスに直接アクセスします。アプリケーションから有効な応答が得られることを確認します。新しいターミナルを開き、rootユーザーとしてマスターホストにSSHセッションを開始してからcurlコマンドを実行します。
4.2. curlコマンドを使用して、クラスターIPアドレスにアクセスします。アプリケーションは有効な応答を返しません。これはサービスの構成に問題があることを意味します。
4.3. ワークステーションVMから、oc describe svcコマンドを使用してサービスの詳細を確認します。このサービスに登録されているエンドポイントを確認します。
このサービスにはエンドポイントが登録されていないことに注目してください。これがサービスIPへのリクエストが接続拒否エラーを返す理由です。エンドポイントはポッドのセレクターラベルに基づいて登録されることを覚えておいてください。このサービスのセレクターラベルに注意してください。
4.4.
oc describe pod
コマンドを使用して、アプリケーションポッドのセレクタラベルの詳細を表示します。ポッドとサービスのセレクタラベルが一致していることを確認し、ポッドがサービスのエンドポイントとして登録されているかを確認します。ポッドのセレクタラベルは
app=hello-openshift
ですが、サービスのセレクタラベルは app=hello_openshift
になっています。サービスの構成を編集して、ポッドのセレクタと一致させる必要があります。4.5. サービス構成を編集して、エラーを修正します。
ワークステーションVMで
oc edit svc
コマンドを使用してサービス構成を編集します。前のコマンドはサービス構成を vi エディタバッファで表示します。サービス構成の
selector
要素の app
属性が hello_openshift
と誤って記述されていることに注意してください。アプリケーションから応答が得られないのは、hello_openshift
とラベル付けされたポッドが存在しないためです。app
属性を hello-openshift
に変更します。これは hello-openshift
ポッドにラベル付けされています。編集が終わったらファイルを保存します。その後、再度 oc describe svc hello-openshift
コマンドを実行します。セレクタとエンドポイントは以下のように表示されるはずです:4.6. マスターVMから、クラスターIPアドレスを使ってアプリケーションから有効な応答が得られることを確認します。
4.7. ワークステーションVMから、ルートURLの呼び出しが動作するかどうかを確認します。
ルートURLの呼び出しはまだ失敗します。
4.8.
oc describe route
コマンドを使用して、ルートの詳細を表示します。サービス名とこのルートに登録されたエンドポイントを確認します。このルートにエンドポイントがないというエラーが表示されます。これが、ルートURLにリクエストを送ってもアプリケーションホームページが表示されない理由です。ルーターはサービスに対してエンドポイントを照会し、有効なエンドポイントをロードバランシングのために登録します。サービス名に誤字があることに注意してください。正しいサービス名は
hello-openshift
です。このサービス名がアプリケーションの正しいサービス名です。このようにして、サービス名の誤りとセレクタラベルの不一致を修正することで、アプリケーションの動作を復旧させることができます。
ルート構成を編集してエラーを修正します。
ワークステーションVMで
oc edit route
コマンドを使用してルート構成を編集します。前のコマンドは、vi エディタバッファでルート構成を表示します。
spec
要素の下の to
属性が hello-opensift
と誤って記述されていることに注意してください。ルートから応答が得られない理由は、プロジェクトに hello-opensift
というサービスが存在しないためです。to
属性を hello-openshift
に変更します。編集が完了したら、ファイルを保存します。その後、再度 oc describe route hello-openshift
コマンドを実行します。サービス名とエンドポイントは以下のように表示されるはずです。4.10. ルートURLを呼び出すと、アプリケーションから有効な出力が表示されることを確認します。
- 評価 次のコマンドを実行して、作業を評価します。
PASSの評価を得られなかった場合は、作業を再確認し、評価コマンドを再実行してください。
クリーンアップ
network-review
プロジェクトを削除します。これで小テストは終了です。
ルート構成の修正と、アプリケーションの確認が完了しました。
まとめ
この章では、以下の内容を学びました:
- OpenShiftのソフトウェア定義ネットワーキング(SDN)の実装はOpen vSwitch(OVS)をベースにしており、これによりOpenShiftクラスター内のポッド間での通信を可能にする統一されたクラスターネットワークが提供されること。
- OpenShiftサービス:
- クライアントがクラスター内のポッドにアクセスするための一意のIPアドレスを持っています。
- IPアドレスはOpenShift SDNから取得され、ポッドの内部ネットワークとは異なりますが、クラスター内からのみ見ることができます。
- サービスリソースには、セレクタに一致するポッドがエンドポイントとして追加されます。ポッドが作成されると、そのエンドポイントは自動的に更新されます。
- OpenShiftクラスター外部からサービスへのアクセスが必要なアプリケーションには、以下の2つの方法があります:
- NodePort:サービスはノードホストの使用可能なポートにバインドされ、外部クライアントに公開され、その後接続はサービスのIPアドレスにプロキシされます。NodePortのポート番号は、30000〜32767の範囲に制限されています。
- OpenShiftルート:この方法はサービスを一意のURLで公開します。
oc expose
コマンドを使用してサービスを外部に公開するか、OpenShift Webコンソールからサービスを公開できます。
- ポッドは、ネットワークアドレス変換(NAT)を使用して、ホストアドレスを介してOpenShiftクラスター外のサーバーと通信できます。NATはネットワークトラフィックをホストのIPアドレスを通じて転送します。
- OpenShiftのルートは、OpenShiftインスタンス内のポッドとして実行される共有ルーターサービスによって実装されており、他の通常のポッドのようにスケールや複製が可能です。このルーターサービスはオープンソースソフトウェアのHAProxyに基づいています。
- ルートリソースは、JSONまたはYAMLリソース定義ファイルを使用して
oc create
で作成するか、oc expose
コマンドを使用して作成できます。
oc expose
コマンドまたはテンプレートから作成されたルートには、明示的な-hostname
オプションが指定されていない場合、次の形式でDNS名が生成されます:<route-name>-<projectname>.<default-domain>
。
- ルートは以下のプロトコルをサポートしています:
- HTTP
- HTTPS(SNI付き)
- WebSockets
- TLS(SNI付き)
- ルートには異なる種類があります:
- エッジ終了:TLSの終了はルーターで行われ、トラフィックがポッドにルーティングされる前に処理されます。TLS証明書はルーターが提供するため、証明書はルートに設定する必要があります。
- パススルー終了:暗号化されたトラフィックは、ルーターによるTLSの終了なしで直接目的のポッドに送られます。証明書やキーは必要ありません。目的のポッドがエンドポイントで証明書を提供します。
- 再暗号化終了:再暗号化はエッジ終了の変種で、ルーターがTLSで証明書を終了し、エンドポイントへの接続を再暗号化します。エンドポイントは異なる証明書を持っているかもしれません。
- ワイルドカードポリシーを使用すると、ユーザーはドメイン内のすべてのホストをカバーするルートを定義できます。ルートはその構成の一部として
wildcardPolicy
フィールドを使用してワイルドカードポリシーを指定できます。
- OpenShiftルーターはワイルドカードルートをサポートしており、
ROUTER_ALLOW_WILDCARD_ROUTES
環境変数をtrue
に設定することで有効になります。
- 作者:みなみ
- 链接:https://www.minami.ac.cn//%E8%B3%87%E6%A0%BC%E5%8B%89%E5%BC%B7/1a6d7ae8-88e2-8019-8dc1-d04186f4179b
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章