30分でわかるコング経由の.NETゲートウェイ
Kongとは
Openrestryは、NginxとLuaをベースにした高性能なプラットフォームで、内部には多数のLuaライブラリが搭載されています。Kong は Openrestry アプリケーションであり、Openrestry は Nginx 上で動作し、nginx を Lua で拡張しています。したがって Kong = Openrestry + nginx + lua と考えてください。Kong は高い拡張性を持ち、プラグイン機構によって拡張可能です。
公式ドキュメント: https://docs.konghq.com/
Github: https://github.com/Kong/kong
原理・原則
クライアントのリクエストはKongに届き、KongはそれがどのConsumerであるかを特定し、ルーティングルールに基づいて、サービスに対応する上流サービスにリクエストを転送する。このプロセスに関わるコアコンポーネントを見てみましょう。
コンシューマー。Consumerのプラグインを定義し、リクエストルールを設定することができるアプリケーションを表します。
ルート。クライアントとサービスをマッチングさせるためのルールで、Kongのエントリーポイントになる。Routeのルールにマッチすると、それに関連するServiceにプロキシされ、RouteはServiceに対応し、Serviceは複数のRouteを持つ
サービス:当社のAPIやアップストリームサーバーを管理します。サービスの主なプロパティは、URL、ポート、プロトコルなどです。
アップストリーム Kongの背後に位置するサービス/API、ロードバランシングのための複数インスタンス展開
プラグイン。認証、レート制限などの高度な機能を提供し、ゲートウェイを拡張する。
Kongのインストール
公式ドキュメント:https://konghq.com/install/#kong-community
エンタープライズ版とオープンソース版があり、今回はエンタープライズ版をインストールしたが、オープンソースの機能しか使っていない
# pull image
docker pull kong/kong-gateway:2.6.0.0-alpine
#tag
docker tag kong/kong-gateway:2.6.0.0-alpine kong-ee
#create network
docker network create kong-ee-net
#Run the database container
docker run -d --name kong-ee-database --network=kong-ee-net -p 5432:5432 -e "POSTGRES_USER=kong" -e "POSTGRES_DB=kong" -e " quot;POSTGRES_PASSWORD=kong" postgres:9.6
#database migration
docker run --rm --network=kong-ee-net -e "KONG_DATABASE=postgres" -e "KONG_PG_HOST=kong-ee-database" -e "KONG_PG_ PASSWORD=kong" -e "KONG_PASSWORD={PASSWORD}" kong-ee kong migrations bootstrap
#RunKong
docker run -d --name kong-ee --network=kong-ee-net -e "KONG_PROXY_LISTEN=0.0.0.0:8000,0.0.0.0:9080 http2" -e "KONG_DATABASE= postgres" -e "KONG_PG_HOST=kong-ee-database" -e "KONG_PG_PASSWORD=kong" -e "KONG_PROXY_ACCESS_LOG=/dev/ stdout" -e "KONG_ADMIN_ACCESS_LOG=/dev/stdout" -e "KONG_PROXY_ERROR_LOG=/dev/stderr" -e "KONG_ADMIN_ERROR_ LOG=/dev/stderr" -e "KONG_ADMIN_LISTEN=0.0.0.0:8001" -e "KONG_ADMIN_GUI_URL=http://{HOSTNAME}:8002" -p 8000: 8000 -p 8443:8443 -p 8001:8001 -p 8444:8444 -p 8002:8002 -p 8445:8445 -p 8003:8003 -p 8004:8004 -p 9080:9080 kong-ee
ビジュアルインターフェイスKongaのインストール
公式ソースコード: https://github.com/pantsel/konga
docker pull pantsel/konga
docker run -d -p 1337:1337 --network kong-ee-net -e "TOKEN_SECRET=kongtoken" -e "DB_ADAPTER=postgres" -e "DB_HOST= kong-ee-database" -e "DB_USER=kong" -e "DB_PASSWORD=kong" --name konga pantsel/konga
localhost:1337にアクセスし、新しいユーザーを作成し、ログインして接続を作成:test/http://192.168.43.94:8001、kong apiにポート8001を指定します。
KongプロキシHTTPサービス
使用するデモプロジェクトは、https://github.com/cysnet/gateway-aspnetcore-demo、以下の内容です。
- Httpサービス。サーバー1、サーバー2
- Grpcサービス。GrpcService1、GrpcService2
- Grpcクライアント。GrpcClient
- IdentityServer4 サービス。Idstest
- ロギングサービス。LogServer
1.プロキシHttpサービスはServer1を使用し、Server1を起動します。
2. 管理者用apiでKongにサービスを作成するか、ビジュアルインターフェースのKongaを使用する
<ブロッククオートPOST http://192.168.43.94:8001/services --data name=server1 --data url='http://192.168.43.94:5000'
3. ルートは管理者用apiで作成されますが、ビジュアルインターフェースのKongaを使用して作成することも可能です
<ブロッククオートhttp://192.168.43.94:8001/services/server1/routes -データ 'paths[]=/http1'-data name=http1
4. テスト
香港プロキシGrpcサービス
1. プロキシGrpcはGrpcService1を使用し、GrpcService1を起動します。
2. 管理者用apiでKongにサービスを作成するか、ビジュアルインターフェースのKongaを使用する
<ブロッククオートPOST 192.168.43.96:8001/services --data name=gserver1 --data protocol=grpc --data host=192.168.43.94 --data port=6001
3. 管理者APIでルートを作成するか、ビジュアルインターフェースのKongaを使用する
<ブロッククオートPOST 192.168.43.94:8001/services/gserver1/routes --data protocols[]=grpc --data name=r-gserver1 --data paths[]=/greet
4. GrpcClientの実行テスト
コングロードHttpサービス
1. Server1 を Server2 で起動する
2. 管理者用apiでKongにアップストリームを作成するか、ビジュアルインターフェースのKongaを使用します。
<ブロッククオートPOST http://192.168.43.94:8001/upstreams -データ名=u-http1
3. u-http1 のターゲットを作成し、server1 と server2 を指すようにします。
POST http://192.168.43.94:8001/upstreams/u-http1/targets --data target='192.168.43.94:5000'
POST http://192.168.43.94:8001/upstreams/u-http1/targets --data target='192.168.43.94:5001'
4. 4. http1 サービスが上流の u-htttp1 を指すように変更する。
パッチ http://192.168.43.94:8001/services/server1 --data host='u-http1'
5. 以下のapiを呼び出してテストします。
KongロードGrpcサービス
1. GrpcService1 と GrpcService2 を起動します。
2. 管理者用apiでKongにアップストリームを作成するか、ビジュアルインターフェースのKongaを使用します。
<ブロッククオートPOST http://192.168.43.94:8001/upstreams -データ名=u-gserver1
3. u-gserver1のターゲットとして、GrpcService1およびGrpcService2を指定する。
POST http://192.168.43.94:8001/upstreams/u-gserver1/targets --data target='192.168.43.94:6001'
POST http://192.168.43.94:8001/upstreams/u-gserver1/targets --data target='192.168.43.94:6002'
4. gserver1 サービスが上流の u-gserver1 を指すように変更する。
パッチ http://192.168.43.94:8001/services/gserver1 -データ host='u-gserver1'
5. テスト、GrpcClientの実行
JWT認証のためのIdentityServer4の統合
1. server1 の jwt プラグインを有効化します。
POST http://localhost:8001/services/server1/plugins -d "name=jwt " -d "config.key_claim_name=client_id"
2. コンシューマの作成
POST localhost:8001/consumers -d "username=c-server1"。
3. ids4証明書の公開鍵と秘密鍵の取得
openssl インストール https://slproweb.com/products/Win32OpenSSL.html
openssl pkcs12 -in chester.pfx -nocerts -nodes -out private_pc.key
Extract the private key from the key pair (header format: -----BEGIN RSA PUBLIC KEY-----)
openssl rsa -in private_pc.key -out private.pem
Extract public key from key pair (header format: -----BEGIN PUBLIC KEY-----)
openssl rsa -in private_pc.key -pubout -out public.key
4. C-server1用のクレデンシャルを作成する
POST localhost:8001/consumers/c-server1/jwt -d "algorithm=RS256" -d "key=big_cat" -d "secret=xxxxxx" -d ";rsa_public_key=xxxxxxx"
5. jwttokenを取得するためにid4testを起動します。
6. トークンを検証するためにAPIを呼び出す
流量制限プラグイン「RateLimit
<ブロッククオートPOST http://<admin-hostname>:8001/plugins -データ名=rate-limiting -データconfig.minute=5 -データconfig.policy=redis -データredis_host=192.168.43.102 -データlimit_by=ip -データredis_password=123456
トリガーとトリガーリミットを複数回呼び出す
キャッシュプラグイン
<ブロッククオートPOST http://localhost:8001/plugins -データ名=proxy-cache -データconfig.content_type="text/plain; charset=utf-8" -データconfig.cache_ttl=30 -データconfig.strategy=memory
X-Cache-Status=Hit を複数回呼び出すと、キャッシュヒットに成功する。
ログ取得プラグイン
LogServerの起動
ロギングプラグインをオンにする
POST http://localhost:8001/services/server1/plugins --data "name=http-log" --data "config.http_endpoint=http://192.168.43.94:5555/Log" --data "config.method=POST& quot.Data.Data.Data.Data.Data.Data.Data.Data.Data。
http://192.168.43.94:8000/http1/Name をリクエストし、LogServer の出力を表示する
30分でKong経由のNETゲートウェイはこの記事のすべてです、Kongゲートウェイについての詳細については、過去の記事を検索するか、次の記事を参照してください続けてください。
関連
-
.netcoreプロジェクトでIStartupFilterを使用するためのチュートリアル
-
pythonでpillowをインストールする3つの方法
-
.NET 6:.NETのロギングコンポーネントlog4netを使用する。
-
NETガベージコレクション GC診断ツール dotnet-gcmon 使用方法
-
ASP.NET CoreでURLを設定する5つの方法
-
net core downlink tracking skywalking インストールと使いやすいチュートリアル
-
swagger uiをasp.net coreに統合する原理
-
再起動を伴わないNET5の設定変更は自動的に反映される
-
asp.net core3.1 cookieとjwtのハイブリッド認証による多様な認証ソリューションの実現
-
非同期タスクキャンセルと監視のネット実装
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン