AlibabaのオープンソースK8s環境のローカルテストおよびデバッグツールを使用すると、効率が非常に高くなります。

AlibabaのオープンソースK8s環境のローカルテストおよびデバッグツールを使用すると、効率が非常に高くなります。

システムが k8s クラスターにデプロイされると、開発およびテスト モードもある程度変更されます。以下は、適切に対処しないと効率に直接影響する一般的な問題です。

  • 機能テストのためにローカル サービスは k8s クラスター内のサービスにどのようにアクセスできますか?
  • マイクロサービスの Swagger にアクセスするなど、k8s クラスター内のリソースにローカルですばやくアクセスするにはどうすればよいですか?
  • 機能テストのために k8s クラスター内のトラフィックをローカル サービスに転送するにはどうすればよいですか?
  • 機能検証のためにサービスを k8s クラスターに素早く一時的にデプロイするにはどうすればよいでしょうか?

ほとんどの開発者が上記の問題に遭遇したことがあると思いますが、一般的な方法は、サービスをテストのために k8s にデプロイすることです。この方法はシンプルですが、システムはまだ単体テスト段階であり、バグが多く発生するため、非常に非効率的です。すべての変更を再リリースする必要があり、システムのパッケージ化と展開に時間がかかります。

これは、上記の問題を解決するのに役立つ Alibaba のオープンソース k8s ツールです。

KtConnect の紹介

写真

KtConnect (Kt は Kubernetes Toolkit クラスター ツールキットの略) は Alibaba によってオープンソース化されています。これは、ローカルテストと共同デバッグの効率を向上させるための、k8s 環境に基づく小さなツールです。ローカル クラスターとテスト環境クラスター間の双方向の相互接続機能を提供します。

アドレス: https://github.com/alibaba/kt-connect

特性

  • 接続: データ プロキシ チャネルを確立して、ローカル サービスが Kubernetes クラスター イントラネット (Pod IP とサービス ドメイン名を含む) に直接アクセスできるようにします。
  • Exchange: クラスタ サービスのトラフィックをローカル サーバーにリダイレクトして、ローカル バージョンを迅速に確認し、問題をデバッグしてトラブルシューティングします。
  • メッシュ: 特定のトラフィックをリダイレクトするルーティング ルールを作成し、複数人でのコラボレーション シナリオで互いに影響を及ぼさずにローカル デバッグを実装します。
  • プレビュー: ローカル サービスをクラスターに公開し、公開せずに統合効果をオンラインでプレビューできるようにします。

クイック体験

このドキュメントでは、KtConnect を使用してクラスター内のサービスにローカルで直接アクセスし、クラスター内の指定されたサービスに対する要求をローカル サーバーに転送するプロセスを簡単な例を使用して簡単に説明します。

インストール

brew install kt-connect

写真

サンプルアプリケーションの展開

結果を表示しやすくするために、まずクラスターに Tomcat サービスをデプロイし、デフォルトのホームページを作成します。

 kubectl create deployment tomcat --image=tomcat:9 --port=8080 kubectl expose deployment tomcat --port=8080 --target-port=8080 kubectl exec deployment/tomcat -c tomcat -- /bin/bash -c 'mkdir webapps/ROOT; echo "hello world v1" > webapps/ROOT/index.html'

写真

Pod とサービスの IP アドレスを照会します。

 kubectl get pod -o wide --selector app=tomcat kubectl get svc tomcat

写真

Tomcat インスタンスの Pod IP は 172.18.25.22 であり、サービスの Cluster IP は 192.168.220.59 であることがわかります。後で使用するために書き留めておいてください。

クラスターネットワークへの接続

ktctl connect コマンドを使用して、ローカル コンピューターからクラスターへのネットワーク チャネルを確立します。このコマンドには管理者権限が必要であることに注意してください。

 sudo ktctl connect

写真

クラスターリソースへのローカルアクセス

上記のログが出力された後、ブラウザまたは curl コマンドを使用して確認できるクラスター リソースにローカルで直接アクセスできます。

 # 在本地直接访问PodIP curl http://172.18.25.22:8080 #在本地访问ClusterIP curl http://192.168.220.59:8080 #使用<service>作为域名访问服务curl http://tomcat:8080 #使用<servicename>.<namespace>域名访问服务curl http://tomcat.default:8080 # 使用集群内完整域名访问服务curl http://tomcat.default.svc.cluster.local:8080

