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

推薦する

映画コレクションステーションのSEOアイデアについて

何もすることがなかったので、以前使われていなかったドメイン名を使って映画コレクションサイトを作りまし...

中国のクラウドコンピューティング市場はどのように規制されていますか?

国内外の規制当局には、IP が物理マシンによってサポートされているか仮想マシンによってサポートされて...

K8S を学びたいなら、DaemonSet は非常に重要です!収集する価値がある

今日は、[Kubernetes] DaemonSet の詳細な説明を共有して、履歴書を充実させ、面接...

Oracle が Kubernetes 開発者の作業を容易にする新しいクラウド インフラストラクチャ エージェントをリリース

オラクル社は、開発者がKubernetes上に構築されたコンテナ化されたアプリケーションをクラウドサ...

HiTao.comを含む違法オンラインショッピング広告の疑いのある4件が初めて摘発された

HiTao.com は、特許取得済みのサボテン濃縮物を宣伝しており、市場の承認を得て、人々が短期間で...

Spring Cloud はマイクロサービス アーキテクチャを構築します: 分散構成センター [Dalston バージョン]

Spring Cloud Config は、分散システムのインフラストラクチャおよびマイクロサービス...

高品質 VPS: Shockhosting ロサンゼルス クアドラネット データ センター KVM 仮想 VPS の簡単なレビュー

推薦: ホスティング事業を最初に開始したshockhostingは、独自のAS番号を持っています。小...

読者が本当に気に入る記事の書き方

オンラインで記事を書くことは、実は伝統的な創作と似ていますが、違いは、オンラインで作成された記事はネ...

Docker コンテナを他のサーバーに移行する 5 つの方法

[[388254]]多くの場合、移行は避けられません。ハードウェアのアップグレード、データ センター...

AIはホテルソフトウェアの専門家がクラウドを活用できるよう支援します

[51CTO.com よりオリジナル記事] 観光業、特にホテル業は古い産業だと思っている人が多いです...

HeroicVPS-7ドル/KVM/2IP/512Mメモリ/30gハードディスク/1Tトラフィック/Phoenix/Windows

HeroicVPS の 10 月のプロモーションが始まりました。生涯 30% オフの割引コード: 8...

周紅毅がプロダクトマネージャーについて語る:注意深く、共感し、あらゆることに注意を払う

周 洪一はじめに: 周紅毅氏は、自身が製作した製品に関して豊富な経験を持っています。ポイントの 1 ...

JDアリアンツ保険はデジタル変革をリードし、30分で保険金請求を解決して利益を得ています

2020年2月、JDアリアンツ保険は、保険契約者である孫さん(仮名)から報告を受け、彼女が残念ながら...

分散オフィス化で4つの大きな変化、3大分析機関が8つの対策を公表

2020年春、COVID-19パンデミックが拡大するにつれ、世界中で何千万人もの人々がリモートワーク...

litemoe: 49元/月、3ネットワークcn2 gia VPS、1Gbps帯域幅、KVM/512Mメモリ/10gSSD/512Gトラフィック

litemoe さん、ロサンゼルスのトリプルネットワーク cn2 gia vps ラインの VPS ...