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

推薦する

Baidu のウェブサイトの掲載とランキングの要因の分析例

インターネットで何年も活動した後、私はそれなりの成功を収めましたが、それはほんの一瞬の成功に過ぎませ...

Apple ID セットアップチュートリアルガイド

iPhone のセキュリティに関して言えば、一つは電話機自体のセキュリティであり、もう一つは App...

ミニゲーム開発者の広告収入は50-50で分配されるべきでしょうか?そこから利益を得るには、少なくとも 100 万 DAU が必要です...

最近、 WeChatの公式パブリックアカウントは、ミニプログラム開発者を奨励しサポートするために、2...

#日本VPS# conoha-500円無料、支払いはAlipay/PayPalで!

conoha.jpでは昨年の2,000円プレゼント企画は終了しました。公式スタッフがホストキャット専...

hostyun: 新しい日本の VPS、10% 割引、IIJ 回線、ソフトバンク回線、200M 帯域幅、月額 19.8 元から

Hostyun(10年間運営している元祖ホストシェアリング組織)は本日、日本のデータセンターを追加し...

海外貿易メールを発展させるために大量のメールを送信するための 4 つのヒント

ショートビデオ、セルフメディア、インフルエンサーのためのワンストップサービス最近、国内の医療機器メー...

クラウドコンピューティングとは何ですか?理解するための1つの記事

[[382681]] 「クラウド」という概念は私たちの生活の隅々まで浸透しています。 2021年の春...

ライトイヤーフォーラムは20日で終了となります。SEOフォーラム運営の難しさについて語り合いましょう。

最近、SEOグループのみんなが、光年フォーラムは20日に閉鎖されると言っています。ため息をつくしかあ...

「リンクの売買の害」から Baidu SEO ガイドの合理的な考察まで

Baidu Webmaster Platform の情報エリアに注目すると、Baidu が Web ...

P4スイッチをベースにしたUCloudのクラウドプラットフォームネットワーク実践

UCloud が 2012 年に設立されて以来、仮想ネットワークは常に IaaS 製品のコア コンポ...

V.PS: すべてのVPSが40%オフ、香港CMI/米国CN2/欧州AS9929などの高速回線

v.ps は、最大 40% オフ、年間支払いで 30% オフ、2 年支払いで 35% オフ、3 年支...

同じページでもキーワードによってランキングが全く異なる

このタイトルを見ると、これはナンセンスだと言うかもしれません。もちろん、同じページでもキーワードによ...

「百度はブランドプロモーションを知っている」のSEOプロモーションで関連検索を確立

「Baidu Knows」は皆さんもよくご存知だと思います。さまざまな目的でプロモーションを行うため...

インターネットの発展とトレンド!

過去2年間で、ユーザーは次々と「無料」に別れを告げてきました。支払い残高の引き出しには料金がかかり、...

ソーシャル旅行ウェブサイトは利益の方向性が不明確で成長のボトルネックに直面

1月29日、金緑シンクタンクが発表した最新データによると、昨年11月、ほとんどのユーザー生成コンテン...