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 イメージを構築する方法

推薦する

モバイルインターネットで正確なトラフィックを取得する方法!

この事件の発端は秦剛の日記にある一文である。 PC 時代のウェブサイトは Baidu 向けに書かれて...

offshoreracks-パナマ著作権フリーのVPS、100%DMCAなし、著作権を完全に無視

offshoreracks は 2002 年に設立され、パナマに登録されています。独自のパナマ デー...

タオバオアフィリエイトに商品を宣伝してもらう方法 - タオバオアフィリエイトのプロモーションスキル

タオバオの有料プロモーションにおけるダイヤモンドブース、直通列車などのプロモーション料金は年々増加し...

アーティファクトストライク: bandwagonhost/bandwagonhost vps-512m メモリ VPS 年払い 9.99 ドル

512M のメモリと年間料金 9.99 ドルの banwagonhost を見逃していませんか?今で...

ネットユーザーの皆様、蛇年おめでとうございます

今年の5月から、HostCatのこの小さなウェブサイトに約10か月間お付き合いいただき、ありがとうご...

米国はAWSやマイクロソフトなどのクラウドサービスプロバイダーが中国企業にサービスを提供することを阻止する計画を立てている

まとめ:ウォール・ストリート・ジャーナルの報道によると、米国は米国のクラウド・コンピューティング・プ...

Google ウェブマスターガイドラインの更新

Google は最近、検索への投資を増やしているようです。ここ数か月で、パーソナライズ検索とユニバー...

ITコミュニティサイトCSDNがシリーズA資金調達の完了を発表

新浪科技新聞10月23日午後、ITコミュニティサイトCSDNは本日、シリーズA資金調達を完了したと発...

vpsdime-15 USD/年/128 MB RAM/5 GB HDD/200 GB フロー/G ポート

vpsdime、実は皆さんがよくご存知のBackupsyなどと同じブランドです。現在とても有名です!...

富士通CTOがクラウドコンピューティングに冷水を浴びせる:技術が成熟しておらず、需要がない

2月26日早朝、世界第5位のサーバーメーカーである富士通が、現在人気のクラウドコンピューティングに冷...

ウェブサイトの最適化の各部分に何ポイント与えますか?

今年、Green Radish と Pomegranate アルゴリズムが導入され、SEO 業界は大...

ホットイベントソフト記事マーケティング戦略

今はホットトピックの時代です。信じられないなら見てみてください。百度のような検索エンジンでさえ、その...

Baidu の最適化: ブラックリンクの後、偽装フレンドリーリンクが人気に

Baidu の最適化に注目しているウェブマスターは、Baidu が最近、ブラックリンクやリンク取引を...

edgevirt: TIKTOK/Netflix のロックを解除、月額 2.25 ドル、1G メモリ/1 コア/25g SSD/5T トラフィック/10Gbps 帯域幅

edgevirtは現在、主にエクニクスのマイアミデータセンターでVPSサービスを提供しています。評価...

2013年最も不満を抱いたテクノロジー界の大物トップ10:ヴァンクルのチェン・ニアンがトップ

今年も年末がやってきました。この一年、テクノロジー企業は浮き沈みを経験し、業界は数え切れないほどの変...