写真

クラスタトラフィックをローカルに転送する

クラスターがローカル サービスにアクセスするシナリオを確認するために、Tomcat コンテナーをローカルで起動し、異なるコンテンツを含むホームページも作成します。

 docker run -d --name tomcat -p 8080:8080 tomcat:9 docker exec tomcat /bin/bash -c 'mkdir webapps/ROOT; echo "hello world local v2" > webapps/ROOT/index.html'

写真

KtConnect には、使用シナリオが若干異なる、クラスター トラフィックをローカル サービスにリダイレクトできる 2 つのコマンドが用意されています。

  • Exchange: クラスタの指定されたサービスのすべてのトラフィックをローカルにリダイレクトします。
  • メッシュ: クラスターの指定されたサービスのトラフィックの一部を(ヘッダーまたはラベルのルールに従って)ローカルエリアにリダイレクトします。
交換コマンド

k8s クラスター内の指定されたサービスにアクセスするためのすべての要求をインターセプトし、指定されたローカル ポートに転送します。通常、現在のサービスがk8sクラスタにデプロイされておらず、シナリオを迅速に検証したい場合に、テスト環境でのデバッグに使用されます。

写真

ktctl exchange コマンドを使用して、以前にクラスターにデプロイされたすべての Tomcat サービス トラフィックをローカル ポート 8080 にリダイレクトします。

 ktctl exchange tomcat --expose 8080

写真

出力結果を表示するには、例の冒頭でクラスターにデプロイされた Tomcat サービスにローカルまたはクラスター内でアクセスします。

ktctl connectが実行されていない場合は、k8sクラスター内からのみアクセスできます。

 curl http://tomcat:8080

写真

ご覧のとおり、クラスター内の Tomcat サービスへのアクセス要求は、ローカルの Tomcat インスタンスに転送されます。

マイクロサービスが K8s にデプロイされているか、eureka または nacos を使用している場合、このメソッドはサービス コンシューマーによって直接呼び出されるサービス プロバイダーのポッド IP アドレスであるため、サポートされない可能性があります。

メッシュコマンド

クラスター内の指定されたサービスにアクセスするためのいくつかの要求をインターセプトし、指定されたローカル ポートに転送します。これは通常、他の開発者のテスト環境の通常の使用に影響を与えずに、呼び出しチェーンの途中でサービスをデバッグする必要があるチームコラボレーションで使用されます。

写真

Mesh コマンドは、HTTP リクエストの自動オンデマンド ルーティングを直接実装できます。結果の検証を容易にするために、まず ktctl exchange コマンドを停止します。次に、ktctl mesh コマンドを使用してプロキシ Pod を作成します。

 ktctl mesh tomcat --expose 8080

写真

上記の赤でマークされた部分を見ると、特定のヘッダー値が出力されています。この時点で、クラスター内の Tomcat サービスに直接アクセスすると、トラフィックは正常にクラスターのサービス インスタンスに入ります。リクエストに Mesh コマンドによって出力されたヘッダーが含まれている場合、トラフィックはローカル サービス インスタンスに転送されます。

 curl http://tomcat:8080 curl -H 'VERSION: feo3x' http://tomcat:8080

写真

実際のテストでは、ModHeader プラグインを使用して、ブラウザーによって開始された HTTP リクエストにカスタム ヘッダーを自動的に追加できます。

写真

写真

他の開発者にローカルサービスを提供する

開発プロセス中に、KtConnect を使用してローカル サービスをクラスターにすばやく「デプロイ」し、他の開発者やクラスター内の他のサービスが一時的に使用できるように一時サービスに変換することもできます。

  • プレビュー: ローカル サービスをクラスター内のサービスとして登録する
  • 転送: クラスター サービスをローカル コンピューターにマップします。プレビュー コマンドと組み合わせると、開発者は Localhost アドレスを使用してホスト間で相互にアクセスできるようになります。
プレビューコマンド

ローカルで実行されているサービス インスタンスをクラスターに登録します。これは主に、共同デバッグやプレビューのために、ローカルで開発中のサービスを他の開発者に提供するために使用されます。

次に、ktctl preview コマンドを使用して、ローカル ポート 8080 で実行されているサービスをテスト クラスターに登録し、tomcat-v2 という名前を付けます。

 ktctl preview tomcat-v2 --expose 8080

写真

登録が成功すると、クラスタ内のサービスはtomcat-v2名を介してローカルに登録されたサービスインスタンスにアクセスできるようになります。

写真

他の開発者は、ktctl connect を実行した後、tomcat-v2 サービス名を介してサービスのリアルタイム ステータスを直接プレビューすることもできます。

写真

前進コマンド

クラスター内の任意の IP またはサービスを指定されたローカル ポートにマップします。テスト中に localhost アドレスを使用してクラスター内の特定の IP アドレスまたはサービスに簡単にアクセスするのに使用されます。一般的なシナリオは、プレビュー コマンドを通じて他の開発者が登録したローカル サービスにアクセスすることです。

写真

上の図に示すように、開発者Aが前述のプレビューコマンドを実行した後、開発者Bはktctl forwardコマンドを使用してローカルポート9090にマップし、

 ktctl forward tomcat-v2 9090:8080

写真

上記のコマンドを実行した後、開発者はlocalhsot:9090にアクセスして実行することができます。

写真

forward コマンドは kubectl port-forward コマンドに似ていると思いますか?実際、このコマンドは、ネットワークの切断後に自動的に再接続する機能を追加するだけです。

<<:  トマゴ・アルミニウムがクラウドへの取り組みで方針を変えた理由

>>:  GitHub Actions を使用して Docker イメージを構築する方法

推薦する

ウェブゲームサイト運営者必読:あなたの業界はこのように発展すべき

ウェブゲームは無料オンラインゲームの一種ですが、独自の輝かしい歴史を持っています。世界中での運営と発...

検索エンジンの変更に合わせてウェブサイトに微妙な変更を加えるにはどうすればよいでしょうか (パート 2)

一昨日、「検索エンジンの変化に直面して、ウェブサイトを微妙に変えるにはどうすればよいか(パート1)」...

ブラジルの共同購入ウェブサイトPeixe Urbanoがモルガン・スタンレーから投資を受ける

北京時間1月27日、外国メディアの報道によると、ブラジル最大の共同購入サイトであるPeixe Urb...

SEO の詳細を計画する: ターゲットを絞った作業方法

「どの国にも法律があり、どの家庭にもルールがある。」この言葉は、さまざまな場所で何度も耳にします。確...

医療業界は 360 度検索から利益を得ることができますか?

医療業界はSEOマーケティングの大軍であり、インターネット上でのマーケティングとプロモーションの面で...

アンチャンがKCSP資格を取得し、クラウドネイティブの強みが再び国際的に認められる

上海安昌ネットワークテクノロジー株式会社(以下、「安昌」)は、KCSP(Kubernetes Cer...

Linode-日本データセンター新プラン月額5ドルVPSレビュー

昨日、Linode は、最低 VPS 価格を 1G メモリで月額 5 ドルに引き下げると発表しました...

有名ブランドのソフトカルチャーマーケティングの事例を見ると、この盲点を見逃していませんか?

マクドナルドの「大好き!」、VV豆乳の「太陽の光を100倍味わう」、プロクター・アンド・ギャンブルの...

クラウド アプリケーション移行の問題を回避する 4 つの解決策

企業が重要なビジネス アプリケーションをクラウドで実行することに決めたら、別のベンダーに切り替えるこ...

推奨: AlphaRacks - 5.99 USD/4 コア/1 GB RAM/90 GB ハード ドライブ/3.5 TB トラフィック

Alpharacks は、DDOS 保護、OpenVZ ベースの VPS、サーバー レンタルを提供す...

ブランドのために Zhihu マーケティングを効果的に行うにはどうすればよいでしょうか?

Zhihu の商業マーケティングシステムは現在、画期的な時期にあり、他のプラットフォームにはない革新...

Weiboチャンネル運用をすぐに始めるための5つのステップ!

インターネット全体のゴシップの中心地として、Weiboはますます注目を集めています。データによると、...

SEO担当者はトラフィックのある外部リンクを追求する必要がある

外部リンクは、多くのウェブマスターや SEO 担当者が苦労している難しい問題の 1 つです。ウェブサ...

webcare360: ウクライナ、1G 帯域幅、無制限トラフィック、苦情防止サーバー/著作権を無視

苦情対策サーバー事業を専門とする民間企業「webcare360」は、2009年1月に「セントクリスト...